summaryrefslogtreecommitdiff
path: root/t/B_Hooks.t
diff options
context:
space:
mode:
Diffstat (limited to 't/B_Hooks.t')
-rw-r--r--t/B_Hooks.t134
1 files changed, 134 insertions, 0 deletions
diff --git a/t/B_Hooks.t b/t/B_Hooks.t
new file mode 100644
index 0000000..9b66c2d
--- /dev/null
+++ b/t/B_Hooks.t
@@ -0,0 +1,134 @@
+
+use strict;
+use Test::More;
+use File::Spec;
+
+plan tests => 12;
+
+use_ok('XML::Simple');
+
+SKIP: {
+ eval { require Tie::IxHash };
+
+ skip "Tie::IxHash not installed", 3 if $@;
+
+ $@ = '';
+ eval <<'EOF';
+
+ package SimpleOrder;
+
+ use base qw(XML::Simple);
+ use Tie::IxHash;
+
+ sub new_hashref {
+ my $self = shift;
+ my %hash;
+ tie %hash, 'Tie::IxHash', @_;
+ return \%hash;
+ }
+EOF
+ ok(!$@, 'no errors processing SimpleOrder');
+
+ my $xs = SimpleOrder->new;
+ my $xml = q{
+ <nums>
+ <num id="one">I</num>
+ <num id="two">II</num>
+ <num id="three">III</num>
+ <num id="four">IV</num>
+ <num id="five">V</num>
+ <num id="six">VI</num>
+ <num id="seven">VII</num>
+ </nums>
+ };
+ my $expected = {
+ 'one' => { 'content' => 'I' },
+ 'two' => { 'content' => 'II' },
+ 'three' => { 'content' => 'III' },
+ 'four' => { 'content' => 'IV' },
+ 'five' => { 'content' => 'V' },
+ 'six' => { 'content' => 'VI' },
+ 'seven' => { 'content' => 'VII' },
+ };
+
+ my $data = $xs->xml_in($xml);
+
+ is_deeply($data->{num}, $expected, 'hash content looks good');
+
+ is_deeply(
+ [ keys %{$data->{num}} ],
+ [ qw(one two three four five six seven) ],
+ 'order of the hash keys looks good too'
+ );
+
+}
+
+
+my $xs = XML::Simple->new(cache => 'storable');
+my $sx = ElbarotsXS->new(cache => 'storable');
+
+isa_ok($sx, 'XML::Simple', 'object of class ElbarotsXS');
+
+my $src_file = File::Spec->catfile('t', 'test1.xml');
+
+is(
+ $xs->storable_filename($src_file),
+ File::Spec->catfile('t', 'test1.stor'),
+ 'default storable cache filename looks good'
+);
+
+my $cache_file = File::Spec->catfile('t', '1tset.stor'),;
+is(
+ $sx->storable_filename($src_file),
+ $cache_file,
+ 'overridden storable cache filename looks good'
+);
+
+SKIP: {
+ eval { require Storable };
+
+ skip "Storable not installed", 2 if $@;
+
+ unlink($cache_file),
+ ok(! -e $cache_file, 'overridden cache file does not exist before parse');
+ my $data = $sx->xml_in($src_file);
+ ok(-e $cache_file, 'overridden cache file does exist after parse');
+ unlink($cache_file),
+}
+
+my $data = eval {
+ $xs = XML::Simple->new(cache => 'floogle');
+ $xs->xml_in($src_file);
+};
+ok($@, 'bad cache scheme was rejected');
+
+$data = eval {
+ $sx = ElbarotsXS->new(cache => 'floogle');
+ $sx->xml_in($src_file);
+};
+ok(! $@, 'custom cache scheme was not rejected');
+is_deeply(
+ $data,
+ { data => 'floogle' },
+ 'custom cache reading method delivered the goods'
+);
+
+exit 0;
+
+
+package ElbarotsXS;
+
+use base 'XML::Simple';
+
+sub storable_filename {
+ my($self, $path) = @_;
+
+ my($vol, $dir, $file) = File::Spec->splitpath( $path );
+ $file =~ s{\.xml$}{};
+
+ return File::Spec->catpath($vol, $dir, reverse($file) . '.stor');
+}
+
+sub cache_read_floogle {
+ return { data => 'floogle' };
+}