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