xref: /minix3/usr.bin/sed/TEST/sed.test (revision 84d9c625bfea59e274550651111ae9edfdc40fbd)
1f789fee2SBen Gras#!/bin/sh -
2*84d9c625SLionel Sambuc#	$NetBSD: sed.test,v 1.5 2011/11/12 03:15:05 christos Exp $
3f789fee2SBen Gras#
4f789fee2SBen Gras# Copyright (c) 1992 Diomidis Spinellis.
5f789fee2SBen Gras# Copyright (c) 1992, 1993
6f789fee2SBen Gras#	The Regents of the University of California.  All rights reserved.
7f789fee2SBen Gras#
8f789fee2SBen Gras# Redistribution and use in source and binary forms, with or without
9f789fee2SBen Gras# modification, are permitted provided that the following conditions
10f789fee2SBen Gras# are met:
11f789fee2SBen Gras# 1. Redistributions of source code must retain the above copyright
12f789fee2SBen Gras#    notice, this list of conditions and the following disclaimer.
13f789fee2SBen Gras# 2. Redistributions in binary form must reproduce the above copyright
14f789fee2SBen Gras#    notice, this list of conditions and the following disclaimer in the
15f789fee2SBen Gras#    documentation and/or other materials provided with the distribution.
16f789fee2SBen Gras# 3. All advertising materials mentioning features or use of this software
17f789fee2SBen Gras#    must display the following acknowledgement:
18f789fee2SBen Gras#	This product includes software developed by the University of
19f789fee2SBen Gras#	California, Berkeley and its contributors.
20f789fee2SBen Gras# 4. Neither the name of the University nor the names of its contributors
21f789fee2SBen Gras#    may be used to endorse or promote products derived from this software
22f789fee2SBen Gras#    without specific prior written permission.
23f789fee2SBen Gras#
24f789fee2SBen Gras# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25f789fee2SBen Gras# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26f789fee2SBen Gras# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27f789fee2SBen Gras# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28f789fee2SBen Gras# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29f789fee2SBen Gras# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30f789fee2SBen Gras# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31f789fee2SBen Gras# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32f789fee2SBen Gras# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33f789fee2SBen Gras# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34f789fee2SBen Gras# SUCH DAMAGE.
35f789fee2SBen Gras#
36f789fee2SBen Gras#	from: @(#)sed.test	8.1 (Berkeley) 6/6/93
37*84d9c625SLionel Sambuc#	$NetBSD: sed.test,v 1.5 2011/11/12 03:15:05 christos Exp $
38f789fee2SBen Gras#
39f789fee2SBen Gras
40f789fee2SBen Gras# sed Regression Tests
41f789fee2SBen Gras#
42f789fee2SBen Gras# The following files are created:
43f789fee2SBen Gras# lines[1-4], script1, script2
44f789fee2SBen Gras# Two directories *.out contain the test results
45f789fee2SBen Gras
46f789fee2SBen Grasmain()
47f789fee2SBen Gras{
48*84d9c625SLionel Sambuc	BASE=/usr/bin/sed
49f789fee2SBen Gras	BASELOG=sed.out
50*84d9c625SLionel Sambuc	TEST=$(cd $(dirname $0)/.. && make -V .OBJDIR)/sed
51f789fee2SBen Gras	TESTLOG=nsed.out
52f789fee2SBen Gras	DICT=/usr/share/dict/words
53f789fee2SBen Gras
54f789fee2SBen Gras	test_error | more
55f789fee2SBen Gras
56f789fee2SBen Gras	awk 'END { for (i = 1; i < 15; i++) print "l1_" i}' </dev/null >lines1
57f789fee2SBen Gras	awk 'END { for (i = 1; i < 10; i++) print "l2_" i}' </dev/null >lines2
58f789fee2SBen Gras
59f789fee2SBen Gras	exec 4>&1 5>&2
60f789fee2SBen Gras
61f789fee2SBen Gras	# Set these flags to get messages about known problems
62f789fee2SBen Gras	BSD=1
63f789fee2SBen Gras	GNU=0
64f789fee2SBen Gras	SUN=0
65f789fee2SBen Gras	tests $BASE $BASELOG
66f789fee2SBen Gras
67f789fee2SBen Gras	BSD=0
68f789fee2SBen Gras	GNU=0
69f789fee2SBen Gras	SUN=0
70f789fee2SBen Gras	tests $TEST $TESTLOG
71f789fee2SBen Gras	exec 1>&4 2>&5
72f789fee2SBen Gras	diff -c $BASELOG $TESTLOG | more
73f789fee2SBen Gras}
74f789fee2SBen Gras
75f789fee2SBen Grastests()
76f789fee2SBen Gras{
77f789fee2SBen Gras	SED=$1
78f789fee2SBen Gras	DIR=$2
79f789fee2SBen Gras	rm -rf $DIR
80f789fee2SBen Gras	mkdir $DIR
81f789fee2SBen Gras	MARK=100
82f789fee2SBen Gras
83f789fee2SBen Gras	test_args
84f789fee2SBen Gras	test_addr
85f789fee2SBen Gras	echo Testing commands
86f789fee2SBen Gras	test_group
87f789fee2SBen Gras	test_acid
88f789fee2SBen Gras	test_branch
89f789fee2SBen Gras	test_pattern
90f789fee2SBen Gras	test_print
91f789fee2SBen Gras	test_subst
92f789fee2SBen Gras}
93f789fee2SBen Gras
94f789fee2SBen Grasmark()
95f789fee2SBen Gras{
96*84d9c625SLionel Sambuc	MARK=$(expr $MARK + 1)
97f789fee2SBen Gras	exec 1>&4 2>&5
98f789fee2SBen Gras	exec >"$DIR/${MARK}_$1"
99f789fee2SBen Gras	echo "Test $1:$MARK"
100f789fee2SBen Gras	# Uncomment this line to match tests with sed error messages
101f789fee2SBen Gras	echo "Test $1:$MARK" >&5
102f789fee2SBen Gras}
103f789fee2SBen Gras
104f789fee2SBen Grastest_args()
105f789fee2SBen Gras{
106f789fee2SBen Gras	mark '1.1'
107f789fee2SBen Gras	echo Testing argument parsing
108f789fee2SBen Gras	echo First type
109f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
110f789fee2SBen Gras		echo SunOS sed prints only with -n
111f789fee2SBen Gras	else
112f789fee2SBen Gras		$SED 's/^/e1_/p' lines1
113f789fee2SBen Gras	fi
114f789fee2SBen Gras	mark '1.2' ; $SED -n 's/^/e1_/p' lines1
115f789fee2SBen Gras	mark '1.3'
116f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
117f789fee2SBen Gras		echo SunOS sed prints only with -n
118f789fee2SBen Gras	else
119f789fee2SBen Gras		$SED 's/^/e1_/p' <lines1
120f789fee2SBen Gras	fi
121f789fee2SBen Gras	mark '1.4' ; $SED -n 's/^/e1_/p' <lines1
122f789fee2SBen Gras	echo Second type
123f789fee2SBen Gras	mark '1.4.1'
124f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
125f789fee2SBen Gras		echo SunOS sed fails this
126f789fee2SBen Gras	fi
127f789fee2SBen Gras	$SED -e '' <lines1
128f789fee2SBen Gras	echo 's/^/s1_/p' >script1
129f789fee2SBen Gras	echo 's/^/s2_/p' >script2
130f789fee2SBen Gras	mark '1.5'
131f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
132f789fee2SBen Gras		echo SunOS sed prints only with -n
133f789fee2SBen Gras	else
134f789fee2SBen Gras		$SED -f script1 lines1
135f789fee2SBen Gras	fi
136f789fee2SBen Gras	mark '1.6'
137f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
138f789fee2SBen Gras		echo SunOS sed prints only with -n
139f789fee2SBen Gras	else
140f789fee2SBen Gras		$SED -f script1 <lines1
141f789fee2SBen Gras	fi
142f789fee2SBen Gras	mark '1.7'
143f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
144f789fee2SBen Gras		echo SunOS sed prints only with -n
145f789fee2SBen Gras	else
146f789fee2SBen Gras		$SED -e 's/^/e1_/p' lines1
147f789fee2SBen Gras	fi
148f789fee2SBen Gras	mark '1.8'
149f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
150f789fee2SBen Gras		echo SunOS sed prints only with -n
151f789fee2SBen Gras	else
152f789fee2SBen Gras		$SED -e 's/^/e1_/p' <lines1
153f789fee2SBen Gras	fi
154f789fee2SBen Gras	mark '1.9' ; $SED -n -f script1 lines1
155f789fee2SBen Gras	mark '1.10' ; $SED -n -f script1 <lines1
156f789fee2SBen Gras	mark '1.11' ; $SED -n -e 's/^/e1_/p' lines1
157f789fee2SBen Gras	mark '1.12'
158f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
159f789fee2SBen Gras		echo SunOS sed prints only with -n
160f789fee2SBen Gras	else
161f789fee2SBen Gras		$SED -n -e 's/^/e1_/p' <lines1
162f789fee2SBen Gras	fi
163f789fee2SBen Gras	mark '1.13'
164f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
165f789fee2SBen Gras		echo SunOS sed prints only with -n
166f789fee2SBen Gras	else
167f789fee2SBen Gras		$SED -e 's/^/e1_/p' -e 's/^/e2_/p' lines1
168f789fee2SBen Gras	fi
169f789fee2SBen Gras	mark '1.14'
170f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
171f789fee2SBen Gras		echo SunOS sed prints only with -n
172f789fee2SBen Gras	else
173f789fee2SBen Gras		$SED -f script1 -f script2 lines1
174f789fee2SBen Gras	fi
175f789fee2SBen Gras	mark '1.15'
176f789fee2SBen Gras	if [ $GNU -eq 1 -o $SUN -eq 1 ] ; then
177f789fee2SBen Gras		echo GNU and SunOS sed fail this following older POSIX draft
178f789fee2SBen Gras	else
179f789fee2SBen Gras		$SED -e 's/^/e1_/p' -f script1 lines1
180f789fee2SBen Gras	fi
181f789fee2SBen Gras	mark '1.16'
182f789fee2SBen Gras	if [ $SUN -eq 1 ] ; then
183f789fee2SBen Gras		echo SunOS sed prints only with -n
184f789fee2SBen Gras	else
185f789fee2SBen Gras		$SED -e 's/^/e1_/p' lines1 lines1
186f789fee2SBen Gras	fi
187f789fee2SBen Gras	# POSIX D11.2:11251
188f789fee2SBen Gras	mark '1.17' ; $SED p <lines1 lines1
189f789fee2SBen Grascat >script1 <<EOF
190f789fee2SBen Gras#n
191f789fee2SBen Gras# A comment
192f789fee2SBen Gras
193f789fee2SBen Grasp
194f789fee2SBen GrasEOF
195f789fee2SBen Gras	mark '1.18' ; $SED -f script1 <lines1 lines1
196f789fee2SBen Gras}
197f789fee2SBen Gras
198f789fee2SBen Grastest_addr()
199f789fee2SBen Gras{
200f789fee2SBen Gras	echo Testing address ranges
201f789fee2SBen Gras	mark '2.1' ; $SED -n -e '4p' lines1
202f789fee2SBen Gras	mark '2.2' ; $SED -n -e '20p' lines1 lines2
203f789fee2SBen Gras	mark '2.3' ; $SED -n -e '$p' lines1
204f789fee2SBen Gras	mark '2.4' ; $SED -n -e '$p' lines1 lines2
205f789fee2SBen Gras	mark '2.5' ; $SED -n -e '$a\
206f789fee2SBen Grashello' /dev/null
207f789fee2SBen Gras	mark '2.6' ; $SED -n -e '$p' lines1 /dev/null lines2
208f789fee2SBen Gras	# Should not print anything
209f789fee2SBen Gras	mark '2.7' ; $SED -n -e '20p' lines1
210f789fee2SBen Gras	mark '2.8' ; $SED -n -e '0p' lines1
211f789fee2SBen Gras	mark '2.9' ; $SED -n '/l1_7/p' lines1
212f789fee2SBen Gras	mark '2.10' ; $SED -n ' /l1_7/ p' lines1
213f789fee2SBen Gras	mark '2.11'
214f789fee2SBen Gras	if [ $BSD -eq 1 ] ; then
215f789fee2SBen Gras		echo BSD sed fails this test
216f789fee2SBen Gras	fi
217f789fee2SBen Gras	if [ $GNU -eq 1 ] ; then
218f789fee2SBen Gras		echo GNU sed fails this
219f789fee2SBen Gras	fi
220f789fee2SBen Gras	$SED -n '\_l1\_7_p' lines1
221f789fee2SBen Gras	mark '2.12' ; $SED -n '1,4p' lines1
222f789fee2SBen Gras	mark '2.13' ; $SED -n '1,$p' lines1 lines2
223f789fee2SBen Gras	mark '2.14' ; $SED -n '1,/l2_9/p' lines1 lines2
224f789fee2SBen Gras	mark '2.15' ; $SED -n '/4/,$p' lines1 lines2
225f789fee2SBen Gras	mark '2.16' ; $SED -n '/4/,20p' lines1 lines2
226f789fee2SBen Gras	mark '2.17' ; $SED -n '/4/,/10/p' lines1 lines2
227f789fee2SBen Gras	mark '2.18' ; $SED -n '/l2_3/,/l1_8/p' lines1 lines2
228f789fee2SBen Gras	mark '2.19'
229f789fee2SBen Gras	if [ $GNU -eq 1 ] ; then
230f789fee2SBen Gras		echo GNU sed fails this
231f789fee2SBen Gras	fi
232f789fee2SBen Gras	$SED -n '12,3p' lines1 lines2
233f789fee2SBen Gras	mark '2.20'
234f789fee2SBen Gras	if [ $GNU -eq 1 ] ; then
235f789fee2SBen Gras		echo GNU sed fails this
236f789fee2SBen Gras	fi
237f789fee2SBen Gras	$SED -n '/l1_7/,3p' lines1 lines2
238f789fee2SBen Gras}
239f789fee2SBen Gras
240f789fee2SBen Grastest_group()
241f789fee2SBen Gras{
242f789fee2SBen Gras	echo Brace and other grouping
243f789fee2SBen Gras	mark '3.1' ; $SED -e '
244f789fee2SBen Gras4,12 {
245f789fee2SBen Gras	s/^/^/
246f789fee2SBen Gras	s/$/$/
247f789fee2SBen Gras	s/_/T/
248f789fee2SBen Gras}' lines1
249f789fee2SBen Gras	mark '3.2' ; $SED -e '
250f789fee2SBen Gras4,12 {
251f789fee2SBen Gras	s/^/^/
252f789fee2SBen Gras	/6/,/10/ {
253f789fee2SBen Gras		s/$/$/
254f789fee2SBen Gras		/8/ s/_/T/
255f789fee2SBen Gras	}
256f789fee2SBen Gras}' lines1
257f789fee2SBen Gras	mark '3.3' ; $SED -e '
258f789fee2SBen Gras4,12 !{
259f789fee2SBen Gras	s/^/^/
260f789fee2SBen Gras	/6/,/10/ !{
261f789fee2SBen Gras		s/$/$/
262f789fee2SBen Gras		/8/ !s/_/T/
263f789fee2SBen Gras	}
264f789fee2SBen Gras}' lines1
265f789fee2SBen Gras	mark '3.4' ; $SED -e '4,12!s/^/^/' lines1
266f789fee2SBen Gras}
267f789fee2SBen Gras
268f789fee2SBen Grastest_acid()
269f789fee2SBen Gras{
270f789fee2SBen Gras	echo Testing a c d and i commands
271f789fee2SBen Gras	mark '4.1' ; $SED -n -e '
272f789fee2SBen Grass/^/before_i/p
273f789fee2SBen Gras20i\
274f789fee2SBen Grasinserted
275f789fee2SBen Grass/^/after_i/p
276f789fee2SBen Gras' lines1 lines2
277f789fee2SBen Gras	mark '4.2' ; $SED -n -e '
278f789fee2SBen Gras5,12s/^/5-12/
279f789fee2SBen Grass/^/before_a/p
280f789fee2SBen Gras/5-12/a\
281f789fee2SBen Grasappended
282f789fee2SBen Grass/^/after_a/p
283f789fee2SBen Gras' lines1 lines2
284f789fee2SBen Gras	mark '4.3'
285f789fee2SBen Gras	if [ $GNU -eq 1 ] ; then
286f789fee2SBen Gras		echo GNU sed fails this
287f789fee2SBen Gras	fi
288f789fee2SBen Gras	$SED -n -e '
289f789fee2SBen Grass/^/^/p
290f789fee2SBen Gras/l1_/a\
291f789fee2SBen Grasappended
292f789fee2SBen Gras8,10N
293f789fee2SBen Grass/$/$/p
294f789fee2SBen Gras' lines1 lines2
295f789fee2SBen Gras	mark '4.4' ; $SED -n -e '
296f789fee2SBen Grasc\
297f789fee2SBen Grashello
298f789fee2SBen Gras' lines1
299f789fee2SBen Gras	mark '4.5' ; $SED -n -e '
300f789fee2SBen Gras8c\
301f789fee2SBen Grashello
302f789fee2SBen Gras' lines1
303f789fee2SBen Gras	mark '4.6' ; $SED -n -e '
304f789fee2SBen Gras3,14c\
305f789fee2SBen Grashello
306f789fee2SBen Gras' lines1
307f789fee2SBen Gras# SunOS and GNU sed behave differently.   We follow POSIX
308f789fee2SBen Gras#	mark '4.7' ; $SED -n -e '
309f789fee2SBen Gras#8,3c\
310f789fee2SBen Gras#hello
311f789fee2SBen Gras#' lines1
312f789fee2SBen Gras	mark '4.8' ; $SED d <lines1
313f789fee2SBen Gras}
314f789fee2SBen Gras
315f789fee2SBen Grastest_branch()
316f789fee2SBen Gras{
317f789fee2SBen Gras	echo Testing labels and branching
318f789fee2SBen Gras	mark '5.1' ; $SED -n -e '
319f789fee2SBen Grasb label4
320f789fee2SBen Gras:label3
321f789fee2SBen Grass/^/label3_/p
322f789fee2SBen Grasb end
323f789fee2SBen Gras:label4
324f789fee2SBen Gras2,12b label1
325f789fee2SBen Grasb label2
326f789fee2SBen Gras:label1
327f789fee2SBen Grass/^/label1_/p
328f789fee2SBen Grasb
329f789fee2SBen Gras:label2
330f789fee2SBen Grass/^/label2_/p
331f789fee2SBen Grasb label3
332f789fee2SBen Gras:end
333f789fee2SBen Gras' lines1
334f789fee2SBen Gras	mark '5.2'
335f789fee2SBen Gras	if [ $BSD -eq 1 ] ; then
336f789fee2SBen Gras		echo BSD sed fails this test
337f789fee2SBen Gras	fi
338f789fee2SBen Gras	$SED -n -e '
339f789fee2SBen Grass/l1_/l2_/
340f789fee2SBen Grast ok
341f789fee2SBen Grasb
342f789fee2SBen Gras:ok
343f789fee2SBen Grass/^/tested /p
344f789fee2SBen Gras' lines1 lines2
345f789fee2SBen Gras# SunOS sed behaves differently here.  Clarification needed.
346f789fee2SBen Gras#	mark '5.3' ; $SED -n -e '
347f789fee2SBen Gras#5,8b inside
348f789fee2SBen Gras#1,5 {
349f789fee2SBen Gras#	s/^/^/p
350f789fee2SBen Gras#	:inside
351f789fee2SBen Gras#	s/$/$/p
352f789fee2SBen Gras#}
353f789fee2SBen Gras#' lines1
354f789fee2SBen Gras# Check that t clears the substitution done flag
355f789fee2SBen Gras	mark '5.4' ; $SED -n -e '
356f789fee2SBen Gras1,8s/^/^/
357f789fee2SBen Grast l1
358f789fee2SBen Gras:l1
359f789fee2SBen Grast l2
360f789fee2SBen Grass/$/$/p
361f789fee2SBen Grasb
362f789fee2SBen Gras:l2
363f789fee2SBen Grass/^/ERROR/
364f789fee2SBen Gras' lines1
365f789fee2SBen Gras# Check that reading a line clears the substitution done flag
366f789fee2SBen Gras	mark '5.5'
367f789fee2SBen Gras	if [ $BSD -eq 1 ] ; then
368f789fee2SBen Gras		echo BSD sed fails this test
369f789fee2SBen Gras	fi
370f789fee2SBen Gras	$SED -n -e '
371f789fee2SBen Grast l2
372f789fee2SBen Gras1,8s/^/^/p
373f789fee2SBen Gras2,7N
374f789fee2SBen Grasb
375f789fee2SBen Gras:l2
376f789fee2SBen Grass/^/ERROR/p
377f789fee2SBen Gras' lines1
378f789fee2SBen Gras	mark '5.6' ; $SED 5q lines1
379f789fee2SBen Gras	mark '5.7' ; $SED -e '
380f789fee2SBen Gras5i\
381f789fee2SBen Grashello
382f789fee2SBen Gras5q' lines1
383f789fee2SBen Gras# Branch across block boundary
384f789fee2SBen Gras	mark '5.8' ; $SED -e '
385f789fee2SBen Gras{
386f789fee2SBen Gras:b
387f789fee2SBen Gras}
388f789fee2SBen Grass/l/m/
389f789fee2SBen Grastb' lines1
390f789fee2SBen Gras}
391f789fee2SBen Gras
392f789fee2SBen Grastest_pattern()
393f789fee2SBen Gras{
394f789fee2SBen Grasecho Pattern space commands
395f789fee2SBen Gras# Check that the pattern space is deleted
396f789fee2SBen Gras	mark '6.1' ; $SED -n -e '
397f789fee2SBen Grasc\
398f789fee2SBen Graschanged
399f789fee2SBen Grasp
400f789fee2SBen Gras' lines1
401f789fee2SBen Gras	mark '6.2' ; $SED -n -e '
402f789fee2SBen Gras4d
403f789fee2SBen Grasp
404f789fee2SBen Gras' lines1
405f789fee2SBen Gras# SunOS sed refused to print here
406f789fee2SBen Gras#	mark '6.3' ; $SED -e '
407f789fee2SBen Gras#N
408f789fee2SBen Gras#N
409f789fee2SBen Gras#N
410f789fee2SBen Gras#D
411f789fee2SBen Gras#P
412f789fee2SBen Gras#4p
413f789fee2SBen Gras#' lines1
414f789fee2SBen Gras	mark '6.4' ; $SED -e '
415f789fee2SBen Gras2h
416f789fee2SBen Gras3H
417f789fee2SBen Gras4g
418f789fee2SBen Gras5G
419f789fee2SBen Gras6x
420f789fee2SBen Gras6p
421f789fee2SBen Gras6x
422f789fee2SBen Gras6p
423f789fee2SBen Gras' lines1
424f789fee2SBen Gras	mark '6.5' ; $SED -e '4n' lines1
425f789fee2SBen Gras	mark '6.6' ; $SED -n -e '4n' lines1
426f789fee2SBen Gras}
427f789fee2SBen Gras
428f789fee2SBen Grastest_print()
429f789fee2SBen Gras{
430f789fee2SBen Gras	echo Testing print and file routines
431f789fee2SBen Gras	awk 'END {for (i = 1; i < 256; i++) printf("%c", i);print "\n"}' \
432f789fee2SBen Gras		</dev/null >lines3
433f789fee2SBen Gras	# GNU and SunOS sed behave differently here
434f789fee2SBen Gras	mark '7.1'
435f789fee2SBen Gras	if [ $BSD -eq 1 ] ; then
436f789fee2SBen Gras		echo 'BSD sed drops core on this one; TEST SKIPPED'
437f789fee2SBen Gras	else
438f789fee2SBen Gras		$SED -n l lines3
439f789fee2SBen Gras	fi
440f789fee2SBen Gras	mark '7.2' ; $SED -e '/l2_/=' lines1 lines2
441f789fee2SBen Gras	rm -f lines4
442f789fee2SBen Gras	mark '7.3' ; $SED -e '3,12w lines4' lines1
443f789fee2SBen Gras	echo w results
444f789fee2SBen Gras	cat lines4
445f789fee2SBen Gras	mark '7.4' ; $SED -e '4r lines2' lines1
446f789fee2SBen Gras	mark '7.5' ; $SED -e '5r /dev/dds' lines1
447f789fee2SBen Gras	mark '7.6' ; $SED -e '6r /dev/null' lines1
448f789fee2SBen Gras	mark '7.7'
449f789fee2SBen Gras	if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
450f789fee2SBen Gras		echo BSD, GNU and SunOS cannot pass this one
451f789fee2SBen Gras	else
452f789fee2SBen Gras		sed '200q' $DICT | sed 's$.*$s/^/&/w tmpdir/&$' >script1
453f789fee2SBen Gras		rm -rf tmpdir
454f789fee2SBen Gras		mkdir tmpdir
455f789fee2SBen Gras		$SED -f script1 lines1
456f789fee2SBen Gras		cat tmpdir/*
457f789fee2SBen Gras		rm -rf tmpdir
458f789fee2SBen Gras	fi
459f789fee2SBen Gras	mark '7.8'
460f789fee2SBen Gras	if [ $BSD -eq 1 ] ; then
461f789fee2SBen Gras		echo BSD sed cannot pass 7.7
462f789fee2SBen Gras	else
463f789fee2SBen Gras		echo line1 > lines3
464f789fee2SBen Gras		echo "" >> lines3
465f789fee2SBen Gras		$SED -n -e '$p' lines3 /dev/null
466f789fee2SBen Gras	fi
467f789fee2SBen Gras
468f789fee2SBen Gras}
469f789fee2SBen Gras
470f789fee2SBen Grastest_subst()
471f789fee2SBen Gras{
472f789fee2SBen Gras	echo Testing substitution commands
473f789fee2SBen Gras	mark '8.1' ; $SED -e 's/./X/g' lines1
474f789fee2SBen Gras	mark '8.2' ; $SED -e 's,.,X,g' lines1
475f789fee2SBen Gras# GNU and SunOS sed thinks we are escaping . as wildcard, not as separator
476f789fee2SBen Gras#	mark '8.3' ; $SED -e 's.\..X.g' lines1
477f789fee2SBen Gras# POSIX does not say that this should work
478f789fee2SBen Gras#	mark '8.4' ; $SED -e 's/[/]/Q/' lines1
479f789fee2SBen Gras	mark '8.4' ; $SED -e 's/[\/]/Q/' lines1
480f789fee2SBen Gras	mark '8.5' ; $SED -e 's_\__X_' lines1
481f789fee2SBen Gras	mark '8.6' ; $SED -e 's/./(&)/g' lines1
482f789fee2SBen Gras	mark '8.7' ; $SED -e 's/./(\&)/g' lines1
483f789fee2SBen Gras	mark '8.8' ; $SED -e 's/\(.\)\(.\)\(.\)/x\3x\2x\1/g' lines1
484f789fee2SBen Gras	mark '8.9' ; $SED -e 's/_/u0\
485f789fee2SBen Grasu1\
486f789fee2SBen Grasu2/g' lines1
487f789fee2SBen Gras	mark '8.10'
488f789fee2SBen Gras	if [ $BSD -eq 1 -o $GNU -eq 1 ] ; then
489f789fee2SBen Gras		echo 'BSD/GNU sed do not understand digit flags on s commands'
490f789fee2SBen Gras	fi
491f789fee2SBen Gras	$SED -e 's/./X/4' lines1
492f789fee2SBen Gras	rm -f lines4
493f789fee2SBen Gras	mark '8.11' ; $SED -e 's/1/X/w lines4' lines1
494f789fee2SBen Gras	echo s wfile results
495f789fee2SBen Gras	cat lines4
496f789fee2SBen Gras	mark '8.12' ; $SED -e 's/[123]/X/g' lines1
497f789fee2SBen Gras	mark '8.13' ; $SED -e 'y/0123456789/9876543210/' lines1
498f789fee2SBen Gras	mark '8.14' ;
499f789fee2SBen Gras	if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
500f789fee2SBen Gras		echo BSD/GNU/SUN sed fail this test
501f789fee2SBen Gras	else
502f789fee2SBen Gras		$SED -e 'y10\123456789198765432\101' lines1
503f789fee2SBen Gras	fi
504f789fee2SBen Gras	mark '8.15' ; $SED -e '1N;2y/\n/X/' lines1
505f789fee2SBen Gras	mark '8.16'
506f789fee2SBen Gras	if [ $BSD -eq 1 ] ; then
507f789fee2SBen Gras		echo 'BSD sed does not handle branch defined REs'
508f789fee2SBen Gras	else
509f789fee2SBen Gras		echo 'eeefff' | $SED -e 'p' -e 's/e/X/p' -e ':x' \
510f789fee2SBen Gras		    -e 's//Y/p' -e '/f/bx'
511f789fee2SBen Gras	fi
512f789fee2SBen Gras}
513f789fee2SBen Gras
514f789fee2SBen Grastest_error()
515f789fee2SBen Gras{
516f789fee2SBen Gras	exec 3<&0 4>&1 5>&2
517f789fee2SBen Gras	exec 0</dev/null
518f789fee2SBen Gras	exec 2>&1
519f789fee2SBen Gras	set -x
520f789fee2SBen Gras	$TEST -x && exit 1
521f789fee2SBen Gras	$TEST -f && exit 1
522f789fee2SBen Gras	$TEST -e && exit 1
523f789fee2SBen Gras	$TEST -f /dev/dds && exit 1
524f789fee2SBen Gras	$TEST p /dev/dds && exit 1
525f789fee2SBen Gras	$TEST -f /bin/sh && exit 1
526f789fee2SBen Gras	$TEST '{' && exit 1
527f789fee2SBen Gras	$TEST '{' && exit 1
528f789fee2SBen Gras	$TEST '/hello/' && exit 1
529f789fee2SBen Gras	$TEST '1,/hello/' && exit 1
530f789fee2SBen Gras	$TEST -e '-5p' && exit 1
531f789fee2SBen Gras	$TEST '/jj' && exit 1
532f789fee2SBen Gras	$TEST 'a hello' && exit 1
533f789fee2SBen Gras	$TEST 'a \ hello' && exit 1
534f789fee2SBen Gras	$TEST 'b foo' && exit 1
535f789fee2SBen Gras	$TEST 'd hello' && exit 1
536f789fee2SBen Gras	$TEST 's/aa' && exit 1
537f789fee2SBen Gras	$TEST 's/aa/' && exit 1
538f789fee2SBen Gras	$TEST 's/a/b' && exit 1
539f789fee2SBen Gras	$TEST 's/a/b/c/d' && exit 1
540f789fee2SBen Gras	$TEST 's/a/b/ 1 2' && exit 1
541f789fee2SBen Gras	$TEST 's/a/b/ 1 g' && exit 1
542f789fee2SBen Gras	$TEST 's/a/b/w' && exit 1
543f789fee2SBen Gras	$TEST 'y/aa' && exit 1
544f789fee2SBen Gras	$TEST 'y/aa/b/' && exit 1
545f789fee2SBen Gras	$TEST 'y/aa/' && exit 1
546f789fee2SBen Gras	$TEST 'y/a/b' && exit 1
547f789fee2SBen Gras	$TEST 'y/a/b/c/d' && exit 1
548f789fee2SBen Gras	$TEST '!' && exit 1
549f789fee2SBen Gras	$TEST supercalifrangolisticexprialidociussupercalifrangolisticexcius
550f789fee2SBen Gras	set +x
551f789fee2SBen Gras	exec 0<&3 1>&4 2>&5
552f789fee2SBen Gras}
553f789fee2SBen Gras
554f789fee2SBen Grasmain
555