Gentoo Archives: gentoo-dev

From: Ionen Wolkens <ionen@g.o>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] [PATCH 2/2] eclass/tests/esed.sh: basic tests for esed.eclass
Date: Tue, 31 May 2022 11:24:10
Message-Id: 20220531112319.29168-3-ionen@gentoo.org
In Reply to: [gentoo-dev] [PATCH 0/2] Add esed.eclass for sed that dies if caused no changes by Ionen Wolkens
1 Bit sloppy, but should pickup most regressions.
2
3 Signed-off-by: Ionen Wolkens <ionen@g.o>
4 ---
5 eclass/tests/esed.sh | 173 +++++++++++++++++++++++++++++++++++++++++++
6 1 file changed, 173 insertions(+)
7 create mode 100755 eclass/tests/esed.sh
8
9 diff --git a/eclass/tests/esed.sh b/eclass/tests/esed.sh
10 new file mode 100755
11 index 00000000000..fad1319ea13
12 --- /dev/null
13 +++ b/eclass/tests/esed.sh
14 @@ -0,0 +1,173 @@
15 +#!/usr/bin/env bash
16 +# Copyright 2022 Gentoo Authors
17 +# Distributed under the terms of the GNU General Public License v2
18 +
19 +EAPI=8
20 +source tests-common.sh || exit
21 +
22 +inherit esed
23 +
24 +cd "${WORKDIR:-/dev/null}" || exit 1
25 +
26 +tsddied=n
27 +tsddie() {
28 + tsddied=y
29 + echo "would die: $*" >&2
30 + # silence further errors given didn't actually die
31 + sed() { :; }
32 + die() { :; }
33 +}
34 +
35 +tsdbegin() {
36 + tbegin "${1}"
37 + tsddied=n
38 + unset -f sed
39 + die() { tsddie "${@}"; }
40 +}
41 +
42 +tsdend() {
43 + if [[ ${1} == fatal && ${tsddied} == n ]]; then
44 + tend 127 "should have died"
45 + elif [[ ${1} == nonfatal && ${tsddied} == y ]]; then
46 + tend 128 "should not have died"
47 + else
48 + tend ${2:-0} "${3:-something went wrong(tm)}"
49 + fi
50 +}
51 +
52 +tsdfile() {
53 + local file
54 + for file in "${@}"; do
55 + if [[ ${file%:*} ]]; then
56 + echo "${file%:*}" > "${file#*:}" || exit 1
57 + elif [[ -e ${file#*:} ]]; then
58 + rm -- "${file#*:}" || exit 1
59 + fi
60 + done
61 +}
62 +
63 +tsdcmp() {
64 + local contents
65 + contents=$(<"${1}") || exit 1
66 + [[ ${contents} == "${2}" ]]
67 +}
68 +
69 +tsdbegin "esed: change on single file"
70 +tsdfile replace:file
71 +esed s/replace/new/ file
72 +tsdcmp file new
73 +tsdend nonfatal
74 +
75 +tsdbegin "esed: die due to no change on a single file"
76 +tsdfile keep:file
77 +esed s/replace/new/ file
78 +tsdcmp file keep
79 +tsdend fatal ${?}
80 +
81 +tsdbegin "esed: change on at least one of two files with ESED_VERBOSE=1"
82 +tsdfile keep:file1 replace:file2
83 +ESED_VERBOSE=1 esed s/replace/new/ file1 file2
84 +tsdcmp file1 keep &&
85 + tsdcmp file2 new
86 +tsdend nonfatal ${?}
87 +
88 +tsdbegin "esed: die due to no change on two files with ESED_VERBOSE=1"
89 +tsdfile keep:file{1..2}
90 +ESED_VERBOSE=1 esed s/replace/new/ file1 file2
91 +tsdcmp file1 keep &&
92 + tsdcmp file2 keep
93 +tsdend fatal ${?}
94 +
95 +tsdbegin "esed: change using esedexps"
96 +tsdfile replace1-replace2:file
97 +esedexps=(
98 + s/replace1/new1/
99 + s/replace2/new2/
100 +)
101 +esed file
102 +tsdcmp file new1-new2
103 +tsdend nonfatal ${?}
104 +
105 +tsdbegin "esed: don't call sed with empty esedexps"
106 +tsdfile keep:file
107 +esedexps=( '' )
108 +esed file
109 +[[ ! -v esedexps ]]
110 +tsdend nonfatal ${?}
111 +
112 +tsdbegin "esed: die due to passing -i"
113 +esed -i s/replace/new/
114 +tsdend fatal
115 +
116 +tsdbegin "esed: change files with one nicely named '-- -i' using esedexp extended regex"
117 +tsdfile replace:"-- -i" replace:file
118 +esedexps=(
119 + 's/(replace)/\1-new/'
120 +)
121 +esed -E file -- "-- -i"
122 +tsdcmp file replace-new &&
123 + tsdcmp "-- -i" replace-new
124 +tsdend nonfatal ${?}
125 +
126 +tsdbegin "esed: die due to no files found"
127 +esed s/replace/new/
128 +tsdend fatal
129 +
130 +tsdbegin "esed: die due to invalid sed use"
131 +tsdfile keep:file
132 +esed s/replace/new file
133 +tsdend fatal
134 +
135 +tsdbegin "enewsed: change on a new file"
136 +tsdfile replace:file :newfile
137 +enewsed s/replace/new/ file newfile
138 +tsdcmp file replace &&
139 + tsdcmp newfile new
140 +tsdend nonfatal ${?}
141 +
142 +tsdbegin "enewsed: die due to no changes on a newfile"
143 +tsdfile keep:file :newfile
144 +enewsed s/replace/new/ file newfile
145 +tsdcmp file keep &&
146 + tsdcmp newfile keep
147 +tsdend fatal ${?}
148 +
149 +tsdbegin "enewsed: concatenating changed files to a newfile"
150 +tsdfile keep:file1 replace:file2
151 +enewsed s/replace/new/ file1 file2 newfile
152 +tsdcmp file1 keep &&
153 + tsdcmp file2 replace &&
154 + tsdcmp newfile $'keep\nnew'
155 +tsdend nonfatal ${?}
156 +
157 +tsdbegin "enewsed: script-file not being concatenated"
158 +tsdfile 's/missing/new/':script keep:file :newfile
159 +enewsed file -f script newfile
160 +tsdcmp script 's/missing/new/' &&
161 + tsdcmp file keep &&
162 + tsdcmp newfile keep
163 +tsdend fatal ${?}
164 +
165 +tsdbegin "esedfind: change found files"
166 +tsdfile keep:file1.find replace:file2.find
167 +esedfind . -type f -name '*.find' -esed s/replace/new/
168 +tsdcmp file1.find keep &&
169 + tsdcmp file2.find new
170 +tsdend nonfatal ${?}
171 +
172 +tsdbegin "esedfind: die due to no files found"
173 +esedfind . -type f -name '*.missing' -esed s/replace/new/
174 +tsdend fatal
175 +
176 +tsdbegin "esedfind: die due to no changes from one esedexps without -esed"
177 +tsdfile keep:file1.find2 replace:file2.find2
178 +esedexps=(
179 + s/replace/new/
180 + s/missing/new/
181 +)
182 +esedfind . -type f -name '*.find2'
183 +tsdcmp file1.find2 keep &&
184 + tsdcmp file2.find2 new
185 +tsdend fatal ${?}
186 +
187 +texit
188 --
189 2.35.1