91 lines
2.4 KiB
Perl
91 lines
2.4 KiB
Perl
use v5.32;
|
|
|
|
use Test::More;
|
|
use Test::Exception;
|
|
use Test::Warnings ":all";
|
|
|
|
use experimental 'signatures';
|
|
|
|
BEGIN { use_ok('RevBank::Prompt'); }
|
|
|
|
sub are($input, $expected) {
|
|
if (ref($expected) eq 'ARRAY') {
|
|
my @got = RevBank::Prompt::split_input($input);
|
|
is_deeply(\@got, $expected, ">$input<");
|
|
|
|
my $reconstructed = join " ", map RevBank::Prompt::reconstruct($_), @got;
|
|
my @got2 = RevBank::Prompt::split_input($reconstructed);
|
|
is_deeply(\@got, \@got2, ">$input< round-trips once");
|
|
|
|
my $reconstructed2 = join " ", map RevBank::Prompt::reconstruct($_), @got2;
|
|
my @got3 = RevBank::Prompt::split_input($reconstructed2);
|
|
is_deeply(\@got, \@got3, ">$input< round-trips twice");
|
|
} else {
|
|
my @got = RevBank::Prompt::split_input($input);
|
|
is(scalar @got, 1, "Invalid input >$input< returns 1 element");
|
|
is(${ $got[0] }, $expected, "Invalid input >$input< fails at $expected");
|
|
}
|
|
}
|
|
|
|
are "foo", [qw/foo/];
|
|
are " foo ", [qw/foo/];
|
|
are "'foo'", [qw/foo/];
|
|
are '"foo"', [qw/foo/];
|
|
|
|
are "foo bar", [qw/foo bar/];
|
|
are "foo bar baz", [qw/foo bar baz/];
|
|
are "'foo' 'bar' \"baz\"", [qw/foo bar baz/];
|
|
|
|
are "foo;bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "foo ;bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "foo; bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "foo ; bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
|
|
are "'foo';bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "'foo' ;bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "'foo'; bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "'foo' ; bar", ['foo', "\0SEPARATOR", 'bar'];
|
|
|
|
are "foo;'bar'", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "foo ;'bar'", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "foo; 'bar'", ['foo', "\0SEPARATOR", 'bar'];
|
|
are "foo ; 'bar'", ['foo', "\0SEPARATOR", 'bar'];
|
|
|
|
are "foo\\;bar", [qw/foo;bar/];
|
|
are "foo \\;bar", [qw/foo ;bar/];
|
|
are "foo\\; bar", [qw/foo; bar/];
|
|
are "foo \\; bar", [qw/foo ; bar/];
|
|
|
|
are "foo\\0bar", ["foo\0bar"];
|
|
are "foo\\abar", ["foo\abar"];
|
|
are "foo\\rbar", ["foo\rbar"];
|
|
are "foo\\nbar", ["foo\nbar"];
|
|
are "foo\\tbar", ["foo\tbar"];
|
|
are "foo\\'bar", ["foo'bar"];
|
|
are 'foo\\"bar', ["foo\"bar"];
|
|
are 'foo\\\\bar', ["foo\\bar"];
|
|
are 'foo\\\\\\\\bar', ["foo\\\\bar"];
|
|
|
|
are "abort", ["\0ABORT"];
|
|
are "'abort'", [qw/abort/];
|
|
are '"abort"', [qw/abort/];
|
|
|
|
are "\\", 0;
|
|
are "'foo", 0;
|
|
|
|
# 0123
|
|
are "foo'", 3;
|
|
# 0123
|
|
are "foo'bar", 3;
|
|
|
|
# 01234
|
|
are "bar 'foo", 4;
|
|
# 01234567
|
|
are "bar foo'", 7;
|
|
# 01234567
|
|
are "bar foo'bar", 7;
|
|
|
|
# 0123456789
|
|
are "foo 'bar'\"baz\"", 9;
|
|
|
|
done_testing;
|