xref: /freebsd/bin/ed/tests/ed_test.sh (revision 7c2c2c2a2253370c88fe428cf1c0ecebd68fe864)
1f015e48aSBaptiste Daroussin# SPDX-License-Identifier: BSD-2-Clause
2f015e48aSBaptiste Daroussin# Copyright (c) 2025 Baptiste Daroussin <bapt@FreeBSD.org>
3f015e48aSBaptiste Daroussin
4f015e48aSBaptiste Daroussin# Helper: create standard 5-line data file
5f015e48aSBaptiste Daroussincreate_std_data()
6f015e48aSBaptiste Daroussin{
7f015e48aSBaptiste Daroussin	cat > "$1" <<'EOF'
8f015e48aSBaptiste Daroussinline 1
9f015e48aSBaptiste Daroussinline 2
10f015e48aSBaptiste Daroussinline 3
11f015e48aSBaptiste Daroussinline 4
12f015e48aSBaptiste Daroussinline5
13f015e48aSBaptiste DaroussinEOF
14f015e48aSBaptiste Daroussin}
15f015e48aSBaptiste Daroussin
16f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
17f015e48aSBaptiste Daroussin# Append (a)
18f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
19f015e48aSBaptiste Daroussinatf_test_case append
20f015e48aSBaptiste Daroussinappend_head()
21f015e48aSBaptiste Daroussin{
22f015e48aSBaptiste Daroussin	atf_set "descr" "Test append command (a)"
23f015e48aSBaptiste Daroussin}
24f015e48aSBaptiste Daroussin
25f015e48aSBaptiste Daroussinappend_body()
26f015e48aSBaptiste Daroussin{
27f015e48aSBaptiste Daroussin	create_std_data input.txt
28f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
29f015e48aSBaptiste DaroussinH
30f015e48aSBaptiste Daroussinr input.txt
31f015e48aSBaptiste Daroussin0a
32f015e48aSBaptiste Daroussinhello world
33f015e48aSBaptiste Daroussin.
34f015e48aSBaptiste Daroussin2a
35f015e48aSBaptiste Daroussinhello world!
36f015e48aSBaptiste Daroussin.
37f015e48aSBaptiste Daroussin$a
38f015e48aSBaptiste Daroussinhello world!!
39f015e48aSBaptiste Daroussin.
40f015e48aSBaptiste Daroussinw output.txt
41f015e48aSBaptiste DaroussinCMDS
42f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
43f015e48aSBaptiste Daroussinhello world
44f015e48aSBaptiste Daroussinline 1
45f015e48aSBaptiste Daroussinhello world!
46f015e48aSBaptiste Daroussinline 2
47f015e48aSBaptiste Daroussinline 3
48f015e48aSBaptiste Daroussinline 4
49f015e48aSBaptiste Daroussinline5
50f015e48aSBaptiste Daroussinhello world!!
51f015e48aSBaptiste DaroussinEOF
52f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
53f015e48aSBaptiste Daroussin}
54f015e48aSBaptiste Daroussin
55f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
56f015e48aSBaptiste Daroussin# Address parsing (addr)
57f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
58f015e48aSBaptiste Daroussinatf_test_case address
59f015e48aSBaptiste Daroussinaddress_head()
60f015e48aSBaptiste Daroussin{
61f015e48aSBaptiste Daroussin	atf_set "descr" "Test complex address parsing"
62f015e48aSBaptiste Daroussin}
63f015e48aSBaptiste Daroussinaddress_body()
64f015e48aSBaptiste Daroussin{
65f015e48aSBaptiste Daroussin	cat > input.txt <<'EOF'
66f015e48aSBaptiste Daroussinline 1
67f015e48aSBaptiste Daroussinline 2
68f015e48aSBaptiste Daroussinline 3
69f015e48aSBaptiste Daroussinline 4
70f015e48aSBaptiste Daroussinline5
71f015e48aSBaptiste Daroussin1ine6
72f015e48aSBaptiste Daroussinline7
73f015e48aSBaptiste Daroussinline8
74f015e48aSBaptiste Daroussinline9
75f015e48aSBaptiste DaroussinEOF
76f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
77f015e48aSBaptiste DaroussinH
78f015e48aSBaptiste Daroussinr input.txt
79f015e48aSBaptiste Daroussin1 d
80f015e48aSBaptiste Daroussin1 1 d
81f015e48aSBaptiste Daroussin1,2,d
82f015e48aSBaptiste Daroussin1;+ + ,d
83f015e48aSBaptiste Daroussin1,2;., + 2d
84f015e48aSBaptiste Daroussinw output.txt
85f015e48aSBaptiste DaroussinCMDS
86f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
87f015e48aSBaptiste Daroussinline 2
88f015e48aSBaptiste Daroussinline9
89f015e48aSBaptiste DaroussinEOF
90f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
91f015e48aSBaptiste Daroussin}
92f015e48aSBaptiste Daroussin
93f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
94f015e48aSBaptiste Daroussin# Change (c)
95f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
96f015e48aSBaptiste Daroussinatf_test_case change
97f015e48aSBaptiste Daroussinchange_head()
98f015e48aSBaptiste Daroussin{
99f015e48aSBaptiste Daroussin	atf_set "descr" "Test change command (c)"
100f015e48aSBaptiste Daroussin}
101f015e48aSBaptiste Daroussinchange_body()
102f015e48aSBaptiste Daroussin{
103f015e48aSBaptiste Daroussin	create_std_data input.txt
104f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
105f015e48aSBaptiste DaroussinH
106f015e48aSBaptiste Daroussinr input.txt
107f015e48aSBaptiste Daroussin1c
108f015e48aSBaptiste Daroussinat the top
109f015e48aSBaptiste Daroussin.
110f015e48aSBaptiste Daroussin4c
111f015e48aSBaptiste Daroussinin the middle
112f015e48aSBaptiste Daroussin.
113f015e48aSBaptiste Daroussin$c
114f015e48aSBaptiste Daroussinat the bottom
115f015e48aSBaptiste Daroussin.
116f015e48aSBaptiste Daroussin2,3c
117f015e48aSBaptiste Daroussinbetween top/middle
118f015e48aSBaptiste Daroussin.
119f015e48aSBaptiste Daroussinw output.txt
120f015e48aSBaptiste DaroussinCMDS
121f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
122f015e48aSBaptiste Daroussinat the top
123f015e48aSBaptiste Daroussinbetween top/middle
124f015e48aSBaptiste Daroussinin the middle
125f015e48aSBaptiste Daroussinat the bottom
126f015e48aSBaptiste DaroussinEOF
127f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
128f015e48aSBaptiste Daroussin}
129f015e48aSBaptiste Daroussin
130f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
131f015e48aSBaptiste Daroussin# Delete (d)
132f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
133f015e48aSBaptiste Daroussinatf_test_case delete
134f015e48aSBaptiste Daroussindelete_head()
135f015e48aSBaptiste Daroussin{
136f015e48aSBaptiste Daroussin	atf_set "descr" "Test delete command (d)"
137f015e48aSBaptiste Daroussin}
138f015e48aSBaptiste Daroussindelete_body()
139f015e48aSBaptiste Daroussin{
140f015e48aSBaptiste Daroussin	create_std_data input.txt
141f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
142f015e48aSBaptiste DaroussinH
143f015e48aSBaptiste Daroussinr input.txt
144f015e48aSBaptiste Daroussin1d
145f015e48aSBaptiste Daroussin2;+1d
146f015e48aSBaptiste Daroussin$d
147f015e48aSBaptiste Daroussinw output.txt
148f015e48aSBaptiste DaroussinCMDS
149f015e48aSBaptiste Daroussin	printf 'line 2\n' > expected.txt
150f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
151f015e48aSBaptiste Daroussin}
152f015e48aSBaptiste Daroussin
153f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
154f015e48aSBaptiste Daroussin# Insert (i)
155f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
156f015e48aSBaptiste Daroussinatf_test_case insert
157f015e48aSBaptiste Daroussininsert_head()
158f015e48aSBaptiste Daroussin{
159f015e48aSBaptiste Daroussin	atf_set "descr" "Test insert command (i)"
160f015e48aSBaptiste Daroussin}
161f015e48aSBaptiste Daroussininsert_body()
162f015e48aSBaptiste Daroussin{
163f015e48aSBaptiste Daroussin	create_std_data input.txt
164f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
165f015e48aSBaptiste DaroussinH
166f015e48aSBaptiste Daroussinr input.txt
167f015e48aSBaptiste Daroussin1i
168f015e48aSBaptiste Daroussinhello world
169f015e48aSBaptiste Daroussin.
170f015e48aSBaptiste Daroussin2i
171f015e48aSBaptiste Daroussinhello world!
172f015e48aSBaptiste Daroussin.
173f015e48aSBaptiste Daroussin$i
174f015e48aSBaptiste Daroussinhello world!!
175f015e48aSBaptiste Daroussin.
176f015e48aSBaptiste Daroussinw output.txt
177f015e48aSBaptiste DaroussinCMDS
178f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
179f015e48aSBaptiste Daroussinhello world
180f015e48aSBaptiste Daroussinhello world!
181f015e48aSBaptiste Daroussinline 1
182f015e48aSBaptiste Daroussinline 2
183f015e48aSBaptiste Daroussinline 3
184f015e48aSBaptiste Daroussinline 4
185f015e48aSBaptiste Daroussinhello world!!
186f015e48aSBaptiste Daroussinline5
187f015e48aSBaptiste DaroussinEOF
188f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
189f015e48aSBaptiste Daroussin}
190f015e48aSBaptiste Daroussin
191f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
192f015e48aSBaptiste Daroussin# Join (j)
193f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
194f015e48aSBaptiste Daroussinatf_test_case join
195f015e48aSBaptiste Daroussinjoin_head()
196f015e48aSBaptiste Daroussin{
197f015e48aSBaptiste Daroussin	atf_set "descr" "Test join command (j)"
198f015e48aSBaptiste Daroussin}
199f015e48aSBaptiste Daroussinjoin_body()
200f015e48aSBaptiste Daroussin{
201f015e48aSBaptiste Daroussin	create_std_data input.txt
202f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
203f015e48aSBaptiste DaroussinH
204f015e48aSBaptiste Daroussinr input.txt
205f015e48aSBaptiste Daroussin1,1j
206f015e48aSBaptiste Daroussin2,3j
207f015e48aSBaptiste Daroussinw output.txt
208f015e48aSBaptiste DaroussinCMDS
209f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
210f015e48aSBaptiste Daroussinline 1
211f015e48aSBaptiste Daroussinline 2line 3
212f015e48aSBaptiste Daroussinline 4
213f015e48aSBaptiste Daroussinline5
214f015e48aSBaptiste DaroussinEOF
215f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
216f015e48aSBaptiste Daroussin}
217f015e48aSBaptiste Daroussin
218f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
219f015e48aSBaptiste Daroussin# Mark (k)
220f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
221f015e48aSBaptiste Daroussinatf_test_case mark
222f015e48aSBaptiste Daroussinmark_head()
223f015e48aSBaptiste Daroussin{
224f015e48aSBaptiste Daroussin	atf_set "descr" "Test mark and reference commands (k, ')"
225f015e48aSBaptiste Daroussin}
226f015e48aSBaptiste Daroussinmark_body()
227f015e48aSBaptiste Daroussin{
228f015e48aSBaptiste Daroussin	create_std_data input.txt
229f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
230f015e48aSBaptiste DaroussinH
231f015e48aSBaptiste Daroussinr input.txt
232f015e48aSBaptiste Daroussin2ka
233f015e48aSBaptiste Daroussin1d
234f015e48aSBaptiste Daroussin'am$
235f015e48aSBaptiste Daroussin1ka
236f015e48aSBaptiste Daroussin0a
237f015e48aSBaptiste Daroussinhello world
238f015e48aSBaptiste Daroussin.
239f015e48aSBaptiste Daroussin'ad
240f015e48aSBaptiste Daroussinu
241f015e48aSBaptiste Daroussin'am0
242f015e48aSBaptiste Daroussinw output.txt
243f015e48aSBaptiste DaroussinCMDS
244f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
245f015e48aSBaptiste Daroussinline 3
246f015e48aSBaptiste Daroussinhello world
247f015e48aSBaptiste Daroussinline 4
248f015e48aSBaptiste Daroussinline5
249f015e48aSBaptiste Daroussinline 2
250f015e48aSBaptiste DaroussinEOF
251f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
252f015e48aSBaptiste Daroussin}
253f015e48aSBaptiste Daroussin
254f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
255f015e48aSBaptiste Daroussin# Move (m)
256f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
257f015e48aSBaptiste Daroussinatf_test_case move
258f015e48aSBaptiste Daroussinmove_head()
259f015e48aSBaptiste Daroussin{
260f015e48aSBaptiste Daroussin	atf_set "descr" "Test move command (m)";
261f015e48aSBaptiste Daroussin}
262f015e48aSBaptiste Daroussinmove_body()
263f015e48aSBaptiste Daroussin{
264f015e48aSBaptiste Daroussin
265f015e48aSBaptiste Daroussin	create_std_data input.txt
266f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
267f015e48aSBaptiste DaroussinH
268f015e48aSBaptiste Daroussinr input.txt
269f015e48aSBaptiste Daroussin1,2m$
270f015e48aSBaptiste Daroussin1,2m$
271f015e48aSBaptiste Daroussin1,2m$
272f015e48aSBaptiste Daroussin$m0
273f015e48aSBaptiste Daroussin$m0
274f015e48aSBaptiste Daroussin2,3m1
275f015e48aSBaptiste Daroussin2,3m3
276f015e48aSBaptiste Daroussinw output.txt
277f015e48aSBaptiste DaroussinCMDS
278f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
279f015e48aSBaptiste Daroussinline5
280f015e48aSBaptiste Daroussinline 1
281f015e48aSBaptiste Daroussinline 2
282f015e48aSBaptiste Daroussinline 3
283f015e48aSBaptiste Daroussinline 4
284f015e48aSBaptiste DaroussinEOF
285f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
286f015e48aSBaptiste Daroussin}
287f015e48aSBaptiste Daroussin
288f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
289f015e48aSBaptiste Daroussin# Transfer / Copy (t)
290f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
291f015e48aSBaptiste Daroussinatf_test_case transfer
292f015e48aSBaptiste Daroussintransfer_head()
293f015e48aSBaptiste Daroussin{
294f015e48aSBaptiste Daroussin	atf_set "descr" "Test transfer/copy command (t)";
295f015e48aSBaptiste Daroussin}
296f015e48aSBaptiste Daroussintransfer_body()
297f015e48aSBaptiste Daroussin{
298f015e48aSBaptiste Daroussin
299f015e48aSBaptiste Daroussin	create_std_data input.txt
300f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
301f015e48aSBaptiste DaroussinH
302f015e48aSBaptiste Daroussinr input.txt
303f015e48aSBaptiste Daroussin1t0
304f015e48aSBaptiste Daroussin2,3t2
305f015e48aSBaptiste Daroussin,t$
306f015e48aSBaptiste Daroussinw output.txt
307f015e48aSBaptiste DaroussinCMDS
308f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
309f015e48aSBaptiste Daroussinline 1
310f015e48aSBaptiste Daroussinline 1
311f015e48aSBaptiste Daroussinline 1
312f015e48aSBaptiste Daroussinline 2
313f015e48aSBaptiste Daroussinline 2
314f015e48aSBaptiste Daroussinline 3
315f015e48aSBaptiste Daroussinline 4
316f015e48aSBaptiste Daroussinline5
317f015e48aSBaptiste Daroussinline 1
318f015e48aSBaptiste Daroussinline 1
319f015e48aSBaptiste Daroussinline 1
320f015e48aSBaptiste Daroussinline 2
321f015e48aSBaptiste Daroussinline 2
322f015e48aSBaptiste Daroussinline 3
323f015e48aSBaptiste Daroussinline 4
324f015e48aSBaptiste Daroussinline5
325f015e48aSBaptiste DaroussinEOF
326f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
327f015e48aSBaptiste Daroussin}
328f015e48aSBaptiste Daroussin
329f015e48aSBaptiste Daroussinatf_test_case transfer_search
330f015e48aSBaptiste Daroussintransfer_search_head()
331f015e48aSBaptiste Daroussin{
332f015e48aSBaptiste Daroussin	atf_set "descr" "Test transfer with address search (t)";
333f015e48aSBaptiste Daroussin}
334f015e48aSBaptiste Daroussintransfer_search_body()
335f015e48aSBaptiste Daroussin{
336f015e48aSBaptiste Daroussin
337f015e48aSBaptiste Daroussin	create_std_data input.txt
338f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
339f015e48aSBaptiste DaroussinH
340f015e48aSBaptiste Daroussinr input.txt
341f015e48aSBaptiste Daroussint0;/./
342f015e48aSBaptiste Daroussinw output.txt
343f015e48aSBaptiste DaroussinCMDS
344f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
345f015e48aSBaptiste Daroussinline 1
346f015e48aSBaptiste Daroussinline5
347f015e48aSBaptiste Daroussinline 2
348f015e48aSBaptiste Daroussinline 3
349f015e48aSBaptiste Daroussinline 4
350f015e48aSBaptiste Daroussinline5
351f015e48aSBaptiste DaroussinEOF
352f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
353f015e48aSBaptiste Daroussin}
354f015e48aSBaptiste Daroussin
355f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
356f015e48aSBaptiste Daroussin# Undo (u)
357f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
358f015e48aSBaptiste Daroussinatf_test_case undo
359f015e48aSBaptiste Daroussinundo_head()
360f015e48aSBaptiste Daroussin{
361f015e48aSBaptiste Daroussin	atf_set "descr" "Test undo command (u)";
362f015e48aSBaptiste Daroussin}
363f015e48aSBaptiste Daroussinundo_body()
364f015e48aSBaptiste Daroussin{
365f015e48aSBaptiste Daroussin
366f015e48aSBaptiste Daroussin	create_std_data input.txt
367f015e48aSBaptiste Daroussin	printf 'dummy\n' > readfile.txt
368f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
369f015e48aSBaptiste DaroussinH
370f015e48aSBaptiste Daroussinr input.txt
371f015e48aSBaptiste Daroussin1;r readfile.txt
372f015e48aSBaptiste Daroussinu
373f015e48aSBaptiste Daroussina
374f015e48aSBaptiste Daroussinhello
375f015e48aSBaptiste Daroussinworld
376f015e48aSBaptiste Daroussin.
377f015e48aSBaptiste Daroussing/./s//x/\
378f015e48aSBaptiste Daroussina\
379f015e48aSBaptiste Daroussinhello\
380f015e48aSBaptiste Daroussinworld
381f015e48aSBaptiste Daroussinu
382f015e48aSBaptiste Daroussinu
383f015e48aSBaptiste Daroussinu
384f015e48aSBaptiste Daroussina
385f015e48aSBaptiste Daroussinhello world!
386f015e48aSBaptiste Daroussin.
387f015e48aSBaptiste Daroussinu
388f015e48aSBaptiste Daroussin1,$d
389f015e48aSBaptiste Daroussinu
390f015e48aSBaptiste Daroussin2,3d
391f015e48aSBaptiste Daroussinu
392f015e48aSBaptiste Daroussinc
393f015e48aSBaptiste Daroussinhello world!!
394f015e48aSBaptiste Daroussin.
395f015e48aSBaptiste Daroussinu
396f015e48aSBaptiste Daroussinu
397f015e48aSBaptiste Daroussin-1;.,+1j
398f015e48aSBaptiste Daroussinu
399f015e48aSBaptiste Daroussinu
400f015e48aSBaptiste Daroussinu
401f015e48aSBaptiste Daroussin.,+1t$
402f015e48aSBaptiste Daroussinw output.txt
403f015e48aSBaptiste DaroussinCMDS
404f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
405f015e48aSBaptiste Daroussinline 1
406f015e48aSBaptiste Daroussinhello
407f015e48aSBaptiste Daroussinhello world!!
408f015e48aSBaptiste Daroussinline 2
409f015e48aSBaptiste Daroussinline 3
410f015e48aSBaptiste Daroussinline 4
411f015e48aSBaptiste Daroussinline5
412f015e48aSBaptiste Daroussinhello
413f015e48aSBaptiste Daroussinhello world!!
414f015e48aSBaptiste DaroussinEOF
415f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
416f015e48aSBaptiste Daroussin}
417f015e48aSBaptiste Daroussin
418f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
419f015e48aSBaptiste Daroussin# Global (g)
420f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
421f015e48aSBaptiste Daroussinatf_test_case global_move
422f015e48aSBaptiste Daroussinglobal_move_head()
423f015e48aSBaptiste Daroussin{
424f015e48aSBaptiste Daroussin	atf_set "descr" "Test global command with move (g)";
425f015e48aSBaptiste Daroussin}
426f015e48aSBaptiste Daroussinglobal_move_body()
427f015e48aSBaptiste Daroussin{
428f015e48aSBaptiste Daroussin
429f015e48aSBaptiste Daroussin	create_std_data input.txt
430f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
431f015e48aSBaptiste DaroussinH
432f015e48aSBaptiste Daroussinr input.txt
433f015e48aSBaptiste Daroussing/./m0
434f015e48aSBaptiste Daroussing/./s/$/\
435f015e48aSBaptiste Daroussinhello world
436f015e48aSBaptiste Daroussing/hello /s/lo/p!/\
437f015e48aSBaptiste Daroussina\
438f015e48aSBaptiste Daroussinorder
439f015e48aSBaptiste Daroussinw output.txt
440f015e48aSBaptiste DaroussinCMDS
441f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
442f015e48aSBaptiste Daroussinline5
443f015e48aSBaptiste Daroussinhelp! world
444f015e48aSBaptiste Daroussinorder
445f015e48aSBaptiste Daroussinline 4
446f015e48aSBaptiste Daroussinhelp! world
447f015e48aSBaptiste Daroussinorder
448f015e48aSBaptiste Daroussinline 3
449f015e48aSBaptiste Daroussinhelp! world
450f015e48aSBaptiste Daroussinorder
451f015e48aSBaptiste Daroussinline 2
452f015e48aSBaptiste Daroussinhelp! world
453f015e48aSBaptiste Daroussinorder
454f015e48aSBaptiste Daroussinline 1
455f015e48aSBaptiste Daroussinhelp! world
456f015e48aSBaptiste Daroussinorder
457f015e48aSBaptiste DaroussinEOF
458f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
459f015e48aSBaptiste Daroussin}
460f015e48aSBaptiste Daroussin
461f015e48aSBaptiste Daroussinatf_test_case global_change
462f015e48aSBaptiste Daroussinglobal_change_head()
463f015e48aSBaptiste Daroussin{
464f015e48aSBaptiste Daroussin	atf_set "descr" "Test global command with change (g)";
465f015e48aSBaptiste Daroussin}
466f015e48aSBaptiste Daroussinglobal_change_body()
467f015e48aSBaptiste Daroussin{
468f015e48aSBaptiste Daroussin
469f015e48aSBaptiste Daroussin	create_std_data input.txt
470f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
471f015e48aSBaptiste DaroussinH
472f015e48aSBaptiste Daroussinr input.txt
473f015e48aSBaptiste Daroussing/[2-4]/-1,+1c\
474f015e48aSBaptiste Daroussinhello world
475f015e48aSBaptiste Daroussinw output.txt
476f015e48aSBaptiste DaroussinCMDS
477f015e48aSBaptiste Daroussin	printf 'hello world\n' > expected.txt
478f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
479f015e48aSBaptiste Daroussin}
480f015e48aSBaptiste Daroussin
481f015e48aSBaptiste Daroussinatf_test_case global_substitute
482f015e48aSBaptiste Daroussinglobal_substitute_head()
483f015e48aSBaptiste Daroussin{
484f015e48aSBaptiste Daroussin	atf_set "descr" "Test global with substitute and move (g)";
485f015e48aSBaptiste Daroussin}
486f015e48aSBaptiste Daroussinglobal_substitute_body()
487f015e48aSBaptiste Daroussin{
488f015e48aSBaptiste Daroussin
489f015e48aSBaptiste Daroussin	create_std_data input.txt
490f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
491f015e48aSBaptiste DaroussinH
492f015e48aSBaptiste Daroussinr input.txt
493f015e48aSBaptiste Daroussing/./s//x/\
494f015e48aSBaptiste Daroussin3m0
495f015e48aSBaptiste Daroussing/./s/e/c/\
496f015e48aSBaptiste Daroussin2,3m1
497f015e48aSBaptiste Daroussinw output.txt
498f015e48aSBaptiste DaroussinCMDS
499f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
500f015e48aSBaptiste Daroussinlinc 3
501f015e48aSBaptiste Daroussinxine 1
502f015e48aSBaptiste Daroussinxine 2
503f015e48aSBaptiste Daroussinxinc 4
504f015e48aSBaptiste Daroussinxinc5
505f015e48aSBaptiste DaroussinEOF
506f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
507f015e48aSBaptiste Daroussin}
508f015e48aSBaptiste Daroussin
509f015e48aSBaptiste Daroussinatf_test_case global_undo
510f015e48aSBaptiste Daroussinglobal_undo_head()
511f015e48aSBaptiste Daroussin{
512f015e48aSBaptiste Daroussin	atf_set "descr" "Test global with undo (g)";
513f015e48aSBaptiste Daroussin}
514f015e48aSBaptiste Daroussinglobal_undo_body()
515f015e48aSBaptiste Daroussin{
516f015e48aSBaptiste Daroussin
517f015e48aSBaptiste Daroussin	create_std_data input.txt
518f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
519f015e48aSBaptiste DaroussinH
520f015e48aSBaptiste Daroussinr input.txt
521f015e48aSBaptiste Daroussing/./s/./x/\
522f015e48aSBaptiste Daroussinu\
523f015e48aSBaptiste Daroussins/./y/\
524f015e48aSBaptiste Daroussinu\
525f015e48aSBaptiste Daroussins/./z/\
526f015e48aSBaptiste Daroussinu
527f015e48aSBaptiste Daroussinu
528f015e48aSBaptiste Daroussin0a
529f015e48aSBaptiste Daroussinhello
530f015e48aSBaptiste Daroussin.
531f015e48aSBaptiste Daroussin$a
532f015e48aSBaptiste Daroussinworld
533f015e48aSBaptiste Daroussin.
534f015e48aSBaptiste Daroussinw output.txt
535f015e48aSBaptiste DaroussinCMDS
536f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
537f015e48aSBaptiste Daroussinhello
538f015e48aSBaptiste Daroussinzine 1
539f015e48aSBaptiste Daroussinline 2
540f015e48aSBaptiste Daroussinline 3
541f015e48aSBaptiste Daroussinline 4
542f015e48aSBaptiste Daroussinline5
543f015e48aSBaptiste Daroussinworld
544f015e48aSBaptiste DaroussinEOF
545f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
546f015e48aSBaptiste Daroussin}
547f015e48aSBaptiste Daroussin
548f015e48aSBaptiste Daroussinatf_test_case global_copy
549f015e48aSBaptiste Daroussinglobal_copy_head()
550f015e48aSBaptiste Daroussin{
551f015e48aSBaptiste Daroussin	atf_set "descr" "Test global with copy (g)";
552f015e48aSBaptiste Daroussin}
553f015e48aSBaptiste Daroussinglobal_copy_body()
554f015e48aSBaptiste Daroussin{
555f015e48aSBaptiste Daroussin
556f015e48aSBaptiste Daroussin	cat > input.txt <<'EOF'
557f015e48aSBaptiste Daroussinline 1
558f015e48aSBaptiste Daroussinline 2
559f015e48aSBaptiste Daroussinline 3
560f015e48aSBaptiste DaroussinEOF
561f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
562f015e48aSBaptiste DaroussinH
563f015e48aSBaptiste Daroussinr input.txt
564f015e48aSBaptiste Daroussing/./1,3t$\
565f015e48aSBaptiste Daroussin1d
566f015e48aSBaptiste Daroussinw output.txt
567f015e48aSBaptiste DaroussinCMDS
568f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
569f015e48aSBaptiste Daroussinline 1
570f015e48aSBaptiste Daroussinline 2
571f015e48aSBaptiste Daroussinline 3
572f015e48aSBaptiste Daroussinline 2
573f015e48aSBaptiste Daroussinline 3
574f015e48aSBaptiste Daroussinline 1
575f015e48aSBaptiste Daroussinline 3
576f015e48aSBaptiste Daroussinline 1
577f015e48aSBaptiste Daroussinline 2
578f015e48aSBaptiste DaroussinEOF
579f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
580f015e48aSBaptiste Daroussin}
581f015e48aSBaptiste Daroussin
582f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
583f015e48aSBaptiste Daroussin# Inverse global (v)
584f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
585f015e48aSBaptiste Daroussinatf_test_case inverse_global
586f015e48aSBaptiste Daroussininverse_global_head()
587f015e48aSBaptiste Daroussin{
588f015e48aSBaptiste Daroussin	atf_set "descr" "Test inverse global command (v)";
589f015e48aSBaptiste Daroussin}
590f015e48aSBaptiste Daroussininverse_global_body()
591f015e48aSBaptiste Daroussin{
592f015e48aSBaptiste Daroussin
593f015e48aSBaptiste Daroussin	create_std_data input.txt
594f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
595f015e48aSBaptiste DaroussinH
596f015e48aSBaptiste Daroussinr input.txt
597f015e48aSBaptiste Daroussinv/[ ]/m0
598f015e48aSBaptiste Daroussinv/[ ]/s/$/\
599f015e48aSBaptiste Daroussinhello world
600f015e48aSBaptiste Daroussinv/hello /s/lo/p!/\
601f015e48aSBaptiste Daroussina\
602f015e48aSBaptiste Daroussinorder
603f015e48aSBaptiste Daroussinw output.txt
604f015e48aSBaptiste DaroussinCMDS
605f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
606f015e48aSBaptiste Daroussinline5
607f015e48aSBaptiste Daroussinorder
608f015e48aSBaptiste Daroussinhello world
609f015e48aSBaptiste Daroussinline 1
610f015e48aSBaptiste Daroussinorder
611f015e48aSBaptiste Daroussinline 2
612f015e48aSBaptiste Daroussinorder
613f015e48aSBaptiste Daroussinline 3
614f015e48aSBaptiste Daroussinorder
615f015e48aSBaptiste Daroussinline 4
616f015e48aSBaptiste Daroussinorder
617f015e48aSBaptiste DaroussinEOF
618f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
619f015e48aSBaptiste Daroussin}
620f015e48aSBaptiste Daroussin
621f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
622f015e48aSBaptiste Daroussin# Substitution (s)
623f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
624f015e48aSBaptiste Daroussinatf_test_case subst_backreference
625f015e48aSBaptiste Daroussinsubst_backreference_head()
626f015e48aSBaptiste Daroussin{
627f015e48aSBaptiste Daroussin	atf_set "descr" "Test substitute with backreferences (s)";
628f015e48aSBaptiste Daroussin}
629f015e48aSBaptiste Daroussinsubst_backreference_body()
630f015e48aSBaptiste Daroussin{
631f015e48aSBaptiste Daroussin
632f015e48aSBaptiste Daroussin	create_std_data input.txt
633f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
634f015e48aSBaptiste DaroussinH
635f015e48aSBaptiste Daroussinr input.txt
636f015e48aSBaptiste Daroussins/\([^ ][^ ]*\)/(\1)/g
637f015e48aSBaptiste Daroussin2s
638f015e48aSBaptiste Daroussin/3/s
639f015e48aSBaptiste Daroussin/\(4\)/sr
640f015e48aSBaptiste Daroussin/\(.\)/srg
641f015e48aSBaptiste Daroussin%s/i/&e/
642f015e48aSBaptiste Daroussinw output.txt
643f015e48aSBaptiste DaroussinCMDS
644f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
645f015e48aSBaptiste Daroussinliene 1
646f015e48aSBaptiste Daroussin(liene) (2)
647f015e48aSBaptiste Daroussin(liene) (3)
648f015e48aSBaptiste Daroussinliene (4)
649f015e48aSBaptiste Daroussin(()liene5)
650f015e48aSBaptiste DaroussinEOF
651f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
652f015e48aSBaptiste Daroussin}
653f015e48aSBaptiste Daroussin
654f015e48aSBaptiste Daroussinatf_test_case subst_range
655f015e48aSBaptiste Daroussinsubst_range_head()
656f015e48aSBaptiste Daroussin{
657f015e48aSBaptiste Daroussin	atf_set "descr" "Test substitute on range with count and repeat (s)";
658f015e48aSBaptiste Daroussin}
659f015e48aSBaptiste Daroussinsubst_range_body()
660f015e48aSBaptiste Daroussin{
661f015e48aSBaptiste Daroussin
662f015e48aSBaptiste Daroussin	create_std_data input.txt
663f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
664f015e48aSBaptiste DaroussinH
665f015e48aSBaptiste Daroussinr input.txt
666f015e48aSBaptiste Daroussin,s/./(&)/3
667f015e48aSBaptiste Daroussins/$/00
668f015e48aSBaptiste Daroussin2s//%/g
669f015e48aSBaptiste Daroussins/^l
670f015e48aSBaptiste Daroussinw output.txt
671f015e48aSBaptiste DaroussinCMDS
672f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
673f015e48aSBaptiste Daroussinli(n)e 1
674f015e48aSBaptiste Daroussini(n)e 200
675f015e48aSBaptiste Daroussinli(n)e 3
676f015e48aSBaptiste Daroussinli(n)e 4
677f015e48aSBaptiste Daroussinli(n)e500
678f015e48aSBaptiste DaroussinEOF
679f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
680f015e48aSBaptiste Daroussin}
681f015e48aSBaptiste Daroussin
682f015e48aSBaptiste Daroussinatf_test_case subst_charclass
683f015e48aSBaptiste Daroussinsubst_charclass_head()
684f015e48aSBaptiste Daroussin{
685f015e48aSBaptiste Daroussin	atf_set "descr" "Test substitute with character classes (s)";
686f015e48aSBaptiste Daroussin}
687f015e48aSBaptiste Daroussinsubst_charclass_body()
688f015e48aSBaptiste Daroussin{
689f015e48aSBaptiste Daroussin
690f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
691f015e48aSBaptiste DaroussinH
692f015e48aSBaptiste Daroussina
693f015e48aSBaptiste Daroussinhello/[]world
694f015e48aSBaptiste Daroussin.
695f015e48aSBaptiste Daroussins/[/]/ /
696f015e48aSBaptiste Daroussins/[[:digit:][]/ /
697f015e48aSBaptiste Daroussins/[]]/ /
698f015e48aSBaptiste Daroussinw output.txt
699f015e48aSBaptiste DaroussinCMDS
700f015e48aSBaptiste Daroussin	printf 'hello   world\n' > expected.txt
701f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
702f015e48aSBaptiste Daroussin}
703f015e48aSBaptiste Daroussin
704f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
705f015e48aSBaptiste Daroussin# Edit (e/E)
706f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
707f015e48aSBaptiste Daroussinatf_test_case edit_file
708f015e48aSBaptiste Daroussinedit_file_head()
709f015e48aSBaptiste Daroussin{
710f015e48aSBaptiste Daroussin	atf_set "descr" "Test edit file command (E)";
711f015e48aSBaptiste Daroussin}
712f015e48aSBaptiste Daroussinedit_file_body()
713f015e48aSBaptiste Daroussin{
714f015e48aSBaptiste Daroussin
715f015e48aSBaptiste Daroussin	printf 'hello world\n' > input.txt
716f015e48aSBaptiste Daroussin	printf 'E e1_data.txt\n' > e1_data.txt
717f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
718f015e48aSBaptiste DaroussinH
719f015e48aSBaptiste Daroussinr input.txt
720f015e48aSBaptiste DaroussinE e1_data.txt
721f015e48aSBaptiste Daroussinw output.txt
722f015e48aSBaptiste DaroussinCMDS
723f015e48aSBaptiste Daroussin	printf 'E e1_data.txt\n' > expected.txt
724f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
725f015e48aSBaptiste Daroussin}
726f015e48aSBaptiste Daroussin
727f015e48aSBaptiste Daroussinatf_test_case edit_command
728f015e48aSBaptiste Daroussinedit_command_head()
729f015e48aSBaptiste Daroussin{
730f015e48aSBaptiste Daroussin	atf_set "descr" "Test edit with shell command (E !)";
731f015e48aSBaptiste Daroussin}
732f015e48aSBaptiste Daroussinedit_command_body()
733f015e48aSBaptiste Daroussin{
734f015e48aSBaptiste Daroussin
735f015e48aSBaptiste Daroussin	printf 'E !echo hello world-\n' > input.txt
736f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
737f015e48aSBaptiste DaroussinH
738f015e48aSBaptiste Daroussinr input.txt
739f015e48aSBaptiste DaroussinE !echo hello world-
740f015e48aSBaptiste Daroussinw output.txt
741f015e48aSBaptiste DaroussinCMDS
742f015e48aSBaptiste Daroussin	printf 'hello world-\n' > expected.txt
743f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
744f015e48aSBaptiste Daroussin}
745f015e48aSBaptiste Daroussin
746f015e48aSBaptiste Daroussinatf_test_case edit_reread
747f015e48aSBaptiste Daroussinedit_reread_head()
748f015e48aSBaptiste Daroussin{
749f015e48aSBaptiste Daroussin	atf_set "descr" "Test edit re-read default file (E)";
750f015e48aSBaptiste Daroussin}
751f015e48aSBaptiste Daroussinedit_reread_body()
752f015e48aSBaptiste Daroussin{
753f015e48aSBaptiste Daroussin
754f015e48aSBaptiste Daroussin	printf 'E !echo hello world-\n' > input.txt
755f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
756f015e48aSBaptiste DaroussinH
757f015e48aSBaptiste Daroussinr input.txt
758f015e48aSBaptiste DaroussinE
759f015e48aSBaptiste Daroussinw output.txt
760f015e48aSBaptiste DaroussinCMDS
761f015e48aSBaptiste Daroussin	printf 'E !echo hello world-\n' > expected.txt
762f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
763f015e48aSBaptiste Daroussin}
764f015e48aSBaptiste Daroussin
765f015e48aSBaptiste Daroussinatf_test_case edit_lowercase
766f015e48aSBaptiste Daroussinedit_lowercase_head()
767f015e48aSBaptiste Daroussin{
768f015e48aSBaptiste Daroussin	atf_set "descr" "Test lowercase edit re-read (e)";
769f015e48aSBaptiste Daroussin}
770f015e48aSBaptiste Daroussinedit_lowercase_body()
771f015e48aSBaptiste Daroussin{
772f015e48aSBaptiste Daroussin
773f015e48aSBaptiste Daroussin	printf 'E !echo hello world-\n' > input.txt
774f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
775f015e48aSBaptiste DaroussinH
776f015e48aSBaptiste Daroussinr input.txt
777f015e48aSBaptiste Daroussine
778f015e48aSBaptiste Daroussinw output.txt
779f015e48aSBaptiste DaroussinCMDS
780f015e48aSBaptiste Daroussin	printf 'E !echo hello world-\n' > expected.txt
781f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
782f015e48aSBaptiste Daroussin}
783f015e48aSBaptiste Daroussin
784f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
785f015e48aSBaptiste Daroussin# Read (r)
786f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
787f015e48aSBaptiste Daroussinatf_test_case read_command
788f015e48aSBaptiste Daroussinread_command_head()
789f015e48aSBaptiste Daroussin{
790f015e48aSBaptiste Daroussin	atf_set "descr" "Test read with shell command (r !)";
791f015e48aSBaptiste Daroussin}
792f015e48aSBaptiste Daroussinread_command_body()
793f015e48aSBaptiste Daroussin{
794f015e48aSBaptiste Daroussin
795f015e48aSBaptiste Daroussin	create_std_data input.txt
796f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
797f015e48aSBaptiste DaroussinH
798f015e48aSBaptiste Daroussinr input.txt
799f015e48aSBaptiste Daroussin1;r !echo hello world
800f015e48aSBaptiste Daroussin1
801f015e48aSBaptiste Daroussinr !echo hello world
802f015e48aSBaptiste Daroussinw output.txt
803f015e48aSBaptiste DaroussinCMDS
804f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
805f015e48aSBaptiste Daroussinline 1
806f015e48aSBaptiste Daroussinhello world
807f015e48aSBaptiste Daroussinline 2
808f015e48aSBaptiste Daroussinline 3
809f015e48aSBaptiste Daroussinline 4
810f015e48aSBaptiste Daroussinline5
811f015e48aSBaptiste Daroussinhello world
812f015e48aSBaptiste DaroussinEOF
813f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
814f015e48aSBaptiste Daroussin}
815f015e48aSBaptiste Daroussin
816f015e48aSBaptiste Daroussinatf_test_case read_default
817f015e48aSBaptiste Daroussinread_default_head()
818f015e48aSBaptiste Daroussin{
819f015e48aSBaptiste Daroussin	atf_set "descr" "Test read with default filename (r)";
820f015e48aSBaptiste Daroussin}
821f015e48aSBaptiste Daroussinread_default_body()
822f015e48aSBaptiste Daroussin{
823f015e48aSBaptiste Daroussin
824f015e48aSBaptiste Daroussin	create_std_data input.txt
825f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
826f015e48aSBaptiste DaroussinH
827f015e48aSBaptiste Daroussinr input.txt
828f015e48aSBaptiste Daroussinr
829f015e48aSBaptiste Daroussinw output.txt
830f015e48aSBaptiste DaroussinCMDS
831f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
832f015e48aSBaptiste Daroussinline 1
833f015e48aSBaptiste Daroussinline 2
834f015e48aSBaptiste Daroussinline 3
835f015e48aSBaptiste Daroussinline 4
836f015e48aSBaptiste Daroussinline5
837f015e48aSBaptiste Daroussinline 1
838f015e48aSBaptiste Daroussinline 2
839f015e48aSBaptiste Daroussinline 3
840f015e48aSBaptiste Daroussinline 4
841f015e48aSBaptiste Daroussinline5
842f015e48aSBaptiste DaroussinEOF
843f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
844f015e48aSBaptiste Daroussin}
845f015e48aSBaptiste Daroussin
846f015e48aSBaptiste Daroussinatf_test_case read_file
847f015e48aSBaptiste Daroussinread_file_head()
848f015e48aSBaptiste Daroussin{
849f015e48aSBaptiste Daroussin	atf_set "descr" "Test read from file (r)";
850f015e48aSBaptiste Daroussin}
851f015e48aSBaptiste Daroussinread_file_body()
852f015e48aSBaptiste Daroussin{
853f015e48aSBaptiste Daroussin
854f015e48aSBaptiste Daroussin	printf 'r r3_data.txt\n' > r3_data.txt
855f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
856f015e48aSBaptiste DaroussinH
857f015e48aSBaptiste Daroussinr r3_data.txt
858f015e48aSBaptiste Daroussinr r3_data.txt
859f015e48aSBaptiste Daroussinw output.txt
860f015e48aSBaptiste DaroussinCMDS
861f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
862f015e48aSBaptiste Daroussinr r3_data.txt
863f015e48aSBaptiste Daroussinr r3_data.txt
864f015e48aSBaptiste DaroussinEOF
865f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
866f015e48aSBaptiste Daroussin}
867f015e48aSBaptiste Daroussin
868f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
869f015e48aSBaptiste Daroussin# Write (w)
870f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
871f015e48aSBaptiste Daroussinatf_test_case write_pipe
872f015e48aSBaptiste Daroussinwrite_pipe_head()
873f015e48aSBaptiste Daroussin{
874f015e48aSBaptiste Daroussin	atf_set "descr" "Test write to shell command (w !)";
875f015e48aSBaptiste Daroussin}
876f015e48aSBaptiste Daroussinwrite_pipe_body()
877f015e48aSBaptiste Daroussin{
878f015e48aSBaptiste Daroussin
879f015e48aSBaptiste Daroussin	create_std_data input.txt
880f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
881f015e48aSBaptiste DaroussinH
882f015e48aSBaptiste Daroussinr input.txt
883f015e48aSBaptiste Daroussinw !cat >\!.z
884f015e48aSBaptiste Daroussinr \!.z
885f015e48aSBaptiste Daroussinw output.txt
886f015e48aSBaptiste DaroussinCMDS
887f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
888f015e48aSBaptiste Daroussinline 1
889f015e48aSBaptiste Daroussinline 2
890f015e48aSBaptiste Daroussinline 3
891f015e48aSBaptiste Daroussinline 4
892f015e48aSBaptiste Daroussinline5
893f015e48aSBaptiste Daroussinline 1
894f015e48aSBaptiste Daroussinline 2
895f015e48aSBaptiste Daroussinline 3
896f015e48aSBaptiste Daroussinline 4
897f015e48aSBaptiste Daroussinline5
898f015e48aSBaptiste DaroussinEOF
899f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
900f015e48aSBaptiste Daroussin}
901f015e48aSBaptiste Daroussin
902f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
903f015e48aSBaptiste Daroussin# Quit (q)
904f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
905f015e48aSBaptiste Daroussinatf_test_case quit
906f015e48aSBaptiste Daroussinquit_head()
907f015e48aSBaptiste Daroussin{
908f015e48aSBaptiste Daroussin	atf_set "descr" "Test quit command (q)";
909f015e48aSBaptiste Daroussin}
910f015e48aSBaptiste Daroussinquit_body()
911f015e48aSBaptiste Daroussin{
912f015e48aSBaptiste Daroussin
913f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
914f015e48aSBaptiste DaroussinH
915f015e48aSBaptiste Daroussinw output.txt
916f015e48aSBaptiste Daroussina
917f015e48aSBaptiste Daroussinhello
918f015e48aSBaptiste Daroussin.
919f015e48aSBaptiste Daroussinq
920f015e48aSBaptiste DaroussinCMDS
921f015e48aSBaptiste Daroussin	atf_check -s exit:0 test ! -s output.txt
922f015e48aSBaptiste Daroussin}
923f015e48aSBaptiste Daroussin
924f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
925f015e48aSBaptiste Daroussin# Shell command (!)
926f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
927f015e48aSBaptiste Daroussinatf_test_case shell_command
928f015e48aSBaptiste Daroussinshell_command_head()
929f015e48aSBaptiste Daroussin{
930f015e48aSBaptiste Daroussin	atf_set "descr" "Test shell command execution (!)";
931f015e48aSBaptiste Daroussin}
932f015e48aSBaptiste Daroussinshell_command_body()
933f015e48aSBaptiste Daroussin{
934f015e48aSBaptiste Daroussin
935f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
936f015e48aSBaptiste DaroussinH
937f015e48aSBaptiste Daroussin!read one
938f015e48aSBaptiste Daroussinhello, world
939f015e48aSBaptiste Daroussina
940f015e48aSBaptiste Daroussinokay
941f015e48aSBaptiste Daroussin.
942f015e48aSBaptiste Daroussinw output.txt
943f015e48aSBaptiste DaroussinCMDS
944f015e48aSBaptiste Daroussin	printf 'okay\n' > expected.txt
945f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
946f015e48aSBaptiste Daroussin}
947f015e48aSBaptiste Daroussin
948f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
949f015e48aSBaptiste Daroussin# Newline handling (nl)
950f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
951f015e48aSBaptiste Daroussinatf_test_case newline_insert
952f015e48aSBaptiste Daroussinnewline_insert_head()
953f015e48aSBaptiste Daroussin{
954f015e48aSBaptiste Daroussin	atf_set "descr" "Test inserting blank lines";
955f015e48aSBaptiste Daroussin}
956f015e48aSBaptiste Daroussinnewline_insert_body()
957f015e48aSBaptiste Daroussin{
958f015e48aSBaptiste Daroussin
959f015e48aSBaptiste Daroussin	create_std_data input.txt
960f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
961f015e48aSBaptiste DaroussinH
962f015e48aSBaptiste Daroussinr input.txt
963f015e48aSBaptiste Daroussin1
964f015e48aSBaptiste Daroussin
965f015e48aSBaptiste Daroussin
966f015e48aSBaptiste Daroussin0a
967f015e48aSBaptiste Daroussin
968f015e48aSBaptiste Daroussin
969f015e48aSBaptiste Daroussinhello world
970f015e48aSBaptiste Daroussin.
971f015e48aSBaptiste Daroussinw output.txt
972f015e48aSBaptiste DaroussinCMDS
973f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
974f015e48aSBaptiste Daroussin
975f015e48aSBaptiste Daroussin
976f015e48aSBaptiste Daroussinhello world
977f015e48aSBaptiste Daroussinline 1
978f015e48aSBaptiste Daroussinline 2
979f015e48aSBaptiste Daroussinline 3
980f015e48aSBaptiste Daroussinline 4
981f015e48aSBaptiste Daroussinline5
982f015e48aSBaptiste DaroussinEOF
983f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
984f015e48aSBaptiste Daroussin}
985f015e48aSBaptiste Daroussin
986f015e48aSBaptiste Daroussinatf_test_case newline_search
987f015e48aSBaptiste Daroussinnewline_search_head()
988f015e48aSBaptiste Daroussin{
989f015e48aSBaptiste Daroussin	atf_set "descr" "Test address search with semicolon";
990f015e48aSBaptiste Daroussin}
991f015e48aSBaptiste Daroussinnewline_search_body()
992f015e48aSBaptiste Daroussin{
993f015e48aSBaptiste Daroussin
994f015e48aSBaptiste Daroussin	create_std_data input.txt
995f015e48aSBaptiste Daroussin	ed -s - <<'CMDS'
996f015e48aSBaptiste DaroussinH
997f015e48aSBaptiste Daroussinr input.txt
998f015e48aSBaptiste Daroussina
999f015e48aSBaptiste Daroussinhello world
1000f015e48aSBaptiste Daroussin.
1001f015e48aSBaptiste Daroussin0;/./
1002f015e48aSBaptiste Daroussinw output.txt
1003f015e48aSBaptiste DaroussinCMDS
1004f015e48aSBaptiste Daroussin	cat > expected.txt <<'EOF'
1005f015e48aSBaptiste Daroussinline 1
1006f015e48aSBaptiste Daroussinline 2
1007f015e48aSBaptiste Daroussinline 3
1008f015e48aSBaptiste Daroussinline 4
1009f015e48aSBaptiste Daroussinline5
1010f015e48aSBaptiste Daroussinhello world
1011f015e48aSBaptiste DaroussinEOF
1012f015e48aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1013f015e48aSBaptiste Daroussin}
1014f015e48aSBaptiste Daroussin
1015f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
1016f015e48aSBaptiste Daroussin# Error tests
1017f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
1018f015e48aSBaptiste Daroussinatf_test_case err_append_suffix
1019f015e48aSBaptiste Daroussinerr_append_suffix_head()
1020f015e48aSBaptiste Daroussin{
1021f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid append suffix (aa)";
1022f015e48aSBaptiste Daroussin}
1023f015e48aSBaptiste Daroussinerr_append_suffix_body()
1024f015e48aSBaptiste Daroussin{
1025f015e48aSBaptiste Daroussin
1026f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1027f015e48aSBaptiste DaroussinH
1028f015e48aSBaptiste Daroussinaa
1029f015e48aSBaptiste Daroussinhello world
1030f015e48aSBaptiste Daroussin.
1031f015e48aSBaptiste DaroussinCMDS
1032f015e48aSBaptiste Daroussin}
1033f015e48aSBaptiste Daroussin
1034f015e48aSBaptiste Daroussinatf_test_case err_addr_out_of_range
1035f015e48aSBaptiste Daroussinerr_addr_out_of_range_head()
1036f015e48aSBaptiste Daroussin{
1037f015e48aSBaptiste Daroussin	atf_set "descr" "Error: address out of range";
1038f015e48aSBaptiste Daroussin}
1039f015e48aSBaptiste Daroussinerr_addr_out_of_range_body()
1040f015e48aSBaptiste Daroussin{
1041f015e48aSBaptiste Daroussin
1042f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1043f015e48aSBaptiste DaroussinH
1044f015e48aSBaptiste Daroussin100
1045f015e48aSBaptiste DaroussinCMDS
1046f015e48aSBaptiste Daroussin}
1047f015e48aSBaptiste Daroussin
1048f015e48aSBaptiste Daroussinatf_test_case err_addr_negative
1049f015e48aSBaptiste Daroussinerr_addr_negative_head()
1050f015e48aSBaptiste Daroussin{
1051f015e48aSBaptiste Daroussin	atf_set "descr" "Error: negative address";
1052f015e48aSBaptiste Daroussin}
1053f015e48aSBaptiste Daroussinerr_addr_negative_body()
1054f015e48aSBaptiste Daroussin{
1055f015e48aSBaptiste Daroussin
1056f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1057f015e48aSBaptiste DaroussinH
1058f015e48aSBaptiste Daroussin-100
1059f015e48aSBaptiste DaroussinCMDS
1060f015e48aSBaptiste Daroussin}
1061f015e48aSBaptiste Daroussin
1062f015e48aSBaptiste Daroussinatf_test_case err_bang_addr
1063f015e48aSBaptiste Daroussinerr_bang_addr_head()
1064f015e48aSBaptiste Daroussin{
1065f015e48aSBaptiste Daroussin	atf_set "descr" "Error: shell command with address";
1066f015e48aSBaptiste Daroussin}
1067f015e48aSBaptiste Daroussinerr_bang_addr_body()
1068f015e48aSBaptiste Daroussin{
1069f015e48aSBaptiste Daroussin
1070f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1071f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1072f015e48aSBaptiste DaroussinH
1073f015e48aSBaptiste Daroussinr input.txt
1074f015e48aSBaptiste Daroussin.!date
1075f015e48aSBaptiste DaroussinCMDS
1076f015e48aSBaptiste Daroussin}
1077f015e48aSBaptiste Daroussin
1078f015e48aSBaptiste Daroussinatf_test_case err_bang_double
1079f015e48aSBaptiste Daroussinerr_bang_double_head()
1080f015e48aSBaptiste Daroussin{
1081f015e48aSBaptiste Daroussin	atf_set "descr" "Error: double bang without previous command";
1082f015e48aSBaptiste Daroussin}
1083f015e48aSBaptiste Daroussinerr_bang_double_body()
1084f015e48aSBaptiste Daroussin{
1085f015e48aSBaptiste Daroussin
1086f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1087f015e48aSBaptiste DaroussinH
1088f015e48aSBaptiste Daroussin!!
1089f015e48aSBaptiste DaroussinCMDS
1090f015e48aSBaptiste Daroussin}
1091f015e48aSBaptiste Daroussin
1092f015e48aSBaptiste Daroussinatf_test_case err_change_suffix
1093f015e48aSBaptiste Daroussinerr_change_suffix_head()
1094f015e48aSBaptiste Daroussin{
1095f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid change suffix (cc)";
1096f015e48aSBaptiste Daroussin}
1097f015e48aSBaptiste Daroussinerr_change_suffix_body()
1098f015e48aSBaptiste Daroussin{
1099f015e48aSBaptiste Daroussin
1100f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1101f015e48aSBaptiste DaroussinH
1102f015e48aSBaptiste Daroussincc
1103f015e48aSBaptiste Daroussinhello world
1104f015e48aSBaptiste Daroussin.
1105f015e48aSBaptiste DaroussinCMDS
1106f015e48aSBaptiste Daroussin}
1107f015e48aSBaptiste Daroussin
1108f015e48aSBaptiste Daroussinatf_test_case err_change_zero
1109f015e48aSBaptiste Daroussinerr_change_zero_head()
1110f015e48aSBaptiste Daroussin{
1111f015e48aSBaptiste Daroussin	atf_set "descr" "Error: change at line 0";
1112f015e48aSBaptiste Daroussin}
1113f015e48aSBaptiste Daroussinerr_change_zero_body()
1114f015e48aSBaptiste Daroussin{
1115f015e48aSBaptiste Daroussin
1116f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1117f015e48aSBaptiste DaroussinH
1118f015e48aSBaptiste Daroussin0c
1119f015e48aSBaptiste Daroussinhello world
1120f015e48aSBaptiste Daroussin.
1121f015e48aSBaptiste DaroussinCMDS
1122f015e48aSBaptiste Daroussin}
1123f015e48aSBaptiste Daroussin
1124f015e48aSBaptiste Daroussinatf_test_case err_delete_suffix
1125f015e48aSBaptiste Daroussinerr_delete_suffix_head()
1126f015e48aSBaptiste Daroussin{
1127f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid delete suffix (dd)";
1128f015e48aSBaptiste Daroussin}
1129f015e48aSBaptiste Daroussinerr_delete_suffix_body()
1130f015e48aSBaptiste Daroussin{
1131f015e48aSBaptiste Daroussin
1132f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1133f015e48aSBaptiste DaroussinH
1134f015e48aSBaptiste Daroussindd
1135f015e48aSBaptiste DaroussinCMDS
1136f015e48aSBaptiste Daroussin}
1137f015e48aSBaptiste Daroussin
1138f015e48aSBaptiste Daroussinatf_test_case err_edit_suffix
1139f015e48aSBaptiste Daroussinerr_edit_suffix_head()
1140f015e48aSBaptiste Daroussin{
1141f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid edit suffix (ee)";
1142f015e48aSBaptiste Daroussin}
1143f015e48aSBaptiste Daroussinerr_edit_suffix_body()
1144f015e48aSBaptiste Daroussin{
1145f015e48aSBaptiste Daroussin
1146f015e48aSBaptiste Daroussin	printf 'test\n' > e1.err
1147f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1148f015e48aSBaptiste DaroussinH
1149f015e48aSBaptiste Daroussinee e1.err
1150f015e48aSBaptiste DaroussinCMDS
1151f015e48aSBaptiste Daroussin}
1152f015e48aSBaptiste Daroussin
1153f015e48aSBaptiste Daroussinatf_test_case err_edit_addr
1154f015e48aSBaptiste Daroussinerr_edit_addr_head()
1155f015e48aSBaptiste Daroussin{
1156f015e48aSBaptiste Daroussin	atf_set "descr" "Error: edit with address";
1157f015e48aSBaptiste Daroussin}
1158f015e48aSBaptiste Daroussinerr_edit_addr_body()
1159f015e48aSBaptiste Daroussin{
1160f015e48aSBaptiste Daroussin
1161f015e48aSBaptiste Daroussin	printf 'test\n' > e2.err
1162f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1163f015e48aSBaptiste DaroussinH
1164f015e48aSBaptiste Daroussinr e2.err
1165f015e48aSBaptiste Daroussin.e e2.err
1166f015e48aSBaptiste DaroussinCMDS
1167f015e48aSBaptiste Daroussin}
1168f015e48aSBaptiste Daroussin
1169f015e48aSBaptiste Daroussinatf_test_case err_edit_nosuffix
1170f015e48aSBaptiste Daroussinerr_edit_nosuffix_head()
1171f015e48aSBaptiste Daroussin{
1172f015e48aSBaptiste Daroussin	atf_set "descr" "Error: edit without space before filename";
1173f015e48aSBaptiste Daroussin}
1174f015e48aSBaptiste Daroussinerr_edit_nosuffix_body()
1175f015e48aSBaptiste Daroussin{
1176f015e48aSBaptiste Daroussin
1177f015e48aSBaptiste Daroussin	printf 'test\n' > ee.err
1178f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1179f015e48aSBaptiste DaroussinH
1180f015e48aSBaptiste Daroussinee.err
1181f015e48aSBaptiste DaroussinCMDS
1182f015e48aSBaptiste Daroussin}
1183f015e48aSBaptiste Daroussin
1184f015e48aSBaptiste Daroussinatf_test_case err_file_addr
1185f015e48aSBaptiste Daroussinerr_file_addr_head()
1186f015e48aSBaptiste Daroussin{
1187f015e48aSBaptiste Daroussin	atf_set "descr" "Error: file command with address";
1188f015e48aSBaptiste Daroussin}
1189f015e48aSBaptiste Daroussinerr_file_addr_body()
1190f015e48aSBaptiste Daroussin{
1191f015e48aSBaptiste Daroussin
1192f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1193f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1194f015e48aSBaptiste DaroussinH
1195f015e48aSBaptiste Daroussinr input.txt
1196f015e48aSBaptiste Daroussin.f f1.err
1197f015e48aSBaptiste DaroussinCMDS
1198f015e48aSBaptiste Daroussin}
1199f015e48aSBaptiste Daroussin
1200f015e48aSBaptiste Daroussinatf_test_case err_file_suffix
1201f015e48aSBaptiste Daroussinerr_file_suffix_head()
1202f015e48aSBaptiste Daroussin{
1203f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid file suffix";
1204f015e48aSBaptiste Daroussin}
1205f015e48aSBaptiste Daroussinerr_file_suffix_body()
1206f015e48aSBaptiste Daroussin{
1207f015e48aSBaptiste Daroussin
1208f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1209f015e48aSBaptiste DaroussinH
1210f015e48aSBaptiste Daroussinff1.err
1211f015e48aSBaptiste DaroussinCMDS
1212f015e48aSBaptiste Daroussin}
1213f015e48aSBaptiste Daroussin
1214f015e48aSBaptiste Daroussinatf_test_case err_global_delim
1215f015e48aSBaptiste Daroussinerr_global_delim_head()
1216f015e48aSBaptiste Daroussin{
1217f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid pattern delimiter in global";
1218f015e48aSBaptiste Daroussin}
1219f015e48aSBaptiste Daroussinerr_global_delim_body()
1220f015e48aSBaptiste Daroussin{
1221f015e48aSBaptiste Daroussin
1222f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1223f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1224f015e48aSBaptiste DaroussinH
1225f015e48aSBaptiste Daroussinr input.txt
1226f015e48aSBaptiste Daroussing/./s //x/
1227f015e48aSBaptiste DaroussinCMDS
1228f015e48aSBaptiste Daroussin}
1229f015e48aSBaptiste Daroussin
1230f015e48aSBaptiste Daroussinatf_test_case err_global_empty
1231f015e48aSBaptiste Daroussinerr_global_empty_head()
1232f015e48aSBaptiste Daroussin{
1233f015e48aSBaptiste Daroussin	atf_set "descr" "Error: empty pattern in global";
1234f015e48aSBaptiste Daroussin}
1235f015e48aSBaptiste Daroussinerr_global_empty_body()
1236f015e48aSBaptiste Daroussin{
1237f015e48aSBaptiste Daroussin
1238f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1239f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1240f015e48aSBaptiste DaroussinH
1241f015e48aSBaptiste Daroussinr input.txt
1242f015e48aSBaptiste Daroussing//s/./x/
1243f015e48aSBaptiste DaroussinCMDS
1244f015e48aSBaptiste Daroussin}
1245f015e48aSBaptiste Daroussin
1246f015e48aSBaptiste Daroussinatf_test_case err_global_incomplete
1247f015e48aSBaptiste Daroussinerr_global_incomplete_head()
1248f015e48aSBaptiste Daroussin{
1249f015e48aSBaptiste Daroussin	atf_set "descr" "Error: incomplete global command";
1250f015e48aSBaptiste Daroussin}
1251f015e48aSBaptiste Daroussinerr_global_incomplete_body()
1252f015e48aSBaptiste Daroussin{
1253f015e48aSBaptiste Daroussin
1254f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1255f015e48aSBaptiste DaroussinH
1256f015e48aSBaptiste Daroussing
1257f015e48aSBaptiste DaroussinCMDS
1258f015e48aSBaptiste Daroussin}
1259f015e48aSBaptiste Daroussin
1260f015e48aSBaptiste Daroussinatf_test_case err_help_addr
1261f015e48aSBaptiste Daroussinerr_help_addr_head()
1262f015e48aSBaptiste Daroussin{
1263f015e48aSBaptiste Daroussin	atf_set "descr" "Error: help with address";
1264f015e48aSBaptiste Daroussin}
1265f015e48aSBaptiste Daroussinerr_help_addr_body()
1266f015e48aSBaptiste Daroussin{
1267f015e48aSBaptiste Daroussin
1268f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1269f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1270f015e48aSBaptiste DaroussinH
1271f015e48aSBaptiste Daroussinr input.txt
1272f015e48aSBaptiste Daroussin.h
1273f015e48aSBaptiste DaroussinCMDS
1274f015e48aSBaptiste Daroussin}
1275f015e48aSBaptiste Daroussin
1276f015e48aSBaptiste Daroussinatf_test_case err_insert_suffix
1277f015e48aSBaptiste Daroussinerr_insert_suffix_head()
1278f015e48aSBaptiste Daroussin{
1279f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid insert suffix (ii)";
1280f015e48aSBaptiste Daroussin}
1281f015e48aSBaptiste Daroussinerr_insert_suffix_body()
1282f015e48aSBaptiste Daroussin{
1283f015e48aSBaptiste Daroussin
1284f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1285f015e48aSBaptiste DaroussinH
1286f015e48aSBaptiste Daroussinii
1287f015e48aSBaptiste Daroussinhello world
1288f015e48aSBaptiste Daroussin.
1289f015e48aSBaptiste DaroussinCMDS
1290f015e48aSBaptiste Daroussin}
1291f015e48aSBaptiste Daroussin
1292f015e48aSBaptiste Daroussinatf_test_case err_insert_zero
1293f015e48aSBaptiste Daroussinerr_insert_zero_head()
1294f015e48aSBaptiste Daroussin{
1295f015e48aSBaptiste Daroussin	atf_set "descr" "Error: insert at line 0";
1296f015e48aSBaptiste Daroussin}
1297f015e48aSBaptiste Daroussinerr_insert_zero_body()
1298f015e48aSBaptiste Daroussin{
1299f015e48aSBaptiste Daroussin
1300f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1301f015e48aSBaptiste DaroussinH
1302f015e48aSBaptiste Daroussin0i
1303f015e48aSBaptiste Daroussinhello world
1304f015e48aSBaptiste Daroussin.
1305f015e48aSBaptiste DaroussinCMDS
1306f015e48aSBaptiste Daroussin}
1307f015e48aSBaptiste Daroussin
1308f015e48aSBaptiste Daroussinatf_test_case err_mark_upper
1309f015e48aSBaptiste Daroussinerr_mark_upper_head()
1310f015e48aSBaptiste Daroussin{
1311f015e48aSBaptiste Daroussin	atf_set "descr" "Error: mark with uppercase letter";
1312f015e48aSBaptiste Daroussin}
1313f015e48aSBaptiste Daroussinerr_mark_upper_body()
1314f015e48aSBaptiste Daroussin{
1315f015e48aSBaptiste Daroussin
1316f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1317f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1318f015e48aSBaptiste DaroussinH
1319f015e48aSBaptiste Daroussinr input.txt
1320f015e48aSBaptiste DaroussinkA
1321f015e48aSBaptiste DaroussinCMDS
1322f015e48aSBaptiste Daroussin}
1323f015e48aSBaptiste Daroussin
1324f015e48aSBaptiste Daroussinatf_test_case err_mark_zero
1325f015e48aSBaptiste Daroussinerr_mark_zero_head()
1326f015e48aSBaptiste Daroussin{
1327f015e48aSBaptiste Daroussin	atf_set "descr" "Error: mark at line 0";
1328f015e48aSBaptiste Daroussin}
1329f015e48aSBaptiste Daroussinerr_mark_zero_body()
1330f015e48aSBaptiste Daroussin{
1331f015e48aSBaptiste Daroussin
1332f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1333f015e48aSBaptiste DaroussinH
1334f015e48aSBaptiste Daroussin0ka
1335f015e48aSBaptiste DaroussinCMDS
1336f015e48aSBaptiste Daroussin}
1337f015e48aSBaptiste Daroussin
1338f015e48aSBaptiste Daroussinatf_test_case err_mark_ref
1339f015e48aSBaptiste Daroussinerr_mark_ref_head()
1340f015e48aSBaptiste Daroussin{
1341f015e48aSBaptiste Daroussin	atf_set "descr" "Error: reference to deleted mark";
1342f015e48aSBaptiste Daroussin}
1343f015e48aSBaptiste Daroussinerr_mark_ref_body()
1344f015e48aSBaptiste Daroussin{
1345f015e48aSBaptiste Daroussin
1346f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1347f015e48aSBaptiste DaroussinH
1348f015e48aSBaptiste Daroussina
1349f015e48aSBaptiste Daroussinhello
1350f015e48aSBaptiste Daroussin.
1351f015e48aSBaptiste Daroussin.ka
1352f015e48aSBaptiste Daroussin'ad
1353f015e48aSBaptiste Daroussin'ap
1354f015e48aSBaptiste DaroussinCMDS
1355f015e48aSBaptiste Daroussin}
1356f015e48aSBaptiste Daroussin
1357f015e48aSBaptiste Daroussinatf_test_case err_move_dest
1358f015e48aSBaptiste Daroussinerr_move_dest_head()
1359f015e48aSBaptiste Daroussin{
1360f015e48aSBaptiste Daroussin	atf_set "descr" "Error: move to own range";
1361f015e48aSBaptiste Daroussin}
1362f015e48aSBaptiste Daroussinerr_move_dest_body()
1363f015e48aSBaptiste Daroussin{
1364f015e48aSBaptiste Daroussin
1365f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1366f015e48aSBaptiste DaroussinH
1367f015e48aSBaptiste Daroussina
1368f015e48aSBaptiste Daroussinhello
1369f015e48aSBaptiste Daroussinworld
1370f015e48aSBaptiste Daroussin.
1371f015e48aSBaptiste Daroussin1,$m1
1372f015e48aSBaptiste DaroussinCMDS
1373f015e48aSBaptiste Daroussin}
1374f015e48aSBaptiste Daroussin
1375f015e48aSBaptiste Daroussinatf_test_case err_quit_addr
1376f015e48aSBaptiste Daroussinerr_quit_addr_head()
1377f015e48aSBaptiste Daroussin{
1378f015e48aSBaptiste Daroussin	atf_set "descr" "Error: quit with address";
1379f015e48aSBaptiste Daroussin}
1380f015e48aSBaptiste Daroussinerr_quit_addr_body()
1381f015e48aSBaptiste Daroussin{
1382f015e48aSBaptiste Daroussin
1383f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1384f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1385f015e48aSBaptiste DaroussinH
1386f015e48aSBaptiste Daroussinr input.txt
1387f015e48aSBaptiste Daroussin.q
1388f015e48aSBaptiste DaroussinCMDS
1389f015e48aSBaptiste Daroussin}
1390f015e48aSBaptiste Daroussin
1391f015e48aSBaptiste Daroussinatf_test_case err_read_nofile
1392f015e48aSBaptiste Daroussinerr_read_nofile_head()
1393f015e48aSBaptiste Daroussin{
1394f015e48aSBaptiste Daroussin	atf_set "descr" "Error: read nonexistent file";
1395f015e48aSBaptiste Daroussin}
1396f015e48aSBaptiste Daroussinerr_read_nofile_body()
1397f015e48aSBaptiste Daroussin{
1398f015e48aSBaptiste Daroussin
1399f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1400f015e48aSBaptiste DaroussinH
1401f015e48aSBaptiste Daroussinr a-good-book
1402f015e48aSBaptiste DaroussinCMDS
1403f015e48aSBaptiste Daroussin}
1404f015e48aSBaptiste Daroussin
1405f015e48aSBaptiste Daroussinatf_test_case err_subst_delim
1406f015e48aSBaptiste Daroussinerr_subst_delim_head()
1407f015e48aSBaptiste Daroussin{
1408f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid substitute delimiter";
1409f015e48aSBaptiste Daroussin}
1410f015e48aSBaptiste Daroussinerr_subst_delim_body()
1411f015e48aSBaptiste Daroussin{
1412f015e48aSBaptiste Daroussin
1413f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1414f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1415f015e48aSBaptiste DaroussinH
1416f015e48aSBaptiste Daroussinr input.txt
1417f015e48aSBaptiste Daroussins . x
1418f015e48aSBaptiste DaroussinCMDS
1419f015e48aSBaptiste Daroussin}
1420f015e48aSBaptiste Daroussin
1421f015e48aSBaptiste Daroussinatf_test_case err_subst_infinite
1422f015e48aSBaptiste Daroussinerr_subst_infinite_head()
1423f015e48aSBaptiste Daroussin{
1424f015e48aSBaptiste Daroussin	atf_set "descr" "Error: infinite substitution loop";
1425f015e48aSBaptiste Daroussin}
1426f015e48aSBaptiste Daroussinerr_subst_infinite_body()
1427f015e48aSBaptiste Daroussin{
1428f015e48aSBaptiste Daroussin
1429f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1430f015e48aSBaptiste DaroussinH
1431f015e48aSBaptiste Daroussina
1432f015e48aSBaptiste Daroussina
1433f015e48aSBaptiste Daroussin.
1434f015e48aSBaptiste Daroussins/x*/a/g
1435f015e48aSBaptiste DaroussinCMDS
1436f015e48aSBaptiste Daroussin}
1437f015e48aSBaptiste Daroussin
1438f015e48aSBaptiste Daroussinatf_test_case err_subst_bracket
1439f015e48aSBaptiste Daroussinerr_subst_bracket_head()
1440f015e48aSBaptiste Daroussin{
1441f015e48aSBaptiste Daroussin	atf_set "descr" "Error: unbalanced brackets in substitute";
1442f015e48aSBaptiste Daroussin}
1443f015e48aSBaptiste Daroussinerr_subst_bracket_body()
1444f015e48aSBaptiste Daroussin{
1445f015e48aSBaptiste Daroussin
1446f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1447f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1448f015e48aSBaptiste DaroussinH
1449f015e48aSBaptiste Daroussinr input.txt
1450f015e48aSBaptiste Daroussins/[xyx/a/
1451f015e48aSBaptiste DaroussinCMDS
1452f015e48aSBaptiste Daroussin}
1453f015e48aSBaptiste Daroussin
1454f015e48aSBaptiste Daroussinatf_test_case err_subst_escape
1455f015e48aSBaptiste Daroussinerr_subst_escape_head()
1456f015e48aSBaptiste Daroussin{
1457f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid escape in substitute pattern";
1458f015e48aSBaptiste Daroussin}
1459f015e48aSBaptiste Daroussinerr_subst_escape_body()
1460f015e48aSBaptiste Daroussin{
1461f015e48aSBaptiste Daroussin
1462f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1463f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1464f015e48aSBaptiste DaroussinH
1465f015e48aSBaptiste Daroussinr input.txt
1466f015e48aSBaptiste Daroussins/\a\b\c/xyz/
1467f015e48aSBaptiste DaroussinCMDS
1468f015e48aSBaptiste Daroussin}
1469f015e48aSBaptiste Daroussin
1470f015e48aSBaptiste Daroussinatf_test_case err_subst_empty
1471f015e48aSBaptiste Daroussinerr_subst_empty_head()
1472f015e48aSBaptiste Daroussin{
1473f015e48aSBaptiste Daroussin	atf_set "descr" "Error: empty substitute pattern";
1474f015e48aSBaptiste Daroussin}
1475f015e48aSBaptiste Daroussinerr_subst_empty_body()
1476f015e48aSBaptiste Daroussin{
1477f015e48aSBaptiste Daroussin
1478f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1479f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1480f015e48aSBaptiste DaroussinH
1481f015e48aSBaptiste Daroussinr input.txt
1482f015e48aSBaptiste Daroussins//xyz/
1483f015e48aSBaptiste DaroussinCMDS
1484f015e48aSBaptiste Daroussin}
1485f015e48aSBaptiste Daroussin
1486f015e48aSBaptiste Daroussinatf_test_case err_subst_bare
1487f015e48aSBaptiste Daroussinerr_subst_bare_head()
1488f015e48aSBaptiste Daroussin{
1489f015e48aSBaptiste Daroussin	atf_set "descr" "Error: bare substitute without previous";
1490f015e48aSBaptiste Daroussin}
1491f015e48aSBaptiste Daroussinerr_subst_bare_body()
1492f015e48aSBaptiste Daroussin{
1493f015e48aSBaptiste Daroussin
1494f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1495f015e48aSBaptiste DaroussinH
1496f015e48aSBaptiste Daroussins
1497f015e48aSBaptiste DaroussinCMDS
1498f015e48aSBaptiste Daroussin}
1499f015e48aSBaptiste Daroussin
1500f015e48aSBaptiste Daroussinatf_test_case err_subst_sr
1501f015e48aSBaptiste Daroussinerr_subst_sr_head()
1502f015e48aSBaptiste Daroussin{
1503f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid sr suffix";
1504f015e48aSBaptiste Daroussin}
1505f015e48aSBaptiste Daroussinerr_subst_sr_body()
1506f015e48aSBaptiste Daroussin{
1507f015e48aSBaptiste Daroussin
1508f015e48aSBaptiste Daroussin	atf_check -s exit:2 -o ignore -e not-empty ed -s - <<'CMDS'
1509f015e48aSBaptiste DaroussinH
1510f015e48aSBaptiste Daroussina
1511f015e48aSBaptiste Daroussinhello world
1512f015e48aSBaptiste Daroussin.
1513f015e48aSBaptiste Daroussin/./
1514f015e48aSBaptiste Daroussinsr
1515f015e48aSBaptiste DaroussinCMDS
1516f015e48aSBaptiste Daroussin}
1517f015e48aSBaptiste Daroussin
1518f015e48aSBaptiste Daroussinatf_test_case err_subst_equiv
1519f015e48aSBaptiste Daroussinerr_subst_equiv_head()
1520f015e48aSBaptiste Daroussin{
1521f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid equivalence class in substitute";
1522f015e48aSBaptiste Daroussin}
1523f015e48aSBaptiste Daroussinerr_subst_equiv_body()
1524f015e48aSBaptiste Daroussin{
1525f015e48aSBaptiste Daroussin
1526f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1527f015e48aSBaptiste DaroussinH
1528f015e48aSBaptiste Daroussina
1529f015e48aSBaptiste Daroussinhello
1530f015e48aSBaptiste Daroussin.
1531f015e48aSBaptiste Daroussins/[h[=]/x/
1532f015e48aSBaptiste DaroussinCMDS
1533f015e48aSBaptiste Daroussin}
1534f015e48aSBaptiste Daroussin
1535f015e48aSBaptiste Daroussinatf_test_case err_subst_class
1536f015e48aSBaptiste Daroussinerr_subst_class_head()
1537f015e48aSBaptiste Daroussin{
1538f015e48aSBaptiste Daroussin	atf_set "descr" "Error: unterminated character class";
1539f015e48aSBaptiste Daroussin}
1540f015e48aSBaptiste Daroussinerr_subst_class_body()
1541f015e48aSBaptiste Daroussin{
1542f015e48aSBaptiste Daroussin
1543f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1544f015e48aSBaptiste DaroussinH
1545f015e48aSBaptiste Daroussina
1546f015e48aSBaptiste Daroussinhello
1547f015e48aSBaptiste Daroussin.
1548f015e48aSBaptiste Daroussins/[h[:]/x/
1549f015e48aSBaptiste DaroussinCMDS
1550f015e48aSBaptiste Daroussin}
1551f015e48aSBaptiste Daroussin
1552f015e48aSBaptiste Daroussinatf_test_case err_subst_collate
1553f015e48aSBaptiste Daroussinerr_subst_collate_head()
1554f015e48aSBaptiste Daroussin{
1555f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid collation class";
1556f015e48aSBaptiste Daroussin}
1557f015e48aSBaptiste Daroussinerr_subst_collate_body()
1558f015e48aSBaptiste Daroussin{
1559f015e48aSBaptiste Daroussin
1560f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1561f015e48aSBaptiste DaroussinH
1562f015e48aSBaptiste Daroussina
1563f015e48aSBaptiste Daroussinhello
1564f015e48aSBaptiste Daroussin.
1565f015e48aSBaptiste Daroussins/[h[.]/x/
1566f015e48aSBaptiste DaroussinCMDS
1567f015e48aSBaptiste Daroussin}
1568f015e48aSBaptiste Daroussin
1569f015e48aSBaptiste Daroussinatf_test_case err_transfer_suffix
1570f015e48aSBaptiste Daroussinerr_transfer_suffix_head()
1571f015e48aSBaptiste Daroussin{
1572f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid transfer suffix (tt)";
1573f015e48aSBaptiste Daroussin}
1574f015e48aSBaptiste Daroussinerr_transfer_suffix_body()
1575f015e48aSBaptiste Daroussin{
1576f015e48aSBaptiste Daroussin
1577f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1578f015e48aSBaptiste DaroussinH
1579f015e48aSBaptiste Daroussintt
1580f015e48aSBaptiste DaroussinCMDS
1581f015e48aSBaptiste Daroussin}
1582f015e48aSBaptiste Daroussin
1583f015e48aSBaptiste Daroussinatf_test_case err_transfer_addr
1584f015e48aSBaptiste Daroussinerr_transfer_addr_head()
1585f015e48aSBaptiste Daroussin{
1586f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid transfer address";
1587f015e48aSBaptiste Daroussin}
1588f015e48aSBaptiste Daroussinerr_transfer_addr_body()
1589f015e48aSBaptiste Daroussin{
1590f015e48aSBaptiste Daroussin
1591f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1592f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1593f015e48aSBaptiste DaroussinH
1594f015e48aSBaptiste Daroussinr input.txt
1595f015e48aSBaptiste Daroussint0;-1
1596f015e48aSBaptiste DaroussinCMDS
1597f015e48aSBaptiste Daroussin}
1598f015e48aSBaptiste Daroussin
1599f015e48aSBaptiste Daroussinatf_test_case err_undo_addr
1600f015e48aSBaptiste Daroussinerr_undo_addr_head()
1601f015e48aSBaptiste Daroussin{
1602f015e48aSBaptiste Daroussin	atf_set "descr" "Error: undo with address";
1603f015e48aSBaptiste Daroussin}
1604f015e48aSBaptiste Daroussinerr_undo_addr_body()
1605f015e48aSBaptiste Daroussin{
1606f015e48aSBaptiste Daroussin
1607f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1608f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1609f015e48aSBaptiste DaroussinH
1610f015e48aSBaptiste Daroussinr input.txt
1611f015e48aSBaptiste Daroussin.u
1612f015e48aSBaptiste DaroussinCMDS
1613f015e48aSBaptiste Daroussin}
1614f015e48aSBaptiste Daroussin
1615f015e48aSBaptiste Daroussinatf_test_case err_write_nopath
1616f015e48aSBaptiste Daroussinerr_write_nopath_head()
1617f015e48aSBaptiste Daroussin{
1618f015e48aSBaptiste Daroussin	atf_set "descr" "Error: write to invalid path";
1619f015e48aSBaptiste Daroussin}
1620f015e48aSBaptiste Daroussinerr_write_nopath_body()
1621f015e48aSBaptiste Daroussin{
1622f015e48aSBaptiste Daroussin
1623f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1624f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1625f015e48aSBaptiste DaroussinH
1626f015e48aSBaptiste Daroussinr input.txt
1627f015e48aSBaptiste Daroussinw /to/some/far-away/place
1628f015e48aSBaptiste DaroussinCMDS
1629f015e48aSBaptiste Daroussin}
1630f015e48aSBaptiste Daroussin
1631f015e48aSBaptiste Daroussinatf_test_case err_write_suffix
1632f015e48aSBaptiste Daroussinerr_write_suffix_head()
1633f015e48aSBaptiste Daroussin{
1634f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid write suffix (ww)";
1635f015e48aSBaptiste Daroussin}
1636f015e48aSBaptiste Daroussinerr_write_suffix_body()
1637f015e48aSBaptiste Daroussin{
1638f015e48aSBaptiste Daroussin
1639f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1640f015e48aSBaptiste DaroussinH
1641f015e48aSBaptiste Daroussinww.o
1642f015e48aSBaptiste DaroussinCMDS
1643f015e48aSBaptiste Daroussin}
1644f015e48aSBaptiste Daroussin
1645f015e48aSBaptiste Daroussinatf_test_case err_write_flags
1646f015e48aSBaptiste Daroussinerr_write_flags_head()
1647f015e48aSBaptiste Daroussin{
1648f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid write flags (wqp)";
1649f015e48aSBaptiste Daroussin}
1650f015e48aSBaptiste Daroussinerr_write_flags_body()
1651f015e48aSBaptiste Daroussin{
1652f015e48aSBaptiste Daroussin
1653f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1654f015e48aSBaptiste DaroussinH
1655f015e48aSBaptiste Daroussinwqp w.o
1656f015e48aSBaptiste DaroussinCMDS
1657f015e48aSBaptiste Daroussin}
1658f015e48aSBaptiste Daroussin
1659f015e48aSBaptiste Daroussinatf_test_case err_crypt_addr
1660f015e48aSBaptiste Daroussinerr_crypt_addr_head()
1661f015e48aSBaptiste Daroussin{
1662f015e48aSBaptiste Daroussin	atf_set "descr" "Error: crypt with address";
1663f015e48aSBaptiste Daroussin}
1664f015e48aSBaptiste Daroussinerr_crypt_addr_body()
1665f015e48aSBaptiste Daroussin{
1666f015e48aSBaptiste Daroussin
1667f015e48aSBaptiste Daroussin	printf 'test\n' > input.txt
1668f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1669f015e48aSBaptiste DaroussinH
1670f015e48aSBaptiste Daroussinr input.txt
1671f015e48aSBaptiste Daroussin.x
1672f015e48aSBaptiste DaroussinCMDS
1673f015e48aSBaptiste Daroussin}
1674f015e48aSBaptiste Daroussin
1675f015e48aSBaptiste Daroussinatf_test_case err_scroll
1676f015e48aSBaptiste Daroussinerr_scroll_head()
1677f015e48aSBaptiste Daroussin{
1678f015e48aSBaptiste Daroussin	atf_set "descr" "Error: invalid scroll command";
1679f015e48aSBaptiste Daroussin}
1680f015e48aSBaptiste Daroussinerr_scroll_body()
1681f015e48aSBaptiste Daroussin{
1682f015e48aSBaptiste Daroussin
1683f015e48aSBaptiste Daroussin	atf_check -s exit:2 -e not-empty ed -s - <<'CMDS'
1684f015e48aSBaptiste DaroussinH
1685f015e48aSBaptiste Daroussinz
1686f015e48aSBaptiste Daroussinz
1687f015e48aSBaptiste DaroussinCMDS
1688f015e48aSBaptiste Daroussin}
1689f015e48aSBaptiste Daroussin
1690f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
1691*7c2c2c2aSBaptiste Daroussin# Unicode support
1692*7c2c2c2aSBaptiste Daroussin# ---------------------------------------------------------------------------
1693*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_list_multibyte
1694*7c2c2c2aSBaptiste Daroussinunicode_list_multibyte_head()
1695*7c2c2c2aSBaptiste Daroussin{
1696*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "l command displays multibyte UTF-8 as-is";
1697*7c2c2c2aSBaptiste Daroussin}
1698*7c2c2c2aSBaptiste Daroussinunicode_list_multibyte_body()
1699*7c2c2c2aSBaptiste Daroussin{
1700*7c2c2c2aSBaptiste Daroussin
1701*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1702*7c2c2c2aSBaptiste Daroussin	printf 'café\n' > input.txt
1703*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'café$\n' ed -s - <<'CMDS'
1704*7c2c2c2aSBaptiste DaroussinH
1705*7c2c2c2aSBaptiste Daroussinr input.txt
1706*7c2c2c2aSBaptiste Daroussinl
1707*7c2c2c2aSBaptiste DaroussinQ
1708*7c2c2c2aSBaptiste DaroussinCMDS
1709*7c2c2c2aSBaptiste Daroussin}
1710*7c2c2c2aSBaptiste Daroussin
1711*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_list_cjk
1712*7c2c2c2aSBaptiste Daroussinunicode_list_cjk_head()
1713*7c2c2c2aSBaptiste Daroussin{
1714*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "l command displays CJK characters as-is";
1715*7c2c2c2aSBaptiste Daroussin}
1716*7c2c2c2aSBaptiste Daroussinunicode_list_cjk_body()
1717*7c2c2c2aSBaptiste Daroussin{
1718*7c2c2c2aSBaptiste Daroussin
1719*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1720*7c2c2c2aSBaptiste Daroussin	printf '日本語テスト\n' > input.txt
1721*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'日本語テスト$\n' ed -s - <<'CMDS'
1722*7c2c2c2aSBaptiste DaroussinH
1723*7c2c2c2aSBaptiste Daroussinr input.txt
1724*7c2c2c2aSBaptiste Daroussinl
1725*7c2c2c2aSBaptiste DaroussinQ
1726*7c2c2c2aSBaptiste DaroussinCMDS
1727*7c2c2c2aSBaptiste Daroussin}
1728*7c2c2c2aSBaptiste Daroussin
1729*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_list_mixed
1730*7c2c2c2aSBaptiste Daroussinunicode_list_mixed_head()
1731*7c2c2c2aSBaptiste Daroussin{
1732*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "l command displays mixed ASCII/UTF-8 correctly";
1733*7c2c2c2aSBaptiste Daroussin}
1734*7c2c2c2aSBaptiste Daroussinunicode_list_mixed_body()
1735*7c2c2c2aSBaptiste Daroussin{
1736*7c2c2c2aSBaptiste Daroussin
1737*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1738*7c2c2c2aSBaptiste Daroussin	printf 'hello café 世界\n' > input.txt
1739*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'hello café 世界$\n' ed -s - <<'CMDS'
1740*7c2c2c2aSBaptiste DaroussinH
1741*7c2c2c2aSBaptiste Daroussinr input.txt
1742*7c2c2c2aSBaptiste Daroussinl
1743*7c2c2c2aSBaptiste DaroussinQ
1744*7c2c2c2aSBaptiste DaroussinCMDS
1745*7c2c2c2aSBaptiste Daroussin}
1746*7c2c2c2aSBaptiste Daroussin
1747*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_list_invalid
1748*7c2c2c2aSBaptiste Daroussinunicode_list_invalid_head()
1749*7c2c2c2aSBaptiste Daroussin{
1750*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "l command escapes invalid UTF-8 as octal";
1751*7c2c2c2aSBaptiste Daroussin}
1752*7c2c2c2aSBaptiste Daroussinunicode_list_invalid_body()
1753*7c2c2c2aSBaptiste Daroussin{
1754*7c2c2c2aSBaptiste Daroussin
1755*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1756*7c2c2c2aSBaptiste Daroussin	printf '\200\201\376\377\n' > input.txt
1757*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'\\200\\201\\376\\377$\n' ed -s - <<'CMDS'
1758*7c2c2c2aSBaptiste DaroussinH
1759*7c2c2c2aSBaptiste Daroussinr input.txt
1760*7c2c2c2aSBaptiste Daroussinl
1761*7c2c2c2aSBaptiste DaroussinQ
1762*7c2c2c2aSBaptiste DaroussinCMDS
1763*7c2c2c2aSBaptiste Daroussin}
1764*7c2c2c2aSBaptiste Daroussin
1765*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_list_wrap_cjk
1766*7c2c2c2aSBaptiste Daroussinunicode_list_wrap_cjk_head()
1767*7c2c2c2aSBaptiste Daroussin{
1768*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "l command wraps correctly around double-width CJK";
1769*7c2c2c2aSBaptiste Daroussin}
1770*7c2c2c2aSBaptiste Daroussinunicode_list_wrap_cjk_body()
1771*7c2c2c2aSBaptiste Daroussin{
1772*7c2c2c2aSBaptiste Daroussin
1773*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1774*7c2c2c2aSBaptiste Daroussin	# 69 A's + 日本 (2 CJK chars): 69 + 2 = 71 cols for 日 (fits),
1775*7c2c2c2aSBaptiste Daroussin	# 71 + 2 = 73 for 本 (exceeds 72), so 本 wraps to next line.
1776*7c2c2c2aSBaptiste Daroussin	printf 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA日本\n' > input.txt
1777*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS' > output.txt
1778*7c2c2c2aSBaptiste DaroussinH
1779*7c2c2c2aSBaptiste Daroussinr input.txt
1780*7c2c2c2aSBaptiste Daroussinl
1781*7c2c2c2aSBaptiste DaroussinQ
1782*7c2c2c2aSBaptiste DaroussinCMDS
1783*7c2c2c2aSBaptiste Daroussin	printf 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA日\\\n本$\n' > expected.txt
1784*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1785*7c2c2c2aSBaptiste Daroussin}
1786*7c2c2c2aSBaptiste Daroussin
1787*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_print
1788*7c2c2c2aSBaptiste Daroussinunicode_print_head()
1789*7c2c2c2aSBaptiste Daroussin{
1790*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "p command passes through UTF-8 correctly";
1791*7c2c2c2aSBaptiste Daroussin}
1792*7c2c2c2aSBaptiste Daroussinunicode_print_body()
1793*7c2c2c2aSBaptiste Daroussin{
1794*7c2c2c2aSBaptiste Daroussin
1795*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1796*7c2c2c2aSBaptiste Daroussin	printf 'café 日本語\n' > input.txt
1797*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'café 日本語\n' ed -s - <<'CMDS'
1798*7c2c2c2aSBaptiste DaroussinH
1799*7c2c2c2aSBaptiste Daroussinr input.txt
1800*7c2c2c2aSBaptiste Daroussinp
1801*7c2c2c2aSBaptiste DaroussinQ
1802*7c2c2c2aSBaptiste DaroussinCMDS
1803*7c2c2c2aSBaptiste Daroussin}
1804*7c2c2c2aSBaptiste Daroussin
1805*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_number
1806*7c2c2c2aSBaptiste Daroussinunicode_number_head()
1807*7c2c2c2aSBaptiste Daroussin{
1808*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "n command displays line number with UTF-8";
1809*7c2c2c2aSBaptiste Daroussin}
1810*7c2c2c2aSBaptiste Daroussinunicode_number_body()
1811*7c2c2c2aSBaptiste Daroussin{
1812*7c2c2c2aSBaptiste Daroussin
1813*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1814*7c2c2c2aSBaptiste Daroussin	printf 'café 日本語\n' > input.txt
1815*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'1\tcafé 日本語\n' ed -s - <<'CMDS'
1816*7c2c2c2aSBaptiste DaroussinH
1817*7c2c2c2aSBaptiste Daroussinr input.txt
1818*7c2c2c2aSBaptiste Daroussinn
1819*7c2c2c2aSBaptiste DaroussinQ
1820*7c2c2c2aSBaptiste DaroussinCMDS
1821*7c2c2c2aSBaptiste Daroussin}
1822*7c2c2c2aSBaptiste Daroussin
1823*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_regex
1824*7c2c2c2aSBaptiste Daroussinunicode_regex_head()
1825*7c2c2c2aSBaptiste Daroussin{
1826*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Regex search matches UTF-8 characters";
1827*7c2c2c2aSBaptiste Daroussin}
1828*7c2c2c2aSBaptiste Daroussinunicode_regex_body()
1829*7c2c2c2aSBaptiste Daroussin{
1830*7c2c2c2aSBaptiste Daroussin
1831*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1832*7c2c2c2aSBaptiste Daroussin	printf 'café\ntest\nüber\n' > input.txt
1833*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'café\n' ed -s - <<'CMDS'
1834*7c2c2c2aSBaptiste DaroussinH
1835*7c2c2c2aSBaptiste Daroussinr input.txt
1836*7c2c2c2aSBaptiste Daroussing/é/p
1837*7c2c2c2aSBaptiste DaroussinQ
1838*7c2c2c2aSBaptiste DaroussinCMDS
1839*7c2c2c2aSBaptiste Daroussin}
1840*7c2c2c2aSBaptiste Daroussin
1841*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_regex_charclass
1842*7c2c2c2aSBaptiste Daroussinunicode_regex_charclass_head()
1843*7c2c2c2aSBaptiste Daroussin{
1844*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Regex character classes work with UTF-8";
1845*7c2c2c2aSBaptiste Daroussin}
1846*7c2c2c2aSBaptiste Daroussinunicode_regex_charclass_body()
1847*7c2c2c2aSBaptiste Daroussin{
1848*7c2c2c2aSBaptiste Daroussin
1849*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1850*7c2c2c2aSBaptiste Daroussin	printf 'café123\ntest456\n' > input.txt
1851*7c2c2c2aSBaptiste Daroussin	atf_check -o inline:'café123\n' ed -s - <<'CMDS'
1852*7c2c2c2aSBaptiste DaroussinH
1853*7c2c2c2aSBaptiste Daroussinr input.txt
1854*7c2c2c2aSBaptiste Daroussing/[[:alpha:]]*é/p
1855*7c2c2c2aSBaptiste DaroussinQ
1856*7c2c2c2aSBaptiste DaroussinCMDS
1857*7c2c2c2aSBaptiste Daroussin}
1858*7c2c2c2aSBaptiste Daroussin
1859*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_substitute
1860*7c2c2c2aSBaptiste Daroussinunicode_substitute_head()
1861*7c2c2c2aSBaptiste Daroussin{
1862*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Substitute replaces UTF-8 characters";
1863*7c2c2c2aSBaptiste Daroussin}
1864*7c2c2c2aSBaptiste Daroussinunicode_substitute_body()
1865*7c2c2c2aSBaptiste Daroussin{
1866*7c2c2c2aSBaptiste Daroussin
1867*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1868*7c2c2c2aSBaptiste Daroussin	printf 'café\n' > input.txt
1869*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS'
1870*7c2c2c2aSBaptiste DaroussinH
1871*7c2c2c2aSBaptiste Daroussinr input.txt
1872*7c2c2c2aSBaptiste Daroussins/é/e/
1873*7c2c2c2aSBaptiste Daroussinw output.txt
1874*7c2c2c2aSBaptiste DaroussinQ
1875*7c2c2c2aSBaptiste DaroussinCMDS
1876*7c2c2c2aSBaptiste Daroussin	printf 'cafe\n' > expected.txt
1877*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1878*7c2c2c2aSBaptiste Daroussin}
1879*7c2c2c2aSBaptiste Daroussin
1880*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_substitute_cjk
1881*7c2c2c2aSBaptiste Daroussinunicode_substitute_cjk_head()
1882*7c2c2c2aSBaptiste Daroussin{
1883*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Substitute replaces CJK characters";
1884*7c2c2c2aSBaptiste Daroussin}
1885*7c2c2c2aSBaptiste Daroussinunicode_substitute_cjk_body()
1886*7c2c2c2aSBaptiste Daroussin{
1887*7c2c2c2aSBaptiste Daroussin
1888*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1889*7c2c2c2aSBaptiste Daroussin	printf 'hello 世界\n' > input.txt
1890*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS'
1891*7c2c2c2aSBaptiste DaroussinH
1892*7c2c2c2aSBaptiste Daroussinr input.txt
1893*7c2c2c2aSBaptiste Daroussins/世界/world/
1894*7c2c2c2aSBaptiste Daroussinw output.txt
1895*7c2c2c2aSBaptiste DaroussinQ
1896*7c2c2c2aSBaptiste DaroussinCMDS
1897*7c2c2c2aSBaptiste Daroussin	printf 'hello world\n' > expected.txt
1898*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1899*7c2c2c2aSBaptiste Daroussin}
1900*7c2c2c2aSBaptiste Daroussin
1901*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_global_substitute
1902*7c2c2c2aSBaptiste Daroussinunicode_global_substitute_head()
1903*7c2c2c2aSBaptiste Daroussin{
1904*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Global substitute works with UTF-8";
1905*7c2c2c2aSBaptiste Daroussin}
1906*7c2c2c2aSBaptiste Daroussinunicode_global_substitute_body()
1907*7c2c2c2aSBaptiste Daroussin{
1908*7c2c2c2aSBaptiste Daroussin
1909*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1910*7c2c2c2aSBaptiste Daroussin	printf 'à la carte\nà bientôt\nhello\n' > input.txt
1911*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS'
1912*7c2c2c2aSBaptiste DaroussinH
1913*7c2c2c2aSBaptiste Daroussinr input.txt
1914*7c2c2c2aSBaptiste Daroussing/à/s/à/a/
1915*7c2c2c2aSBaptiste Daroussinw output.txt
1916*7c2c2c2aSBaptiste DaroussinQ
1917*7c2c2c2aSBaptiste DaroussinCMDS
1918*7c2c2c2aSBaptiste Daroussin	cat > expected.txt <<'EOF'
1919*7c2c2c2aSBaptiste Daroussina la carte
1920*7c2c2c2aSBaptiste Daroussina bientôt
1921*7c2c2c2aSBaptiste Daroussinhello
1922*7c2c2c2aSBaptiste DaroussinEOF
1923*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1924*7c2c2c2aSBaptiste Daroussin}
1925*7c2c2c2aSBaptiste Daroussin
1926*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_join
1927*7c2c2c2aSBaptiste Daroussinunicode_join_head()
1928*7c2c2c2aSBaptiste Daroussin{
1929*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Join preserves UTF-8 content";
1930*7c2c2c2aSBaptiste Daroussin}
1931*7c2c2c2aSBaptiste Daroussinunicode_join_body()
1932*7c2c2c2aSBaptiste Daroussin{
1933*7c2c2c2aSBaptiste Daroussin
1934*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1935*7c2c2c2aSBaptiste Daroussin	printf 'café\n世界\n' > input.txt
1936*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS'
1937*7c2c2c2aSBaptiste DaroussinH
1938*7c2c2c2aSBaptiste Daroussinr input.txt
1939*7c2c2c2aSBaptiste Daroussin1,2j
1940*7c2c2c2aSBaptiste Daroussinw output.txt
1941*7c2c2c2aSBaptiste DaroussinQ
1942*7c2c2c2aSBaptiste DaroussinCMDS
1943*7c2c2c2aSBaptiste Daroussin	printf 'café世界\n' > expected.txt
1944*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1945*7c2c2c2aSBaptiste Daroussin}
1946*7c2c2c2aSBaptiste Daroussin
1947*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_append
1948*7c2c2c2aSBaptiste Daroussinunicode_append_head()
1949*7c2c2c2aSBaptiste Daroussin{
1950*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Append preserves UTF-8 text";
1951*7c2c2c2aSBaptiste Daroussin}
1952*7c2c2c2aSBaptiste Daroussinunicode_append_body()
1953*7c2c2c2aSBaptiste Daroussin{
1954*7c2c2c2aSBaptiste Daroussin
1955*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1956*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS'
1957*7c2c2c2aSBaptiste DaroussinH
1958*7c2c2c2aSBaptiste Daroussina
1959*7c2c2c2aSBaptiste Daroussinpremière
1960*7c2c2c2aSBaptiste Daroussindeuxième
1961*7c2c2c2aSBaptiste Daroussin.
1962*7c2c2c2aSBaptiste Daroussinw output.txt
1963*7c2c2c2aSBaptiste DaroussinQ
1964*7c2c2c2aSBaptiste DaroussinCMDS
1965*7c2c2c2aSBaptiste Daroussin	cat > expected.txt <<'EOF'
1966*7c2c2c2aSBaptiste Daroussinpremière
1967*7c2c2c2aSBaptiste Daroussindeuxième
1968*7c2c2c2aSBaptiste DaroussinEOF
1969*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
1970*7c2c2c2aSBaptiste Daroussin}
1971*7c2c2c2aSBaptiste Daroussin
1972*7c2c2c2aSBaptiste Daroussinatf_test_case unicode_cyrillic
1973*7c2c2c2aSBaptiste Daroussinunicode_cyrillic_head()
1974*7c2c2c2aSBaptiste Daroussin{
1975*7c2c2c2aSBaptiste Daroussin	atf_set "descr" "Cyrillic: append, substitute, print, regex search";
1976*7c2c2c2aSBaptiste Daroussin}
1977*7c2c2c2aSBaptiste Daroussinunicode_cyrillic_body()
1978*7c2c2c2aSBaptiste Daroussin{
1979*7c2c2c2aSBaptiste Daroussin
1980*7c2c2c2aSBaptiste Daroussin	export LC_CTYPE=C.UTF-8
1981*7c2c2c2aSBaptiste Daroussin	ed -s - <<'CMDS' > output.txt
1982*7c2c2c2aSBaptiste DaroussinH
1983*7c2c2c2aSBaptiste Daroussina
1984*7c2c2c2aSBaptiste DaroussinПривет
1985*7c2c2c2aSBaptiste Daroussin.
1986*7c2c2c2aSBaptiste Daroussins/ривет/ока/
1987*7c2c2c2aSBaptiste Daroussin1p
1988*7c2c2c2aSBaptiste Daroussina
1989*7c2c2c2aSBaptiste DaroussinСтрока
1990*7c2c2c2aSBaptiste Daroussin.
1991*7c2c2c2aSBaptiste Daroussin1
1992*7c2c2c2aSBaptiste Daroussin/а/p
1993*7c2c2c2aSBaptiste Daroussin1,$p
1994*7c2c2c2aSBaptiste DaroussinQ
1995*7c2c2c2aSBaptiste DaroussinCMDS
1996*7c2c2c2aSBaptiste Daroussin	cat > expected.txt <<'EOF'
1997*7c2c2c2aSBaptiste DaroussinПока
1998*7c2c2c2aSBaptiste DaroussinПока
1999*7c2c2c2aSBaptiste DaroussinСтрока
2000*7c2c2c2aSBaptiste DaroussinПока
2001*7c2c2c2aSBaptiste DaroussinСтрока
2002*7c2c2c2aSBaptiste DaroussinEOF
2003*7c2c2c2aSBaptiste Daroussin	atf_check cmp output.txt expected.txt
2004*7c2c2c2aSBaptiste Daroussin}
2005*7c2c2c2aSBaptiste Daroussin
2006*7c2c2c2aSBaptiste Daroussin# ---------------------------------------------------------------------------
2007f015e48aSBaptiste Daroussin# Registration
2008f015e48aSBaptiste Daroussin# ---------------------------------------------------------------------------
2009f015e48aSBaptiste Daroussinatf_init_test_cases()
2010f015e48aSBaptiste Daroussin{
2011f015e48aSBaptiste Daroussin
2012f015e48aSBaptiste Daroussin	# Basic commands
2013f015e48aSBaptiste Daroussin	atf_add_test_case append
2014f015e48aSBaptiste Daroussin	atf_add_test_case address
2015f015e48aSBaptiste Daroussin	atf_add_test_case change
2016f015e48aSBaptiste Daroussin	atf_add_test_case delete
2017f015e48aSBaptiste Daroussin	atf_add_test_case insert
2018f015e48aSBaptiste Daroussin	atf_add_test_case join
2019f015e48aSBaptiste Daroussin	atf_add_test_case mark
2020f015e48aSBaptiste Daroussin	atf_add_test_case move
2021f015e48aSBaptiste Daroussin	atf_add_test_case transfer
2022f015e48aSBaptiste Daroussin	atf_add_test_case transfer_search
2023f015e48aSBaptiste Daroussin	atf_add_test_case undo
2024f015e48aSBaptiste Daroussin
2025f015e48aSBaptiste Daroussin	# Global commands
2026f015e48aSBaptiste Daroussin	atf_add_test_case global_move
2027f015e48aSBaptiste Daroussin	atf_add_test_case global_change
2028f015e48aSBaptiste Daroussin	atf_add_test_case global_substitute
2029f015e48aSBaptiste Daroussin	atf_add_test_case global_undo
2030f015e48aSBaptiste Daroussin	atf_add_test_case global_copy
2031f015e48aSBaptiste Daroussin	atf_add_test_case inverse_global
2032f015e48aSBaptiste Daroussin
2033f015e48aSBaptiste Daroussin	# Substitution
2034f015e48aSBaptiste Daroussin	atf_add_test_case subst_backreference
2035f015e48aSBaptiste Daroussin	atf_add_test_case subst_range
2036f015e48aSBaptiste Daroussin	atf_add_test_case subst_charclass
2037f015e48aSBaptiste Daroussin
2038f015e48aSBaptiste Daroussin	# File operations
2039f015e48aSBaptiste Daroussin	atf_add_test_case edit_file
2040f015e48aSBaptiste Daroussin	atf_add_test_case edit_command
2041f015e48aSBaptiste Daroussin	atf_add_test_case edit_reread
2042f015e48aSBaptiste Daroussin	atf_add_test_case edit_lowercase
2043f015e48aSBaptiste Daroussin	atf_add_test_case read_command
2044f015e48aSBaptiste Daroussin	atf_add_test_case read_default
2045f015e48aSBaptiste Daroussin	atf_add_test_case read_file
2046f015e48aSBaptiste Daroussin	atf_add_test_case write_pipe
2047f015e48aSBaptiste Daroussin	atf_add_test_case quit
2048f015e48aSBaptiste Daroussin	atf_add_test_case shell_command
2049f015e48aSBaptiste Daroussin
2050f015e48aSBaptiste Daroussin	# Newline handling
2051f015e48aSBaptiste Daroussin	atf_add_test_case newline_insert
2052f015e48aSBaptiste Daroussin	atf_add_test_case newline_search
2053f015e48aSBaptiste Daroussin
2054*7c2c2c2aSBaptiste Daroussin	# Unicode support
2055*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_list_multibyte
2056*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_list_cjk
2057*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_list_mixed
2058*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_list_invalid
2059*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_list_wrap_cjk
2060*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_print
2061*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_number
2062*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_regex
2063*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_regex_charclass
2064*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_substitute
2065*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_substitute_cjk
2066*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_global_substitute
2067*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_join
2068*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_append
2069*7c2c2c2aSBaptiste Daroussin	atf_add_test_case unicode_cyrillic
2070*7c2c2c2aSBaptiste Daroussin
2071f015e48aSBaptiste Daroussin	# Error tests
2072f015e48aSBaptiste Daroussin	atf_add_test_case err_append_suffix
2073f015e48aSBaptiste Daroussin	atf_add_test_case err_addr_out_of_range
2074f015e48aSBaptiste Daroussin	atf_add_test_case err_addr_negative
2075f015e48aSBaptiste Daroussin	atf_add_test_case err_bang_addr
2076f015e48aSBaptiste Daroussin	atf_add_test_case err_bang_double
2077f015e48aSBaptiste Daroussin	atf_add_test_case err_change_suffix
2078f015e48aSBaptiste Daroussin	atf_add_test_case err_change_zero
2079f015e48aSBaptiste Daroussin	atf_add_test_case err_delete_suffix
2080f015e48aSBaptiste Daroussin	atf_add_test_case err_edit_suffix
2081f015e48aSBaptiste Daroussin	atf_add_test_case err_edit_addr
2082f015e48aSBaptiste Daroussin	atf_add_test_case err_edit_nosuffix
2083f015e48aSBaptiste Daroussin	atf_add_test_case err_file_addr
2084f015e48aSBaptiste Daroussin	atf_add_test_case err_file_suffix
2085f015e48aSBaptiste Daroussin	atf_add_test_case err_global_delim
2086f015e48aSBaptiste Daroussin	atf_add_test_case err_global_empty
2087f015e48aSBaptiste Daroussin	atf_add_test_case err_global_incomplete
2088f015e48aSBaptiste Daroussin	atf_add_test_case err_help_addr
2089f015e48aSBaptiste Daroussin	atf_add_test_case err_insert_suffix
2090f015e48aSBaptiste Daroussin	atf_add_test_case err_insert_zero
2091f015e48aSBaptiste Daroussin	atf_add_test_case err_mark_upper
2092f015e48aSBaptiste Daroussin	atf_add_test_case err_mark_zero
2093f015e48aSBaptiste Daroussin	atf_add_test_case err_mark_ref
2094f015e48aSBaptiste Daroussin	atf_add_test_case err_move_dest
2095f015e48aSBaptiste Daroussin	atf_add_test_case err_quit_addr
2096f015e48aSBaptiste Daroussin	atf_add_test_case err_read_nofile
2097f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_delim
2098f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_infinite
2099f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_bracket
2100f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_escape
2101f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_empty
2102f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_bare
2103f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_sr
2104f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_equiv
2105f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_class
2106f015e48aSBaptiste Daroussin	atf_add_test_case err_subst_collate
2107f015e48aSBaptiste Daroussin	atf_add_test_case err_transfer_suffix
2108f015e48aSBaptiste Daroussin	atf_add_test_case err_transfer_addr
2109f015e48aSBaptiste Daroussin	atf_add_test_case err_undo_addr
2110f015e48aSBaptiste Daroussin	atf_add_test_case err_write_nopath
2111f015e48aSBaptiste Daroussin	atf_add_test_case err_write_suffix
2112f015e48aSBaptiste Daroussin	atf_add_test_case err_write_flags
2113f015e48aSBaptiste Daroussin	atf_add_test_case err_crypt_addr
2114f015e48aSBaptiste Daroussin	atf_add_test_case err_scroll
2115f015e48aSBaptiste Daroussin}
2116