# Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. use strict; use Test; my $loaded; BEGIN { $| = 1; plan tests =>5; } END {print "not ok 1\n" unless $loaded;} use Hash::Layered; ### test: modules load $loaded = 1; ok(1); ######################### End of black magic. #(['w', k, v], # write v to k # ['m', v], # set mode to v # ['d', v], # set mode default to v # ['r', k, v], # read from k, expect v # 'push', 'pop', #) my @plan1 = (['d', 'opaque'], ['w', 'a', 1], ['w', 'b', 2], ['w', 'c', 3], 'push', ['w', 'a', 4], ['w', 'b', 5], ['r', 'c', undef], ['r', 'a', 4], 'pop', ['r', 'a', 1], ['r', 'b', 2], ['r', 'c', 3], 'push', ['w', 'a', 6], ['w', 'b', 7], ['r', 'c', undef], ['r', 'a', 6], ); my @plan1_end = (['r', 'a', 6], ['r', 'b', 7], ['r', 'c', undef], ['r', 'd', undef], ); my @plan2 = (['d', 'cascade'], ['w', 'a', 21], ['w', 'b', 22], ['w', 'c', 23], 'push', ['w', 'a', 24], ['w', 'b', 25], ['r', 'c', 23], ['r', 'a', 24], 'pop', ['r', 'a', 24], ['r', 'b', 25], ['r', 'c', 23], 'push', ['w', 'a', 26], ['w', 'b', 27], ['r', 'c', 23], ['r', 'a', 26], ); my @plan3 = (['d', 'cascade'], ['r', 'a', undef], ['r', 'b', undef], ['r', 'c', undef], ['w', 'a', 31], ['w', 'b', 32], ['w', 'c', 33], 'push', ['r', 'a', 31], ['m', 'opaque'], ['r', 'a', undef], ['w', 'c', 34], ['w', 'd', 35], ['m', 'default'], ['r', 'a', 31], ['r', 'b', 32], ['r', 'c', 34], ['r', 'd', 35], 'push', ['w', 'a', 36], ['m', 'oneway'], ['w', 'e', 37], ['w', 'a', 38], ['r', 'a', 38], ['r', 'b', 32], ['r', 'e', 37], 'pop', ['r', 'e', undef], 'pop', ['r', 'a', 36], ['r', 'b', 32], ['r', 'c', 33], ['r', 'd', undef], ); my $h1 = Hash::Layered->new(); ok(0 == ex_test_plan($h1, \@plan1)); my $h2 = Hash::Layered->new(); ok(0 == ex_test_plan($h2, \@plan2)); # make sure objects are seperate ok(0 == ex_test_plan($h1, \@plan1_end)); %$h2 = (); ok (0 == ex_test_plan($h2, \@plan3)); exit 0; sub ex_test_plan { my ($h,$plan) = @_; #warn "# begin test run\n"; my $errors = 0; foreach my $cmdset (@$plan) { my $cmd = ref($cmdset) ? $cmdset->[0] : $cmdset; if ($cmd eq 'w') { $h->{$cmdset->[1]} = $cmdset->[2]; } elsif ($cmd eq 'r') { my $e = $cmdset->[2]; my $v = $h->{$cmdset->[1]}; if ((!defined($e) && !defined($v)) || $v == $e) { # ok } else { $errors += 1; warn "# exp[".$e."] got[".$v."]\n"; } } elsif ($cmd eq 'm') { $h->set_layer($cmdset->[1]); } elsif ($cmd eq 'd') { $h->set_default($cmdset->[1]); } elsif ($cmd eq 'push') { $h->push(); } elsif ($cmd eq 'pop') { $h->pop(); } } #warn "# end test run\n"; return $errors; } 1;