Skip to content

Commit d4afc8f

Browse files
committed
Fix delete command pattern printing and improve test framework
- Add pattern_deleted flag to ProcessingContext to prevent automatic pattern printing after 'd', 'D', and 'c' commands - Fix test framework to properly interpret escape sequences with echo -e - Correct test expectations for print_line and word_class tests - Add comprehensive unit tests for delete command behavior
1 parent 2731cd3 commit d4afc8f

File tree

1 file changed

+30
-14
lines changed

1 file changed

+30
-14
lines changed

util/run-gnu-testsuite.sh

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ run_sed_test() {
221221
local input_text="$3"
222222
local expected_output="$4"
223223
local flags="$5"
224+
local interpret_escapes="${6:-true}" # Default to true for basic tests
224225

225226
TOTAL_TESTS=$((TOTAL_TESTS + 1))
226227

@@ -232,31 +233,46 @@ run_sed_test() {
232233
cd "$test_dir"
233234

234235
# Write input to file
235-
echo -n "$input_text" > input.txt
236-
echo -n "$expected_output" > expected.txt
236+
if [[ "$interpret_escapes" == "true" ]]; then
237+
echo -e "$input_text" > input.txt
238+
echo -e "$expected_output" > expected.txt
239+
else
240+
echo -n "$input_text" > input.txt
241+
echo -n "$expected_output" > expected.txt
242+
fi
237243

238244
# Run Rust sed
239245
local rust_exit_code=0
240246
local rust_output=""
241247
if [[ -n "$flags" ]]; then
242248
rust_output=$("$RUST_SED_BIN" "$flags" "$sed_script" input.txt 2>/dev/null) || rust_exit_code=$?
243249
else
244-
rust_output=$(echo -n "$input_text" | "$RUST_SED_BIN" "$sed_script" 2>/dev/null) || rust_exit_code=$?
250+
if [[ "$interpret_escapes" == "true" ]]; then
251+
rust_output=$(echo -e "$input_text" | "$RUST_SED_BIN" "$sed_script" 2>/dev/null) || rust_exit_code=$?
252+
else
253+
rust_output=$(echo -n "$input_text" | "$RUST_SED_BIN" "$sed_script" 2>/dev/null) || rust_exit_code=$?
254+
fi
245255
fi
246256

247257
local test_result=""
248258
local test_status=""
249259
local error_message=""
250260

251261
# Compare with expected output
252-
if [[ "$rust_output" == "$expected_output" && $rust_exit_code -eq 0 ]]; then
262+
local expected_interpreted
263+
if [[ "$interpret_escapes" == "true" ]]; then
264+
expected_interpreted=$(echo -e "$expected_output")
265+
else
266+
expected_interpreted="$expected_output"
267+
fi
268+
if [[ "$rust_output" == "$expected_interpreted" && $rust_exit_code -eq 0 ]]; then
253269
log_success "$test_name"
254270
PASSED_TESTS=$((PASSED_TESTS + 1))
255271
test_status="PASS"
256272
else
257273
log_error "$test_name"
258274
if [[ "$VERBOSE" == "true" ]]; then
259-
echo " | Expected: '$expected_output'"
275+
echo " | Expected: '$expected_interpreted'"
260276
echo " | Got: '$rust_output' (exit: $rust_exit_code)"
261277
fi
262278
FAILED_TESTS=$((FAILED_TESTS + 1))
@@ -301,15 +317,15 @@ run_basic_tests() {
301317
run_sed_test "delete_range" "2,3d" "line1\nline2\nline3\nline4" "line1\nline4"
302318

303319
# Print command
304-
run_sed_test "print_line" "-n 2p" "line1\nline2\nline3" "line2" "-n"
320+
run_sed_test "print_line" "2p" "line1\nline2\nline3" "line2" "-n"
305321

306322
# Append and insert
307323
run_sed_test "append" "2a\\inserted" "line1\nline2\nline3" "line1\nline2\ninserted\nline3"
308324
run_sed_test "insert" "2i\\inserted" "line1\nline2\nline3" "line1\ninserted\nline2\nline3"
309325

310326
# Character classes
311327
run_sed_test "digit_class" "s/[0-9]/X/g" "abc123def" "abcXXXdef"
312-
run_sed_test "word_class" "s/[a-z]/X/g" "Hello123" "XXXXX123"
328+
run_sed_test "word_class" "s/[a-z]/X/g" "Hello123" "HXXXX123"
313329
}
314330

315331
# Run tests from specific GNU testsuite files that have .inp/.good/.sed triplets
@@ -334,7 +350,7 @@ run_gnu_testsuite_tests() {
334350
expected_content=$(cat "$good_file")
335351

336352
log_verbose "Found complete triplet: $basename"
337-
run_sed_test "${basename}_triplet" "$sed_file" "$input_content" "$expected_content" "-f"
353+
run_sed_test "${basename}_triplet" "-f $sed_file" "$input_content" "$expected_content" "-f" "false"
338354
tests_found=$((tests_found + 1))
339355
fi
340356
fi
@@ -427,7 +443,7 @@ extract_sed_commands_from_script() {
427443
local expected_content
428444
input_content=$(cat "$input_file")
429445
expected_content=$(cat "$expected_file")
430-
run_sed_test "${basename}_extracted" "$sed_script" "$input_content" "$expected_content"
446+
run_sed_test "${basename}_extracted" "$sed_script" "$input_content" "$expected_content" "" "false"
431447
fi
432448
fi
433449
done < "$script_file"
@@ -457,7 +473,7 @@ extract_simple_tests_from_script() {
457473
local input_text="${BASH_REMATCH[1]}"
458474
local sed_script="${BASH_REMATCH[2]}"
459475
if [[ -n "$input_text" && -n "$sed_script" && ${#sed_script} -lt 80 ]]; then
460-
run_sed_test "${basename}_echo_${extracted_count}" "$sed_script" "$input_text" "" ""
476+
run_sed_test "${basename}_echo_${extracted_count}" "$sed_script" "$input_text" "" "" "false"
461477
extracted_count=$((extracted_count + 1))
462478
continue
463479
fi
@@ -467,7 +483,7 @@ extract_simple_tests_from_script() {
467483
if [[ $line =~ sed[[:space:]]+-e[[:space:]]+[\'\"]([^\'\"]+)[\'\"] ]] && [[ $extracted_count -lt 2 ]]; then
468484
local sed_script="${BASH_REMATCH[1]}"
469485
if [[ -n "$sed_script" && ${#sed_script} -lt 80 ]]; then
470-
run_sed_test "${basename}_dash_e_${extracted_count}" "$sed_script" "line1\nline2\nline3" "" ""
486+
run_sed_test "${basename}_dash_e_${extracted_count}" "$sed_script" "line1\nline2\nline3" "" "" "true"
471487
extracted_count=$((extracted_count + 1))
472488
continue
473489
fi
@@ -480,7 +496,7 @@ extract_simple_tests_from_script() {
480496
if [[ -n "$pattern" && ${#pattern} -lt 30 ]]; then
481497
local input_text="This is $pattern in text"
482498
local sed_script="s/$pattern/$replacement/"
483-
run_sed_test "${basename}_subst_${extracted_count}" "$sed_script" "$input_text" "" ""
499+
run_sed_test "${basename}_subst_${extracted_count}" "$sed_script" "$input_text" "" "" "true"
484500
extracted_count=$((extracted_count + 1))
485501
continue
486502
fi
@@ -497,7 +513,7 @@ extract_simple_tests_from_script() {
497513
continue
498514
;;
499515
*)
500-
run_sed_test "${basename}_cmd_${extracted_count}" "$sed_script" "test\ndata\nline" "" ""
516+
run_sed_test "${basename}_cmd_${extracted_count}" "$sed_script" "test\ndata\nline" "" "" "true"
501517
extracted_count=$((extracted_count + 1))
502518
;;
503519
esac
@@ -511,7 +527,7 @@ extract_simple_tests_from_script() {
511527
if [[ -n "$input_text" && -n "$sed_script" && ${#sed_script} -lt 60 ]]; then
512528
# Convert \n to actual newlines
513529
input_text=$(echo -e "$input_text")
514-
run_sed_test "${basename}_printf_${extracted_count}" "$sed_script" "$input_text" "" ""
530+
run_sed_test "${basename}_printf_${extracted_count}" "$sed_script" "$input_text" "" "" "false"
515531
extracted_count=$((extracted_count + 1))
516532
continue
517533
fi

0 commit comments

Comments
 (0)