14e81fcfeSAndy Fiddaman#!/bin/ksh -p
24e81fcfeSAndy Fiddaman#
34e81fcfeSAndy Fiddaman# This file and its contents are supplied under the terms of the
44e81fcfeSAndy Fiddaman# Common Development and Distribution License ("CDDL"), version 1.0.
54e81fcfeSAndy Fiddaman# You may only use this file in accordance with the terms of version
64e81fcfeSAndy Fiddaman# 1.0 of the CDDL.
74e81fcfeSAndy Fiddaman#
84e81fcfeSAndy Fiddaman# A full copy of the text of the CDDL should have accompanied this
94e81fcfeSAndy Fiddaman# source. A copy of the CDDL is also available via the Internet at
104e81fcfeSAndy Fiddaman# http://www.illumos.org/license/CDDL.
114e81fcfeSAndy Fiddaman
124e81fcfeSAndy Fiddaman# Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
134e81fcfeSAndy Fiddaman
14*cd94aa94SAndy FiddamanSED=${SED:=/usr/bin/sed}
15*cd94aa94SAndy Fiddaman
164e81fcfeSAndy Fiddamanfunction fatal {
174e81fcfeSAndy Fiddaman	echo "[FATAL] $*" > /dev/stderr
184e81fcfeSAndy Fiddaman	exit 1
194e81fcfeSAndy Fiddaman}
204e81fcfeSAndy Fiddaman
214e81fcfeSAndy Fiddamanfunction runtest {
224e81fcfeSAndy Fiddaman	typeset script="$1"
234e81fcfeSAndy Fiddaman	typeset expect="$2"
24c6fc7f7bSAndy Fiddaman	typeset files="${3:-$input1}"
254e81fcfeSAndy Fiddaman
264e81fcfeSAndy Fiddaman	typeset ef=`mktemp`
274e81fcfeSAndy Fiddaman	[[ -n "$expect" ]] && printf "%s\n" $expect > $ef
284e81fcfeSAndy Fiddaman
29*cd94aa94SAndy Fiddaman	$SED -n "$script" $files > $output
304e81fcfeSAndy Fiddaman	if [[ $? -eq 0 ]] && cmp -s $output $ef; then
31c6fc7f7bSAndy Fiddaman		echo "[PASS] sed $script $files"
324e81fcfeSAndy Fiddaman	else
33c6fc7f7bSAndy Fiddaman		echo "[FAIL] sed $script $files"
344e81fcfeSAndy Fiddaman		diff -u $ef $output
354e81fcfeSAndy Fiddaman		err=1
364e81fcfeSAndy Fiddaman	fi
374e81fcfeSAndy Fiddaman	rm -f $ef
384e81fcfeSAndy Fiddaman}
394e81fcfeSAndy Fiddaman
40c6fc7f7bSAndy Fiddamanfor f in input1 input2 output; do
41c6fc7f7bSAndy Fiddaman	tf=`mktemp`
42c6fc7f7bSAndy Fiddaman	[[ -n "$tf" && -f "$tf" ]] || fatal "Could not create temp file $f"
43c6fc7f7bSAndy Fiddaman	eval $f=$tf
44c6fc7f7bSAndy Fiddamandone
454e81fcfeSAndy Fiddaman
464e81fcfeSAndy Fiddamantypeset err=0
47c6fc7f7bSAndy Fiddaman
48c6fc7f7bSAndy Fiddamanprintf "%s\n" a b c d e f g h a j > $input1
49c6fc7f7bSAndy Fiddaman[[ $? -eq 0 && -s "$input1" ]] || fatal "Could not populate input1 file"
50c6fc7f7bSAndy Fiddamanprintf "%s\n" m n o p q z > $input2
51c6fc7f7bSAndy Fiddaman[[ $? -eq 0 && -s "$input2" ]] || fatal "Could not populate input2 file"
524e81fcfeSAndy Fiddaman
534e81fcfeSAndy Fiddaman# Simple
544e81fcfeSAndy Fiddamanruntest "3p" "c"
554e81fcfeSAndy Fiddamanruntest "\$p" "j"
564e81fcfeSAndy Fiddamanruntest "7,\$p" "g h a j"
574e81fcfeSAndy Fiddamanruntest "/d/p" "d"
584e81fcfeSAndy Fiddamanruntest "/a/p" "a a"
594e81fcfeSAndy Fiddaman
604e81fcfeSAndy Fiddaman# Ranges
614e81fcfeSAndy Fiddamanruntest "5,7p" "e f g"
624e81fcfeSAndy Fiddamanruntest "5,4p" "e"
634e81fcfeSAndy Fiddamanruntest "/a/,4p" "a b c d a"
644e81fcfeSAndy Fiddamanruntest "0,/b/p" ""
654e81fcfeSAndy Fiddamanruntest "4,/a/p" "d e f g h a"
664e81fcfeSAndy Fiddamanruntest "/d/,/g/p" "d e f g"
674e81fcfeSAndy Fiddaman
684e81fcfeSAndy Fiddaman# Relative ranges
694e81fcfeSAndy Fiddamanruntest "3,+0p" "c"
704e81fcfeSAndy Fiddamanruntest "3,+1p" "c d"
714e81fcfeSAndy Fiddamanruntest "5,+3p" "e f g h"
724e81fcfeSAndy Fiddamanruntest "6,+3p" "f g h a"
734e81fcfeSAndy Fiddamanruntest "7,+3p" "g h a j"
744e81fcfeSAndy Fiddamanruntest "8,+3p" "h a j"
754e81fcfeSAndy Fiddamanruntest "/a/,+1p" "a b a j"
764e81fcfeSAndy Fiddamanruntest "/a/,+8p" "a b c d e f g h a"
774e81fcfeSAndy Fiddamanruntest "/a/,+9p" "a b c d e f g h a j"
784e81fcfeSAndy Fiddaman
794e81fcfeSAndy Fiddaman# Negative
804e81fcfeSAndy Fiddamanruntest "4,7!p" "a b c h a j"
814e81fcfeSAndy Fiddamanruntest "6,+3!p" "a b c d e j"
824e81fcfeSAndy Fiddamanruntest "7,+3!p" "a b c d e f"
834e81fcfeSAndy Fiddamanruntest "8,+3!p" "a b c d e f g"
844e81fcfeSAndy Fiddaman
854e81fcfeSAndy Fiddaman# Branch
864e81fcfeSAndy Fiddamanruntest "4,7 { /e/b
874e81fcfeSAndy Fiddaman		p
884e81fcfeSAndy Fiddaman	}" "d f g"
894e81fcfeSAndy Fiddamanruntest "4,+3 { /e/b
904e81fcfeSAndy Fiddaman		p
914e81fcfeSAndy Fiddaman	}" "d f g"
924e81fcfeSAndy Fiddaman
93c6fc7f7bSAndy Fiddaman# stdin
94c6fc7f7bSAndy Fiddamancat $input2 $input2 | runtest "\$p" "z" " "
95c6fc7f7bSAndy Fiddaman
96c6fc7f7bSAndy Fiddaman# Multi-file
97c6fc7f7bSAndy Fiddamanfor fileset in \
98c6fc7f7bSAndy Fiddaman	"$input1 $input2" \
99c6fc7f7bSAndy Fiddaman	"$input1 /dev/null $input2" \
100c6fc7f7bSAndy Fiddaman	"/dev/null $input1 $input2" \
101c6fc7f7bSAndy Fiddaman	"$input1 $input2 /dev/null" \
102c6fc7f7bSAndy Fiddaman	"$input1 /dev/null $input2 /dev/null" \
103c6fc7f7bSAndy Fiddaman	"/dev/null $input1 /dev/null $input2" \
104c6fc7f7bSAndy Fiddaman	"$input1 $input2 /dev/null /dev/null" \
105c6fc7f7bSAndy Fiddaman	"$input1 /dev/null /dev/null $input2 /dev/null" \
106c6fc7f7bSAndy Fiddaman	"/dev/null $input1 /dev/null /dev/null $input2" \
107c6fc7f7bSAndy Fiddaman; do
108c6fc7f7bSAndy Fiddaman	runtest "\$p" "z" "$fileset"
109c6fc7f7bSAndy Fiddaman	runtest "3p" "c" "$fileset"
110c6fc7f7bSAndy Fiddaman	runtest "13p" "o" "$fileset"
111c6fc7f7bSAndy Fiddamandone
112c6fc7f7bSAndy Fiddaman
113c6fc7f7bSAndy Fiddamanrm -f $input1 $input2 $output
114c6fc7f7bSAndy Fiddaman
115c6fc7f7bSAndy Fiddaman[[ $err -eq 0 ]] && echo "--- All sed_addr tests passed"
1164e81fcfeSAndy Fiddaman
1174e81fcfeSAndy Fiddamanexit $err
118