Commit | Line | Data |
5a70a6c0 |
1 | package # Hide from PAUSE |
2 | t::common; |
fde3db1a |
3 | |
fde3db1a |
4 | use strict; |
d426259c |
5 | use warnings FATAL => 'all'; |
fde3db1a |
6 | |
7 | use base 'Exporter'; |
8 | our @EXPORT_OK = qw( |
2100f2ae |
9 | new_dbm |
fde3db1a |
10 | new_fh |
11 | ); |
12 | |
13 | use File::Spec (); |
14 | use File::Temp qw( tempfile tempdir ); |
15 | use Fcntl qw( :flock ); |
16 | |
17 | my $parent = $ENV{WORK_DIR} || File::Spec->tmpdir; |
18 | my $dir = tempdir( CLEANUP => 1, DIR => $parent ); |
19 | |
20 | sub new_fh { |
45f047f8 |
21 | my ($fh, $filename) = tempfile( 'tmpXXXX', DIR => $dir, UNLINK => 1 ); |
fde3db1a |
22 | |
23 | # This is because tempfile() returns a flock'ed $fh on MacOSX. |
24 | flock $fh, LOCK_UN; |
25 | |
26 | return ($fh, $filename); |
27 | } |
e9b0b5f0 |
28 | |
2100f2ae |
29 | sub new_dbm { |
30 | my @args = @_; |
31 | my ($fh, $filename) = new_fh(); |
350896ee |
32 | |
33 | my @reset_funcs; |
34 | my @extra_args; |
35 | |
36 | unless ( $ENV{NO_TEST_FILE} ) { |
37 | push @reset_funcs, undef; |
bac1b5d5 |
38 | push @extra_args, [ |
39 | file => $filename, |
40 | ]; |
350896ee |
41 | } |
d426259c |
42 | |
bac1b5d5 |
43 | if ( $ENV{TEST_SQLITE} ) { |
44 | (undef, my $filename) = new_fh(); |
7c927437 |
45 | # $filename = 'test.db'; |
bac1b5d5 |
46 | push @reset_funcs, sub { |
addbe56a |
47 | require 'DBI.pm'; |
bac1b5d5 |
48 | my $dbh = DBI->connect( |
49 | "dbi:SQLite:dbname=$filename", '', '', |
50 | ); |
51 | my $sql = do { |
52 | my $filename = 'etc/sqlite_tables.sql'; |
53 | open my $fh, '<', $filename |
54 | or die "Cannot open '$filename' for reading: $!\n"; |
55 | local $/; |
56 | <$fh> |
57 | }; |
58 | foreach my $line ( split ';', $sql ) { |
59 | $dbh->do( "$line" ) if $line =~ /\S/; |
60 | } |
61 | }; |
62 | push @extra_args, [ |
63 | dbi => { |
64 | dsn => "dbi:SQLite:dbname=$filename", |
65 | user => '', |
66 | password => '', |
67 | }, |
68 | ]; |
69 | } |
d426259c |
70 | |
71 | if ( $ENV{TEST_MYSQL_DSN} ) { |
350896ee |
72 | push @reset_funcs, sub { |
cd5303b4 |
73 | require 'DBI.pm'; |
350896ee |
74 | my $dbh = DBI->connect( |
67e9b86f |
75 | $ENV{TEST_MYSQL_DSN}, |
350896ee |
76 | $ENV{TEST_MYSQL_USER}, |
77 | $ENV{TEST_MYSQL_PASS}, |
78 | ); |
79 | my $sql = do { |
80 | my $filename = 'etc/mysql_tables.sql'; |
81 | open my $fh, '<', $filename |
82 | or die "Cannot open '$filename' for reading: $!\n"; |
83 | local $/; |
84 | <$fh> |
85 | }; |
86 | foreach my $line ( split ';', $sql ) { |
87 | $dbh->do( "$line" ) if $line =~ /\S/; |
88 | } |
89 | }; |
d426259c |
90 | push @extra_args, [ |
91 | dbi => { |
67e9b86f |
92 | dsn => $ENV{TEST_MYSQL_DSN}, |
d426259c |
93 | user => $ENV{TEST_MYSQL_USER}, |
94 | password => $ENV{TEST_MYSQL_PASS}, |
95 | }, |
96 | ]; |
97 | } |
98 | |
2100f2ae |
99 | return sub { |
100 | return unless @extra_args; |
101 | my @these_args = @{ shift @extra_args }; |
350896ee |
102 | if ( my $reset = shift @reset_funcs ) { |
103 | $reset->(); |
104 | } |
2100f2ae |
105 | return sub { |
7c927437 |
106 | DBM::Deep->new( @these_args, @args, @_ ) |
2100f2ae |
107 | }; |
108 | }; |
109 | } |
110 | |
fde3db1a |
111 | 1; |
112 | __END__ |