Bit sloppy, but should pickup most regressions. Signed-off-by: Ionen Wolkens <io...@gentoo.org> --- eclass/tests/esed.sh | 173 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100755 eclass/tests/esed.sh
diff --git a/eclass/tests/esed.sh b/eclass/tests/esed.sh new file mode 100755 index 00000000000..fad1319ea13 --- /dev/null +++ b/eclass/tests/esed.sh @@ -0,0 +1,173 @@ +#!/usr/bin/env bash +# Copyright 2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +source tests-common.sh || exit + +inherit esed + +cd "${WORKDIR:-/dev/null}" || exit 1 + +tsddied=n +tsddie() { + tsddied=y + echo "would die: $*" >&2 + # silence further errors given didn't actually die + sed() { :; } + die() { :; } +} + +tsdbegin() { + tbegin "${1}" + tsddied=n + unset -f sed + die() { tsddie "${@}"; } +} + +tsdend() { + if [[ ${1} == fatal && ${tsddied} == n ]]; then + tend 127 "should have died" + elif [[ ${1} == nonfatal && ${tsddied} == y ]]; then + tend 128 "should not have died" + else + tend ${2:-0} "${3:-something went wrong(tm)}" + fi +} + +tsdfile() { + local file + for file in "${@}"; do + if [[ ${file%:*} ]]; then + echo "${file%:*}" > "${file#*:}" || exit 1 + elif [[ -e ${file#*:} ]]; then + rm -- "${file#*:}" || exit 1 + fi + done +} + +tsdcmp() { + local contents + contents=$(<"${1}") || exit 1 + [[ ${contents} == "${2}" ]] +} + +tsdbegin "esed: change on single file" +tsdfile replace:file +esed s/replace/new/ file +tsdcmp file new +tsdend nonfatal + +tsdbegin "esed: die due to no change on a single file" +tsdfile keep:file +esed s/replace/new/ file +tsdcmp file keep +tsdend fatal ${?} + +tsdbegin "esed: change on at least one of two files with ESED_VERBOSE=1" +tsdfile keep:file1 replace:file2 +ESED_VERBOSE=1 esed s/replace/new/ file1 file2 +tsdcmp file1 keep && + tsdcmp file2 new +tsdend nonfatal ${?} + +tsdbegin "esed: die due to no change on two files with ESED_VERBOSE=1" +tsdfile keep:file{1..2} +ESED_VERBOSE=1 esed s/replace/new/ file1 file2 +tsdcmp file1 keep && + tsdcmp file2 keep +tsdend fatal ${?} + +tsdbegin "esed: change using esedexps" +tsdfile replace1-replace2:file +esedexps=( + s/replace1/new1/ + s/replace2/new2/ +) +esed file +tsdcmp file new1-new2 +tsdend nonfatal ${?} + +tsdbegin "esed: don't call sed with empty esedexps" +tsdfile keep:file +esedexps=( '' ) +esed file +[[ ! -v esedexps ]] +tsdend nonfatal ${?} + +tsdbegin "esed: die due to passing -i" +esed -i s/replace/new/ +tsdend fatal + +tsdbegin "esed: change files with one nicely named '-- -i' using esedexp extended regex" +tsdfile replace:"-- -i" replace:file +esedexps=( + 's/(replace)/\1-new/' +) +esed -E file -- "-- -i" +tsdcmp file replace-new && + tsdcmp "-- -i" replace-new +tsdend nonfatal ${?} + +tsdbegin "esed: die due to no files found" +esed s/replace/new/ +tsdend fatal + +tsdbegin "esed: die due to invalid sed use" +tsdfile keep:file +esed s/replace/new file +tsdend fatal + +tsdbegin "enewsed: change on a new file" +tsdfile replace:file :newfile +enewsed s/replace/new/ file newfile +tsdcmp file replace && + tsdcmp newfile new +tsdend nonfatal ${?} + +tsdbegin "enewsed: die due to no changes on a newfile" +tsdfile keep:file :newfile +enewsed s/replace/new/ file newfile +tsdcmp file keep && + tsdcmp newfile keep +tsdend fatal ${?} + +tsdbegin "enewsed: concatenating changed files to a newfile" +tsdfile keep:file1 replace:file2 +enewsed s/replace/new/ file1 file2 newfile +tsdcmp file1 keep && + tsdcmp file2 replace && + tsdcmp newfile $'keep\nnew' +tsdend nonfatal ${?} + +tsdbegin "enewsed: script-file not being concatenated" +tsdfile 's/missing/new/':script keep:file :newfile +enewsed file -f script newfile +tsdcmp script 's/missing/new/' && + tsdcmp file keep && + tsdcmp newfile keep +tsdend fatal ${?} + +tsdbegin "esedfind: change found files" +tsdfile keep:file1.find replace:file2.find +esedfind . -type f -name '*.find' -esed s/replace/new/ +tsdcmp file1.find keep && + tsdcmp file2.find new +tsdend nonfatal ${?} + +tsdbegin "esedfind: die due to no files found" +esedfind . -type f -name '*.missing' -esed s/replace/new/ +tsdend fatal + +tsdbegin "esedfind: die due to no changes from one esedexps without -esed" +tsdfile keep:file1.find2 replace:file2.find2 +esedexps=( + s/replace/new/ + s/missing/new/ +) +esedfind . -type f -name '*.find2' +tsdcmp file1.find2 keep && + tsdcmp file2.find2 new +tsdend fatal ${?} + +texit -- 2.35.1