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