# -*-perl-*- #use Test::More tests => 8; use Test::More qw(no_plan); use Data::Dumper; my $expect = { 1 => { 'date' => '23.12.2000 10:33:02', 'note' => 'any new text' }, 2 => { 'date' => '03.02.2004 18:13:52', 'note' => 'yet whatever you mean' } }; BEGIN { use_ok "NOTEDB" }; require_ok("NOTEDB"); my $key = '01010101'; my $alg = 'Rijndael'; foreach my $CR (1 .. 0) { $NOTEDB::crypt_supported = $CR; SKIP: { skip "no crypt", 1 if $CR; # FIXME: for some weird reason, crypto doesn't work with ::binary? eval { require NOTEDB::binary; }; skip "Fatal, skipping test for NOTEDB::binary", 1 if $@; unlink "t/binary.out"; my $db = new NOTEDB::binary(dbname => "t/binary.out"); $db->use_crypt($key, $alg) if $CR; ok(ref($db), "Database object loaded"); &wrdb($db, "NOTEDB::binary"); } SKIP: { eval { require NOTEDB::general; }; skip "Config::General not installed, skipping test for NOTEDB::general", 1 if $@; unlink "t/general.out"; my $db2 = NOTEDB::general->new(dbname => "t/general.out"); $db2->use_crypt($key, $alg) if $CR; ok(ref($db2), "Database object loaded"); &wrdb($db2, "NOTEDB::general"); } SKIP: { eval { require NOTEDB::text; }; skip "Storable not installed, skipping test for NOTEDB::text", 1 if $@; unlink "t/test.out"; my $db3 = NOTEDB::text->new(dbname => "t/text.out"); $db3->use_crypt($key, $alg) if $CR; ok(ref($db3), "Database object loaded"); &wrdb($db3, "NOTEDB::text"); } SKIP: { eval { require NOTEDB::dumper; }; skip "Data::Dumper not installed, skipping test for NOTEDB::dumper", 1 if $@; unlink "t/dumper.out"; my $db4 = NOTEDB::dumper->new(dbname => "t/dumper.out"); $db4->use_crypt($key, $alg) if $CR; ok(ref($db4), "Database object loaded"); &wrdb($db4, "NOTEDB::dumper"); } SKIP: { eval { require NOTEDB::dbm; }; skip "DB_File not installed, skipping test for NOTEDB::dbm", 1 if $@; unlink "t/note.dbm"; unlink "t/date.dbm"; my $db5 = NOTEDB::dbm->new(dbname => "t"); $db5->use_crypt($key, $alg) if $CR; ok(ref($db5), "Database object loaded"); &wrdb($db5, "NOTEDB::dbm"); } } SKIP: { eval { require NOTEDB::pwsafe3; }; skip "Crypt::PWSafe3 not installed, skipping test for NOTEDB::pwsafe3", 1 if $@; unlink "t/pwsafe3.out"; my $db6 = NOTEDB::pwsafe3->new(dbname => "t/pwsafe3.out"); $db6->{key} = "01010101"; ok(ref($db6), "Database object loaded"); &wrdb3($db6, "NOTEDB::pwsafe3"); } sub wrdb { my ($db, $name) = @_; is_deeply($db->{use_cache}, undef, "$name: Chache disabled"); $db->set_new(1, $expect->{1}->{note}, $expect->{1}->{date}); my ($note, $date) = $db->get_single(1); like($note, qr/any new text/, "$name: Retrieve newly written entry content"); like($date, qr/^\d\d/, "$name: Retrieve newly written entry date"); $db->set_new(2, $expect->{2}->{note}, $expect->{2}->{date}); my $next = $db->get_nextnum(); is_deeply($next, 3, "$name: Get next note id"); my %all = $db->get_all(); is_deeply($expect, \%all, "$name: Get all notes hash") or diag(Dumper(\%all)); } sub wrdb3 { my ($db, $name) = @_; is_deeply($db->{use_cache}, undef, "$name: Chache disabled"); my $ex3 = $expect; my $n = $db->get_nextnum; $db->set_new($n, $ex3->{1}->{note}, $ex3->{1}->{date}); $ex3->{$n} = delete $ex3->{1}; my ($note, $date) = $db->get_single($n); like($note, qr/any new text/, "$name: Retrieve newly written entry content"); like($date, qr/^\d\d/, "$name: Retrieve newly written entry date"); $n = $db->get_nextnum; $db->set_new($n, $ex3->{2}->{note}, $ex3->{2}->{date}); $ex3->{$n} = delete $ex3->{2}; my %all = $db->get_all(); # hack %all to that it passes the next test foreach my $n (keys %all) { chomp $all{$n}->{note}; } is_deeply($ex3, \%all, "$name: Get all notes hash") or diag(Dumper(\%all)); }