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