1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
#!/usr/bin/perl -w
use strict;
use lib $ENV{PERL_CORE} ? '../lib/Module/Build/t/lib' : 't/lib';
use MBTest;
my @unix_splits =
(
{ q{one t'wo th'ree f"o\"ur " "five" } => [ 'one', 'two three', 'fo"ur ', 'five' ] },
{ q{ foo bar } => [ 'foo', 'bar' ] },
);
my @win_splits =
(
{ 'a" "b\\c" "d' => [ 'a b\c d' ] },
{ '"a b\\c d"' => [ 'a b\c d' ] },
{ '"a b"\\"c d"' => [ 'a b"c', 'd' ] },
{ '"a b"\\\\"c d"' => [ 'a b\c d' ] },
{ '"a"\\"b" "a\\"b"' => [ 'a"b a"b' ] },
{ '"a"\\\\"b" "a\\\\"b"' => [ 'a\b', 'a\b' ] },
{ '"a"\\"b a\\"b"' => [ 'a"b', 'a"b' ] },
{ 'a"\\"b" "a\\"b' => [ 'a"b', 'a"b' ] },
{ 'a"\\"b" "a\\"b' => [ 'a"b', 'a"b' ] },
{ 'a b' => [ 'a', 'b' ] },
{ 'a"\\"b a\\"b' => [ 'a"b a"b' ] },
{ '"a""b" "a"b"' => [ 'a"b ab' ] },
{ '\\"a\\"' => [ '"a"' ] },
{ '"a"" "b"' => [ 'a"', 'b' ] },
{ 'a"b' => [ 'ab' ] },
{ 'a""b' => [ 'ab' ] },
{ 'a"""b' => [ 'a"b' ] },
{ 'a""""b' => [ 'a"b' ] },
{ 'a"""""b' => [ 'a"b' ] },
{ 'a""""""b' => [ 'a""b' ] },
{ '"a"b"' => [ 'ab' ] },
{ '"a""b"' => [ 'a"b' ] },
{ '"a"""b"' => [ 'a"b' ] },
{ '"a""""b"' => [ 'a"b' ] },
{ '"a"""""b"' => [ 'a""b' ] },
{ '"a""""""b"' => [ 'a""b' ] },
{ '' => [ ] },
{ ' ' => [ ] },
{ '""' => [ '' ] },
{ '" "' => [ ' ' ] },
{ '""a' => [ 'a' ] },
{ '""a b' => [ 'a', 'b' ] },
{ 'a""' => [ 'a' ] },
{ 'a"" b' => [ 'a', 'b' ] },
{ '"" a' => [ '', 'a' ] },
{ 'a ""' => [ 'a', '' ] },
{ 'a "" b' => [ 'a', '', 'b' ] },
{ 'a " " b' => [ 'a', ' ', 'b' ] },
{ 'a " b " c' => [ 'a', ' b ', 'c' ] },
);
plan tests => 10 + 2*@unix_splits + 2*@win_splits;
#########################
use Module::Build;
ok(1);
# Should always return an array unscathed
foreach my $platform ('', '::Platform::Unix', '::Platform::Windows') {
my $pkg = "Module::Build$platform";
my @result = $pkg->split_like_shell(['foo', 'bar', 'baz']);
is @result, 3, "Split using $pkg";
is "@result", "foo bar baz", "Split using $pkg";
}
use Module::Build::Platform::Unix;
foreach my $test (@unix_splits) {
do_split_tests('Module::Build::Platform::Unix', $test);
}
use Module::Build::Platform::Windows;
foreach my $test (@win_splits) {
do_split_tests('Module::Build::Platform::Windows', $test);
}
{
# Make sure read_args() functions properly as a class method
my @args = qw(foo=bar --food bard --foods=bards);
my ($args) = Module::Build->read_args(@args);
is_deeply($args, {foo => 'bar', food => 'bard', foods => 'bards', ARGV => []});
}
{
# Make sure data can make a round-trip through unparse_args() and read_args()
my %args = (foo => 'bar', food => 'bard', config => {a => 1, b => 2}, ARGV => []);
my ($args) = Module::Build->read_args( Module::Build->unparse_args(\%args) );
is_deeply($args, \%args);
}
{
# Make sure run_perl_script() propagates @INC
local @INC = ('whosiewhatzit', @INC);
my $output = stdout_of( sub { Module::Build->run_perl_script('', ['-le', 'print for @INC']) } );
like $output, qr{^whosiewhatzit}m;
}
##################################################################
sub do_split_tests {
my ($package, $test) = @_;
my ($string, $expected) = %$test;
my @result = $package->split_like_shell($string);
is( 0 + grep( !defined(), @result ), # all defined
0,
"'$string' result all defined" );
is_deeply(\@result, $expected);
}
|