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 |