|
1 | 1 | #!/usr/bin/env perl
|
2 | 2 | # Tests of perlpp command-line options
|
3 |
| -use constant CMD => ($ENV{PERLPP_CMD} || 'perl -Iblib/lib blib/script/perlpp'); |
4 | 3 | use rlib './lib';
|
5 | 4 | use PerlPPTest;
|
| 5 | +use TestcaseList; |
6 | 6 |
|
7 |
| -# Note: for all the L() calls, without a do{} around them, the line number |
8 |
| -# from caller() is the line number where `my @testcases` occurs. |
9 |
| -# TODO find out if there's a better way than do{L()}. Maybe an L that |
10 |
| -# takes a block that returns a list? That might or might not work --- |
11 |
| -# syntactically, |
12 |
| -# perl -MData::Dumper -E 'sub L :prototype(&) { my $func=shift; my @x = &$func(); say Dumper(\@x); }; L{1,2}' |
13 |
| -# does work, but I don't know if it would have the right caller. |
| 7 | +# Testcase format: |
| 8 | +# [scalar filename/lineno (added by the TestcaseList code), |
| 9 | +# $cmdline_options, $in (the script), $out_re (expected output), |
| 10 | +# $err_re (stderr output, if any)] |
14 | 11 |
|
15 |
| -my @testcases=( |
16 |
| - # [scalar filename/lineno (added by L()), |
17 |
| - # $cmdline_options, $in (the script), $out_re (expected output), |
18 |
| - # $err_re (stderr output, if any)] |
| 12 | +# TODO add skip() to TestcaseList loader --- otherwise the line numbers |
| 13 | +# will be off here. |
19 | 14 |
|
| 15 | +my $testcases = TestcaseList->new(__LINE__); |
20 | 16 | # version
|
21 |
| - do{L('-v','',qr/\bversion\b/) }, |
22 |
| - do{L('--version','',qr/\bversion\b/)}, |
| 17 | +$testcases->load('-v','',qr/\bversion\b/)-> |
| 18 | + ('--version','',qr/\bversion\b/) |
23 | 19 |
|
24 | 20 | # Debug output
|
25 |
| - L('-d','',qr/^package PPP_[0-9]*;/m), |
26 |
| - L('-d', '<?= 2+2 ?>', qr{print\s+2\+2\s*;}), |
27 |
| - L('--debug', '<?= 2+2 ?>', qr{print\s+2\+2\s*;}), |
28 |
| - L('-E', '<?= 2+2 ?>', qr{print\s+2\+2\s*;}), |
| 21 | + ('-d','',qr/^package PPP_[0-9]*;/m) |
| 22 | + ('-d', '<?= 2+2 ?>', qr{print\s+2\+2\s*;}) |
| 23 | + ('--debug', '<?= 2+2 ?>', qr{print\s+2\+2\s*;}) |
| 24 | + ('-E', '<?= 2+2 ?>', qr{print\s+2\+2\s*;}) |
29 | 25 |
|
30 | 26 | # Usage
|
31 |
| - L('-h --z_noexit_on_help', '', qr/^Usage/), |
32 |
| - L('--help --z_noexit_on_help', '', qr/^Usage/), |
| 27 | + ('-h --z_noexit_on_help', '', qr/^Usage/) |
| 28 | + ('--help --z_noexit_on_help', '', qr/^Usage/) |
33 | 29 |
|
34 | 30 | # Eval at start of file
|
35 |
| - L('-e \'my $foo=42;\'', '<?= $foo ?>', qr/^42$/), |
36 |
| - L('--eval \'my $foo=42;\'','<?= $foo ?>', qr/^42$/), |
37 |
| - L('-d -e \'my $foo=42;\'','<?= $foo ?>', qr/^my \$foo=42;/m), |
38 |
| - L('--debug --eval \'my $foo=42;\'','<?= $foo ?>', qr/^print\s+\$foo\s*;/m), |
| 31 | + (['-e', q(my $foo=42;)], '<?= $foo ?>', qr/^42$/) |
| 32 | + (['--eval', q(my $foo=42;)],'<?= $foo ?>', qr/^42$/) |
| 33 | + (['-d','-e', q(my $foo=42;)],'<?= $foo ?>', qr/^my \$foo=42;/m) |
| 34 | + (['--debug','--eval', q(my $foo=42;)],'<?= $foo ?>', qr/^print\s+\$foo\s*;/m) |
39 | 35 |
|
40 | 36 | # Definitions: name formats
|
41 |
| - L('-Dfoo', '<? print "yes" if $D{foo}; ?>',qr/^yes$/), |
42 |
| - L('-Dfoo42', '<? print "yes" if $D{foo42}; ?>',qr/^yes$/), |
43 |
| - L('-Dfoo_42', '<? print "yes" if $D{foo_42}; ?>',qr/^yes$/), |
44 |
| - L('-D_x', '<? print "yes" if $D{_x}; ?>',qr/^yes$/), |
45 |
| - L('-D_1', '<? print "yes" if $D{_1}; ?>',qr/^yes$/), |
| 37 | + ('-Dfoo', '<? print "yes" if $D{foo}; ?>',qr/^yes$/) |
| 38 | + ('-Dfoo42', '<? print "yes" if $D{foo42}; ?>',qr/^yes$/) |
| 39 | + ('-Dfoo_42', '<? print "yes" if $D{foo_42}; ?>',qr/^yes$/) |
| 40 | + ('-D_x', '<? print "yes" if $D{_x}; ?>',qr/^yes$/) |
| 41 | + ('-D_1', '<? print "yes" if $D{_1}; ?>',qr/^yes$/) |
46 | 42 |
|
47 | 43 | # Definitions with --define
|
48 |
| - L('--define foo', '<? print "yes" if $D{foo}; ?>',qr/^yes$/), |
49 |
| - L('--define foo=42 --define bar=127', '<?= $D{foo} * $D{bar} ?>',qr/^5334$/), |
| 44 | + ('--define foo', '<? print "yes" if $D{foo}; ?>',qr/^yes$/) |
| 45 | + ('--define foo=42 --define bar=127', '<?= $D{foo} * $D{bar} ?>',qr/^5334$/) |
50 | 46 |
|
51 | 47 | # Definitions: :define/:undef
|
52 |
| - L('','<?:define foo?><?:ifdef foo?>yes<?:else?>no<?:endif?>',qr/^yes$/), |
53 |
| - L('','<?:define foo 42?><?:ifdef foo?>yes<?:else?>no<?:endif?>',qr/^yes$/), |
54 |
| - L('','<?:define foo 42?><?= $D{foo} ?>',qr/^42$/), |
55 |
| - L('','<?:define foo "a" . "b" ?><?= $D{foo} ?>',qr/^ab$/), |
56 |
| - L('-Dfoo','<?:undef foo?><?:ifdef foo?>yes<?:else?>no<?:endif?>',qr/^no$/), |
| 48 | + ('','<?:define foo?><?:ifdef foo?>yes<?:else?>no<?:endif?>',qr/^yes$/) |
| 49 | + ('','<?:define foo 42?><?:ifdef foo?>yes<?:else?>no<?:endif?>',qr/^yes$/) |
| 50 | + ('','<?:define foo 42?><?= $D{foo} ?>',qr/^42$/) |
| 51 | + ('','<?:define foo "a" . "b" ?><?= $D{foo} ?>',qr/^ab$/) |
| 52 | + ('-Dfoo','<?:undef foo?><?:ifdef foo?>yes<?:else?>no<?:endif?>',qr/^no$/) |
57 | 53 |
|
58 | 54 | # Definitions: values
|
59 |
| - L('-Dfoo=41025.5', '<?= $D{foo} ?>',qr/^41025.5$/), |
60 |
| - L('-D foo=2017', '<?= $D{foo} ?>',qr/^2017$/), |
61 |
| - L('-D foo=\"blah\"', '<?= $D{foo} ?>',qr/^blah$/), |
| 55 | + ('-Dfoo=41025.5', '<?= $D{foo} ?>',qr/^41025.5$/) |
| 56 | + ('-D foo=2017', '<?= $D{foo} ?>',qr/^2017$/) |
| 57 | + ([qw(-D foo="blah")], '<?= $D{foo} ?>',qr/^blah$/) |
62 | 58 | # Have to escape the double-quotes so perl sees it as a string
|
63 | 59 | # literal instead of a bareword.
|
64 |
| - L('-D foo=42 -D bar=127', '<?= $D{foo} * $D{bar} ?>',qr/^5334$/), |
65 |
| - L('', '<? $D{x}="%D always exists even if empty"; ?><?= $D{x} ?>', |
66 |
| - qr/^%D always exists even if empty$/), |
| 60 | + ('-D foo=42 -D bar=127', '<?= $D{foo} * $D{bar} ?>',qr/^5334$/) |
| 61 | + ('', '<? $D{x}="%D always exists even if empty"; ?><?= $D{x} ?>', qr/^%D always exists even if empty$/) |
67 | 62 |
|
68 | 63 | # Textual substitution
|
69 |
| - L('-Dfoo=42','<? my $foo; ?>foo',qr/^42$/ ), |
70 |
| - L('-Dfoo=\'"a phrase"\'','<? my $foo; ?>foo',qr/^a phrase$/ ), |
71 |
| - L('-Dfoo=\"bar\"','_foo foo foobar barfoo',qr/^_foo bar foobar barfoo$/ ), |
72 |
| - L('-Dfoo=\"bar\" --define barfoo','_foo foo foobar barfoo', |
73 |
| - qr/^_foo bar foobar barfoo$/ ), |
| 64 | + ('-Dfoo=42','<? my $foo; ?>foo',qr/^42$/ ) |
| 65 | + ([q(-Dfoo="a phrase")],'<? my $foo; ?>foo',qr/^a phrase$/ ) |
| 66 | + (['-Dfoo="bar"'], '_foo foo foobar barfoo 1',qr/^_foo bar foobar barfoo 1$/ ) |
| 67 | + (['-Dfoo="bar"', '--define', 'barfoo'], '_foo foo foobar barfoo 2', qr/^_foo bar foobar barfoo 2$/ ) |
74 | 68 |
|
75 | 69 | # Sets, which do not textually substitute
|
76 |
| - do{L('-sfoo=42','<? my $foo; ?>foo',qr/^foo$/ )}, |
77 |
| - do{L('-sfoo=42','<? my $foo; ?><?= $S{foo} ?>',qr/^42$/ )}, |
78 |
| - [__LINE__, '--set foo=42','<? my $foo; ?>foo',qr/^foo$/ ], |
79 |
| - do{L('--set foo=42','<? my $foo; ?><?= $S{foo} ?>',qr/^42$/ )}, |
| 70 | + ('-sfoo=42','<? my $foo; ?>foo',qr/^foo$/ ) |
| 71 | + ('-sfoo=42','<? my $foo; ?><?= $S{foo} ?>',qr/^42$/ ) |
| 72 | + ('--set foo=42','<? my $foo; ?>foo',qr/^foo$/ ) |
| 73 | + ('--set foo=42','<? my $foo; ?><?= $S{foo} ?>',qr/^42$/ ) |
80 | 74 |
|
81 | 75 | # Conditionals
|
82 |
| - L('-Dfoo=42','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^no$/ ), |
83 |
| - L('-Dfoo=2','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^yes$/ ), |
84 |
| - L('-Dfoo','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^no$/ ), |
85 |
| - L('-Dfoo','<?:if foo==1?>yes<?:else?>no<?:endif?>',qr/^yes$/ ), |
| 76 | + ('-Dfoo=42','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^no$/ ) |
| 77 | + ('-Dfoo=2','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^yes$/ ) |
| 78 | + ('-Dfoo','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^no$/ ) |
| 79 | + ('-Dfoo','<?:if foo==1?>yes<?:else?>no<?:endif?>',qr/^yes$/ ) |
86 | 80 | # The default value is true, which compares equal to 1.
|
87 |
| - L('-Dfoo','<?:if foo?>yes<?:else?>no<?:endif?>',qr/^yes$/ ), |
88 |
| - L('','<?:if foo?>yes<?:else?>no<?:endif?>',qr/^no$/ ), |
89 |
| - L('','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^no$/ ), |
| 81 | + ('-Dfoo','<?:if foo?>yes<?:else?>no<?:endif?>',qr/^yes$/ ) |
| 82 | + ('','<?:if foo?>yes<?:else?>no<?:endif?>',qr/^no$/ ) |
| 83 | + ('','<?:if foo==2?>yes<?:else?>no<?:endif?>',qr/^no$/ ) |
90 | 84 | # For consistency, all :if tests evaluate to false if the
|
91 | 85 | # named variable is not defined.
|
92 | 86 |
|
93 | 87 | # Undefining
|
94 |
| - L('-Dfoo','<?:undef foo?><?:if foo?>yes<?:else?>no<?:endif?>',qr/^no$/ ), |
| 88 | + ('-Dfoo','<?:undef foo?><?:if foo?>yes<?:else?>no<?:endif?>',qr/^no$/ ) |
95 | 89 | #
|
96 | 90 | # Three forms of elsif
|
97 |
| - L('', '<?:if foo eq "1" ?>yes<?:elif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/), |
98 |
| - L('', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/), |
99 |
| - L('', '<?:if foo eq "1" ?>yes<?:elseif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/), |
| 91 | + ('', '<?:if foo eq "1" ?>yes<?:elif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/) |
| 92 | + ('', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/) |
| 93 | + ('', '<?:if foo eq "1" ?>yes<?:elseif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/) |
100 | 94 |
|
101 | 95 | # elsif with definitions
|
102 |
| - L('-Dfoo', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^yes$/), |
103 |
| - L('-Dfoo=1', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^yes$/), |
| 96 | + ('-Dfoo', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^yes$/) |
| 97 | + ('-Dfoo=1', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^yes$/) |
104 | 98 | # Automatic conversion of numeric 1 to string in "eq" context
|
105 |
| - L('-Dfoo=\\"x\\"', '<?= $D{foo} . "\n" ?><?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^x\nmaybe$/), |
106 |
| - L('-Dfoo=\\"y\\"', '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/), |
| 99 | + (['-Dfoo="x"'], '<?= $D{foo} . "\n" ?><?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^x\nmaybe$/) |
| 100 | + (['-Dfoo="y"'], '<?:if foo eq "1" ?>yes<?:elsif foo eq "x" ?>maybe<?:else?>no<?:endif?>', qr/^no$/) |
107 | 101 |
|
108 |
| -); #@testcases |
| 102 | +; #$testcases |
109 | 103 |
|
110 |
| -plan tests => count_tests(\@testcases, 3, 4); |
| 104 | +plan tests => count_tests($testcases->arr, 3, 4); |
111 | 105 |
|
112 |
| -for my $lrTest (@testcases) { |
| 106 | +for my $lrTest (@{$testcases->arr}) { |
113 | 107 | my ($where, $opts, $testin, $out_re, $err_re) = @$lrTest;
|
114 | 108 |
|
115 | 109 | my ($out, $err);
|
|
0 commit comments