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