moved internal test module into published SQL/Abstract/Test, so that clients of SQLA...
[scpubgit/Q-Branch.git] / t / 03values.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use Test::More;
6
7 use SQL::Abstract::Test qw/is_same_sql_bind/;
8 plan tests => 5;
9
10 use SQL::Abstract;
11
12 my $sql = SQL::Abstract->new;
13
14 my @data = (
15     {
16         user => 'nwiger',
17         name => 'Nathan Wiger',
18         phone => '123-456-7890',
19         addr => 'Yeah, right',
20         city => 'Milwalkee',
21         state => 'Minnesota',
22     },
23
24     {
25         user => 'jimbo',
26         name => 'Jimbo Bobson',
27         phone => '321-456-0987',
28         addr => 'Yo Momma',
29         city => 'Yo City',
30         state => 'Minnesota',
31     },
32
33     {
34         user => 'mr.hat',
35         name => 'Mr. Garrison',
36         phone => '123-456-7890',
37         addr => undef,
38         city => 'South Park',
39         state => 'CO',
40     },
41
42     {
43         user => 'kennyg',
44         name => undef,
45         phone => '1-800-Sucky-Sucky',
46         addr => 'Mr. Garrison',
47         city => undef,
48         state => 'CO',
49     },
50
51     {
52         user => 'barbara_streisand',
53         name => 'MechaStreisand!',
54         phone => 0,
55         addr => -9230992340,
56         city => 42,
57         state => 'CO',
58     },
59 );
60
61 # Note to self: I have no idea what this does anymore
62 # It looks like a cool fucking segment of code though!
63 # I just wish I remembered writing it... :-\
64
65 my($sth, $stmt);
66 my($laststmt, $numfields);
67 for my $t (@data) {
68       local $"=', ';
69
70       $stmt = $sql->insert('yo_table', $t);
71       my @val = $sql->values($t);
72       $numfields ||= @val;
73
74       ok((! $laststmt || $stmt eq $laststmt) && @val == $numfields
75           && equal(\@val, [map { $t->{$_} } sort keys %$t])) or
76               print "got\n",
77                     "[$stmt] [@val]\n",
78                     "instead of\n",
79                     "[$t->{stmt}] [stuff]\n\n";
80       $laststmt = $stmt;
81 }
82
83 sub equal {
84       my ($a, $b) = @_;
85       return 0 if @$a != @$b;
86       for (my $i = 0; $i < $#{$a}; $i++) {
87               next if (! defined($a->[$i])) && (! defined($b->[$i]));
88               return 0 if $a->[$i] ne $b->[$i];
89       }
90       return 1;
91 }
92