Parse::Binary::Nested: simple non-OO unpackf
[wormy.git] / t / parser.t
index 5e53315d69f7fa99977e4a5f59c42df051a2ef61..faa229ce760b1e70cf3bfac574c58f2ed529e6e6 100644 (file)
@@ -6,35 +6,53 @@ use warnings;
 use Test::More;
 use Data::Dumper;
 
 use Test::More;
 use Data::Dumper;
 
-plan tests => 6;
+plan tests => 7;
 
 use_ok('Parse::Binary::Nested');
 
 
 use_ok('Parse::Binary::Nested');
 
-my $example = Parse::Binary::Nested->new([
+my @example = (
        foos => [
                'C',
                message => 'Z*',
        foos => [
                'C',
                message => 'Z*',
-               period  => 'C',
+               period  => 'a',
        ],
        trail => 'a*',
        ],
        trail => 'a*',
-]);
-ok($example, 'example parser');
-my $data = $example->unpackf("\2foo\0!\0.rest");
-is(ref $data, 'HASH', 'output structure');
-is($data->{foos}->[1]->{period}, ord '.', 'sample element');
+);
+my $testdata = "\2foo\0!\0.rest";
+my $testresult = {
+       foos => [
+               {message => 'foo', period => '!'},
+               {message => '',    period => '.'},
+       ],
+       trail => 'rest',
+};
+
+my $parser = Parse::Binary::Nested->new(\@example);
+ok($parser, 'new object');
+is_deeply($parser->unpackf($testdata), $testresult, 'object unpackf');
+
+Parse::Binary::Nested->import('unpackf');
+is_deeply(
+       unpackf(\@example, $testdata),
+       $testresult,
+       'unprepared unpackf'
+);
+
+my @commonargs = ('cxaXv', "\1\2hi\0");
+is_deeply(
+       [ values %{ unpackf(@commonargs) } ],
+       [[ unpack($commonargs[0], $commonargs[1]) ]],
+       'unpack compatibility'
+);
 
 is_deeply(
 
 is_deeply(
-       Parse::Binary::Nested->new(
-               [ lstr => 'Ca3', rest => 'a*' ]
-       )->unpackf("\2quux"),
+       unpackf([ lstr => 'C/a3', rest => 'a*' ], "\2quux"),
        { lstr => 'qu', rest => 'x' },
        'length string'
 );
 
 is_deeply(
        { lstr => 'qu', rest => 'x' },
        'length string'
 );
 
 is_deeply(
-       Parse::Binary::Nested->new(
-               [ ignoreme => 'x2X', value => 'xC' ]
-       )->unpackf("\0\1\2"),
+       unpackf([ ignoreme => 'x2X', value => 'xC' ], "\0\1\2"),
        { value => 2 },
        'empty values'
 );
        { value => 2 },
        'empty values'
 );