Rewrite SqlMakerTest to fully depend on SQLA::Test
[dbsrgits/DBIx-Class.git] / t / lib / DBIC / SqlMakerTest.pm
1 package DBIC::SqlMakerTest;
2
3 use strict;
4 use warnings;
5
6 use base qw/Exporter/;
7
8 use Carp;
9 use SQL::Abstract::Test;
10
11 our @EXPORT = qw/
12   is_same_sql_bind
13   is_same_sql
14   is_same_bind
15 /;
16 our @EXPORT_OK = qw/
17   eq_sql
18   eq_bind
19   eq_sql_bind
20 /;
21
22 sub is_same_sql_bind {
23   # unroll possible as_query arrayrefrefs
24   my @args;
25
26   for (1,2) {
27     my $chunk = shift @_;
28
29     if ( ref $chunk eq 'REF' and ref $$chunk eq 'ARRAY' ) {
30       my ($sql, @bind) = @$$chunk;
31       push @args, ($sql, \@bind);
32     }
33     else {
34       push @args, $chunk, shift @_;
35     }
36
37   }
38
39   push @args, shift @_;
40
41   croak "Unexpected argument(s) supplied to is_same_sql_bind: " . join ('; ', @_)
42     if @_;
43
44   SQL::Abstract::Test::is_same_sql_bind (@args);
45 }
46
47 *is_same_sql = \&SQL::Abstract::Test::is_same_sql;
48 *is_same_bind = \&SQL::Abstract::Test::is_same_bind;
49 *eq_sql = \&SQL::Abstract::Test::eq_sql;
50 *eq_bind = \&SQL::Abstract::Test::eq_bind;
51 *eq_sql_bind = \&SQL::Abstract::Test::eq_sql_bind;
52
53 1;
54
55 __END__
56
57
58 =head1 NAME
59
60 DBIC::SqlMakerTest - Helper package for testing sql_maker component of DBIC
61
62 =head1 SYNOPSIS
63
64   use Test::More;
65   use DBIC::SqlMakerTest;
66   
67   my ($sql, @bind) = $schema->storage->sql_maker->select(%args);
68   is_same_sql_bind(
69     $sql, \@bind, 
70     $expected_sql, \@expected_bind,
71     'foo bar works'
72   );
73
74 =head1 DESCRIPTION
75
76 Exports functions that can be used to compare generated SQL and bind values.
77
78 This is a thin wrapper around L<SQL::Abstract::Test>, which makes it easier
79 to compare as_query sql/bind arrayrefrefs directly.
80
81 =head1 FUNCTIONS
82
83 =head2 is_same_sql_bind
84
85   is_same_sql_bind(
86     $given_sql, \@given_bind,
87     $expected_sql, \@expected_bind,
88     $test_msg
89   );
90
91   is_same_sql_bind(
92     $rs->as_query
93     $expected_sql, \@expected_bind,
94     $test_msg
95   );
96
97   is_same_sql_bind(
98     \[$given_sql, @given_bind],
99     $expected_sql, \@expected_bind,
100     $test_msg
101   );
102
103 Compares given and expected pairs of C<($sql, \@bind)>, and calls
104 L<Test::Builder/ok> on the result, with C<$test_msg> as message.
105
106 =head2 is_same_sql
107
108   is_same_sql(
109     $given_sql,
110     $expected_sql,
111     $test_msg
112   );
113
114 Compares given and expected SQL statement, and calls L<Test::Builder/ok> on the
115 result, with C<$test_msg> as message.
116
117 =head2 is_same_bind
118
119   is_same_bind(
120     \@given_bind, 
121     \@expected_bind,
122     $test_msg
123   );
124
125 Compares given and expected bind value lists, and calls L<Test::Builder/ok> on
126 the result, with C<$test_msg> as message.
127
128 =head2 eq_sql
129
130   my $is_same = eq_sql($given_sql, $expected_sql);
131
132 Compares the two SQL statements. Returns true IFF they are equivalent.
133
134 =head2 eq_bind
135
136   my $is_same = eq_sql(\@given_bind, \@expected_bind);
137
138 Compares two lists of bind values. Returns true IFF their values are the same.
139
140 =head2 eq_sql_bind
141
142   my $is_same = eq_sql_bind(
143     $given_sql, \@given_bind,
144     $expected_sql, \@expected_bind
145   );
146
147 Compares the two SQL statements and the two lists of bind values. Returns true
148 IFF they are equivalent and the bind values are the same.
149
150
151 =head1 SEE ALSO
152
153 L<SQL::Abstract::Test>, L<Test::More>, L<Test::Builder>.
154
155 =head1 AUTHOR
156
157 Norbert Buchmuller, <norbi@nix.hu>
158
159 =head1 COPYRIGHT AND LICENSE
160
161 Copyright 2008 by Norbert Buchmuller.
162
163 This library is free software; you can redistribute it and/or modify
164 it under the same terms as Perl itself.