The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;

my $has_timepiece;

BEGIN {
    $ENV{ANSI_COLORS_DISABLED} = 1;
    delete $ENV{DATAPRINTERRC};
    use File::HomeDir::Test;
};

use Data::Printer {
    filters => {
        -external => 'DB',  # testing simpler syntax
                            # (list syntax is tested in datetime)
    },
};

eval 'use DBI';
plan skip_all => 'DBI not available' if $@;

my $dir = -d 't' ? 't/' : './';
my $dbh = DBI->connect('dbi:DBM(RaiseError=1):', undef, undef,
        {f_dir => $dir });

is( p($dbh), 'DBM Database Handle (connected) {
    Auto Commit: 1
    Statement Handles: 0
    Last Statement: -
}', 'DBH output'
);
my $sth = $dbh->prepare('CREATE TABLE foo ( bar TEXT, baz TEXT )');
is( p($dbh), 'DBM Database Handle (connected) {
    Auto Commit: 1
    Statement Handles: 1 (0 active)
    Last Statement: CREATE TABLE foo ( bar TEXT, baz TEXT )
}', 'DBH output (after setting statement)'
);

is( p($sth), 'CREATE TABLE foo ( bar TEXT, baz TEXT )', 'STH output' );

SKIP: {
    eval { $sth->execute };
    skip 'error running query', 5 if $@;

    is( p($sth), 'CREATE TABLE foo ( bar TEXT, baz TEXT )', 'STH output' );

    my $sth2 = $dbh->prepare('SELECT * FROM foo WHERE bar = ?');
    is( p($dbh), 'DBM Database Handle (connected) {
    Auto Commit: 1
    Statement Handles: 2 (0 active)
    Last Statement: SELECT * FROM foo WHERE bar = ?
}', 'DBH output (after new statement)'
    );

    $sth2->execute(42);
    is( p($sth2), 'SELECT * FROM foo WHERE bar = ?  (bindings unavailable)', 'STH-2 output' );

    is( p($dbh), 'DBM Database Handle (connected) {
    Auto Commit: 1
    Statement Handles: 2 (1 active)
    Last Statement: SELECT * FROM foo WHERE bar = ?
}', 'DBH output (after executing new statement)'
    );

    undef $sth;

    $dbh->disconnect;
    is( p($dbh), 'DBM Database Handle (disconnected) {
    Auto Commit: 1
    Statement Handles: 1 (1 active)
    Last Statement: SELECT * FROM foo WHERE bar = ?
}', 'DBH output (after disconnecting)'
    );
};

cleanup();

################
## DBIx::Class

my $packages = <<'EOPACKAGES';
package MyTest::Schema;
use base 'DBIx::Class::Schema';
__PACKAGE__->load_namespaces;

1;

package MyTest::Schema::Result::Foo;
use base 'DBIx::Class::Core';
__PACKAGE__->table('foo');
__PACKAGE__->add_columns(qw/ bar baz /);

1;

EOPACKAGES

SKIP: {
    eval "$packages";
    skip "DBIx::Class not available: $@", 1 if $@;
    package main;

    my $schema = MyTest::Schema->connect(
            'dbi:DBM(RaiseError=1):', undef, undef, {f_dir => $dir }
    );

    is p($schema), 'MyTest::Schema DBIC Schema with \ DBM Database Handle (connected) {
    Auto Commit: 1
    Statement Handles: 0
    Last Statement: -
}', 'dumping DBIC schema';

};

ok 2, 'still here, cleaning up';
cleanup();

sub cleanup {
    use File::Spec;
    foreach my $ext (qw(dir lck pag)) {
        my $file = File::Spec->catfile( $dir, "foo.$ext" );
        if (-e $file) {
            unlink $file;
        }
        else {
            note("error removing $file");
        }
    }
}

done_testing;