use Test::More;
use Data::Dumper;
-plan tests => 7;
+plan tests => 11;
use_ok('Parse::Binary::Nested');
'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'
+);
+