source: trunk/src/sed/testsuite/debug.pl@ 3613

Last change on this file since 3613 was 3613, checked in by bird, 10 months ago

src/sed: Merged in changes between 4.1.5 and 4.9 from the vendor branch. (svn merge /vendor/sed/4.1.5 /vendor/sed/current .)

File size: 5.5 KB
Line 
1#!/usr/bin/perl
2# Test the --debug feature
3
4# Copyright (C) 2018-2022 Free Software Foundation, Inc.
5
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation, either version 3 of the License, or
9# (at your option) any later version.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
15
16# You should have received a copy of the GNU General Public License
17# along with this program. If not, see <https://www.gnu.org/licenses/>.
18
19use strict;
20use File::stat;
21
22(my $program_name = $0) =~ s|.*/||;
23
24# Turn off localization of executable's output.
25@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
26
27my $prog = 'sed';
28
29print "PATH = $ENV{PATH}\n";
30
31=pod
32This list contains a template for the tests.
33Two 'foreach' loops below add the '{IN/OUT}' hash entries
34of typical coreutils tests, adds single-quotes around the sed program,
35and adds the --debug command line option.
36
37NOTE: test names with "_" character will be checked with NULL input,
38but not with non-empty input (eg. to avoid executing external programs).
39=cut
40my @Tests =
41 (
42 ## Test parsing of SED commands, without any execution
43 ['c0', '=' ],
44 ['c1', ':FOO' ],
45 ['c2', '{=}' ],
46 ['c3', '#FOO' ],
47 ['c4', 'aFOO' ],
48 ['c5', 'b' ],
49 ['c6', 'bx;:x' ],
50 ['c7', 'cFOO' ],
51 ['c8', 'D' ],
52 ['c9', 'd' ],
53 ['c10_', 'e' ],
54 ['c11_', 'ew' ],
55 ['c12', 'F' ],
56 ['c13', 'G' ],
57 ['c14', 'g' ],
58 ['c15', 'H' ],
59 ['c16', 'h' ],
60 ['c17', 'iFOO' ],
61 ['c18', 'l' ],
62 ['c19', 'l3' ],
63 ['c20', 'N' ],
64 ['c21', 'n' ],
65 ['c22', 'P' ],
66 ['c23', 'p' ],
67 ['c24', 'Q' ],
68 ['c25_', 'Q3' ],
69 ['c26', 'q' ],
70 ['c27_', 'q3' ],
71 ['c28', 'Rx' ],
72 ['c29', 'rx' ],
73 ['c30', 's/x//' ],
74 ['c31', 'T' ],
75 ['c32', 'Tx;:x' ],
76 ['c33', 't' ],
77 ['c34', 'tx;:x' ],
78 ['c35', 'v' ],
79 ['c36', 'Wx' ],
80 ['c37', 'wx' ],
81 ['c38', 'x' ],
82 ['c39', 'y/x/y/' ],
83 ['c40', 'z' ],
84 ['c41', '' ],
85
86 ## Test parsing of SED addresses, without any execution
87 ['a0', '1=' ],
88 ['a1', '1!=' ],
89 ['a2', '1,2=' ],
90 ['a3', '1,2!=' ],
91 ['a4', '$=' ],
92 ['a5', '$!=' ],
93 ['a6', '1~3=' ],
94 ['a7', '1~3=' ],
95 ['a8', '50~0=' ],
96 ['a9', '/foo/=' ],
97 ['a10', '/foo/!=' ],
98 ['a11', '\@foo@=' ],
99 ['a12', '0,/foo/=' ],
100 ['a13', '1,/foo/=' ],
101 ['a14', '/foo/,1=' ],
102 ['a15', '1,+10=' ],
103 ['a16', '1,~10=' ],
104 ['a17', '/foo/,+10='],
105 ['a18', '/foo/,~10='],
106
107 ## Test strings with special characters
108 ['s1', '/\\a/=' ],
109 ['s2', '/\\b/=' ],
110 ['s3', '/\\f/=' ],
111 ['s4', '/\\r/=' ],
112 ['s5', '/\\t/=' ],
113 ['s6', '/\\v/=' ],
114 ['s7', '/\\n/=' ],
115 ['s8', '/\\\\/=' ],
116 ['s9', '/\x01/=' ],
117 ['s10','/\//=' ],
118
119 ## Address Regex variations
120 ['r0', '/a/= ; //=' ],
121 ['r1', '/a/I=' ],
122 ['r2', '/a/M=' ],
123 ['r3', '/a/IM=' ],
124
125 ## substitute variations
126 ['t0', 's/a/b/' ],
127 ['t1', 's/a/b/g' ],
128 ['t2', 's/a/b/i' ],
129 ['t3', 's/a/b/I' ],
130 ['t4', 's/a/b/m' ],
131 ['t5', 's/a/b/M' ],
132 ['t6', 's/a/b/wX' ],
133 ['t7', 's/a/b/p' ],
134 ['t8', 's/a/b/e' ],
135 ['t9', 's/a/b/3' ],
136 ['t10','s/a/b/iMg5p'],
137
138 ['t20','s/\\(a\\)/\\1/' ],
139 ['t21','s/a/\\Ua/' ],
140 ['t22','s/a/\\ua/' ],
141 ['t23','s/a/\\La/' ],
142 ['t24','s/a/\\la/' ],
143 ['t25','s/a/\\U\\Ea/' ],
144 ['t26','s/a/&/' ],
145
146 ## Some special cases
147 ['l1', 'a\\' ],
148 ['l2', 'c\\' ],
149 ['l3', 'i\\' ],
150 ['l4', 's/[0-9]/&/' ], # report matched regex register
151 ['l5', 'n;N;D' ], # n/N/D with patterns containing \n.
152 ['l6', 'n;n;n;n;n' ], # n causing end-of-cycle
153 ['l7', 's/^/a/' ], # zero-length regex match
154 ['l8', 's/\\($\\)/a/' ], # zero-length regex match
155 );
156
157
158foreach my $t (@Tests)
159{
160 my $name = shift @$t;
161 my $cmd = shift @$t;
162
163 # Add "--debug" and single-quotes around the sed program.
164 $cmd = "--debug '" . $cmd . "'";
165 unshift @$t, $cmd;
166 unshift @$t, $name;
167
168 # Add the typical coreutils hash entries.
169 # With empty input, the sed program will be printed (due to --debug),
170 # but not executed.
171 push @$t, {IN=>''};
172 push @$t, {OUT=>''};
173 push @$t, {OUT_SUBST=>'s/.*//s'};
174}
175
176# Repeat the tests with some input, to test --debug during execution.
177# Discard the output, the exact debug output is not set in stone.
178my @xtests;
179Test:
180foreach my $t (@Tests)
181{
182 # Remove the '{IN}' hash
183 my @newt = grep { ! ( ref $_ eq 'HASH' && exists $_->{IN} ) } @$t;
184 next if $newt[0] =~ /_/;
185
186 # Rename the test (add "x_" prefix, for execution)
187 $newt[0] = 'x_' . $newt[0];
188
189 # Add non-empty input.
190 push @newt, {IN=>"1\n2\n3\n4\n"};
191 push @xtests, \@newt;
192}
193
194push @Tests, @xtests;
195
196my $save_temps = $ENV{SAVE_TEMPS};
197my $verbose = $ENV{VERBOSE};
198
199my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
200exit $fail;
Note: See TracBrowser for help on using the repository browser.