X-Git-Url: http://git.shiar.nl/wormy.git/blobdiff_plain/f4886cc6c2159afd00025585fcc6ea7aac820391..f0508cdbda46583a7485903d195a3e19c60d0196:/t/parser.t diff --git a/t/parser.t b/t/parser.t index faa229c..8e38663 100644 --- a/t/parser.t +++ b/t/parser.t @@ -6,7 +6,7 @@ use warnings; use Test::More; use Data::Dumper; -plan tests => 7; +plan tests => 11; use_ok('Parse::Binary::Nested'); @@ -57,3 +57,56 @@ is_deeply( 'empty values' ); +is_deeply( + unpackf([ + begin => 'c', + asciiz => ['?0', lead => 'v', string => 'Z*'], + end => 'c', + ], "\377\1\0Hi\0\2\0zer0\0\0\376"), + { + begin => -1, + asciiz => [ + { lead => 1, string => 'Hi' }, + { lead => 2, string => 'zer0' }, + ], + end => -2, + }, + 'zero-terminated group' +); + +my $looptest = Parse::Binary::Nested->new([ + begin => 'xc', + loop => ['?1', lead => 'c', string => 'Z*'], + end => '=.', +]); +is_deeply( + $looptest->unpackf("\0\1\0Hello\0\377bye"), + { + begin => 1, + loop => [ + { lead => 0, string => 'Hello' }, + { lead => -1, string => 'bye' }, + ], + end => 15, + }, + 'unterminated group' +); +is_deeply( + $looptest->unpackf("\0\1\1trailing"), + { + begin => 1, + end => 3, + }, + 'preterminated group' +); + +is_deeply( + unpackf([ + loop => ['?0', byte => 'C'], + ], "\1\2\3"), + { + loop => [map { {byte => $_} } 1..3], + }, + 'last byte in unterminated loop' +); +