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