# Tests of DBIx::Interpolate use strict; use Test::More 'no_plan'; use Data::Dumper; use DBIx::Interpolate qw(:all); my $fake_dbh = bless {Driver => {Name => 'mysql'}}, 'DBI::db'; my $dbx = new DBIx::Interpolate($fake_dbh); my $dbx2 = new DBIx::Interpolate(); my $dbi_interp = $dbx->make_dbi_interp(); my $dbi_interp2 = make_dbi_interp(); my $sql_interp = $dbx->make_sql_interp(); my $sql_interp2 = make_sql_interp(); my $x = 5; # dbh() is(ref($dbx->dbh()), 'DBI::db', 'dbh'); # connect() # no tests currently # sql_interp() &sql_interp_test(['SELECT * FROM mytable WHERE', {x => $x}], ['SELECT * FROM mytable WHERE x=?', $x], 'sql_interp'); # dbi_interp() with attr() and key_field() &interp_test(['SELECT * FROM mytable', attr(x => 1)], ['SELECT * FROM mytable', {x => 1}], 'attr'); &interp_test(['SELECT * FROM mytable', key_field('id1')], ['SELECT * FROM mytable', 'id1', undef], 'key_field'); &interp_test(['SELECT * FROM mytable WHERE x=', \$x, key_field('id1'), attr(x => 1)], ['SELECT * FROM mytable WHERE x= ?', 'id1', {x=>1}, $x], 'key_field + attr + bind'); #IMPROVE: add tests on $dbx # do, selectall... prepare... sub interp_test { my($snips, $expect, $name) = @_; is_deeply([dbi_interp @$snips], $expect, $name); is_deeply([$dbx->dbi_interp(@$snips)], $expect, "$name OO"); is_deeply([$dbi_interp->(@$snips)], $expect, "$name closure"); is_deeply([$dbi_interp2->(@$snips)], $expect, "$name closure2"); } sub sql_interp_test { my($snips, $expect, $name) = @_; is_deeply([sql_interp @$snips], $expect, $name); is_deeply([$dbx->sql_interp(@$snips)], $expect, "$name OO"); is_deeply([$sql_interp->(@$snips)], $expect, "$name closure"); is_deeply([$sql_interp2->(@$snips)], $expect, "$name closure2"); } END { # prevent DBI from destroying fake handle. bless $fake_dbh, 'SQL::Interpolate::UNBLESS'; }