Skip to content

Commit c964deb

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 ddd9c88 commit c964deb

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
@@ -214,6 +214,7 @@ run_sed_test() {
214214
local input_text="$3"
215215
local expected_output="$4"
216216
local flags="$5"
217+
local interpret_escapes="${6:-true}" # Default to true for basic tests
217218

218219
TOTAL_TESTS=$((TOTAL_TESTS + 1))
219220

@@ -225,31 +226,46 @@ run_sed_test() {
225226
cd "$test_dir"
226227

227228
# Write input to file
228-
echo -n "$input_text" > input.txt
229-
echo -n "$expected_output" > expected.txt
229+
if [[ "$interpret_escapes" == "true" ]]; then
230+
echo -e "$input_text" > input.txt
231+
echo -e "$expected_output" > expected.txt
232+
else
233+
echo -n "$input_text" > input.txt
234+
echo -n "$expected_output" > expected.txt
235+
fi
230236

231237
# Run Rust sed
232238
local rust_exit_code=0
233239
local rust_output=""
234240
if [[ -n "$flags" ]]; then
235241
rust_output=$("$RUST_SED_BIN" "$flags" "$sed_script" input.txt 2>/dev/null) || rust_exit_code=$?
236242
else
237-
rust_output=$(echo -n "$input_text" | "$RUST_SED_BIN" "$sed_script" 2>/dev/null) || rust_exit_code=$?
243+
if [[ "$interpret_escapes" == "true" ]]; then
244+
rust_output=$(echo -e "$input_text" | "$RUST_SED_BIN" "$sed_script" 2>/dev/null) || rust_exit_code=$?
245+
else
246+
rust_output=$(echo -n "$input_text" | "$RUST_SED_BIN" "$sed_script" 2>/dev/null) || rust_exit_code=$?
247+
fi
238248
fi
239249

240250
local test_result=""
241251
local test_status=""
242252
local error_message=""
243253

244254
# Compare with expected output
245-
if [[ "$rust_output" == "$expected_output" && $rust_exit_code -eq 0 ]]; then
255+
local expected_interpreted
256+
if [[ "$interpret_escapes" == "true" ]]; then
257+
expected_interpreted=$(echo -e "$expected_output")
258+
else
259+
expected_interpreted="$expected_output"
260+
fi
261+
if [[ "$rust_output" == "$expected_interpreted" && $rust_exit_code -eq 0 ]]; then
246262
log_success "$test_name"
247263
PASSED_TESTS=$((PASSED_TESTS + 1))
248264
test_status="PASS"
249265
else
250266
log_error "$test_name"
251267
if [[ "$VERBOSE" == "true" ]]; then
252-
echo " | Expected: '$expected_output'"
268+
echo " | Expected: '$expected_interpreted'"
253269
echo " | Got: '$rust_output' (exit: $rust_exit_code)"
254270
fi
255271
FAILED_TESTS=$((FAILED_TESTS + 1))
@@ -294,15 +310,15 @@ run_basic_tests() {
294310
run_sed_test "delete_range" "2,3d" "line1\nline2\nline3\nline4" "line1\nline4"
295311

296312
# Print command
297-
run_sed_test "print_line" "-n 2p" "line1\nline2\nline3" "line2" "-n"
313+
run_sed_test "print_line" "2p" "line1\nline2\nline3" "line2" "-n"
298314

299315
# Append and insert
300316
run_sed_test "append" "2a\\inserted" "line1\nline2\nline3" "line1\nline2\ninserted\nline3"
301317
run_sed_test "insert" "2i\\inserted" "line1\nline2\nline3" "line1\ninserted\nline2\nline3"
302318

303319
# Character classes
304320
run_sed_test "digit_class" "s/[0-9]/X/g" "abc123def" "abcXXXdef"
305-
run_sed_test "word_class" "s/[a-z]/X/g" "Hello123" "XXXXX123"
321+
run_sed_test "word_class" "s/[a-z]/X/g" "Hello123" "HXXXX123"
306322
}
307323

308324
# Run tests from specific GNU testsuite files that have .inp/.good/.sed triplets
@@ -327,7 +343,7 @@ run_gnu_testsuite_tests() {
327343
expected_content=$(cat "$good_file")
328344

329345
log_verbose "Found complete triplet: $basename"
330-
run_sed_test "${basename}_triplet" "-f $sed_file" "$input_content" "$expected_content" "-f"
346+
run_sed_test "${basename}_triplet" "-f $sed_file" "$input_content" "$expected_content" "-f" "false"
331347
tests_found=$((tests_found + 1))
332348
fi
333349
fi
@@ -423,7 +439,7 @@ extract_sed_commands_from_script() {
423439
local expected_content
424440
input_content=$(cat "$input_file")
425441
expected_content=$(cat "$expected_file")
426-
run_sed_test "${basename}_extracted" "$sed_script" "$input_content" "$expected_content"
442+
run_sed_test "${basename}_extracted" "$sed_script" "$input_content" "$expected_content" "" "false"
427443
fi
428444
fi
429445
done < "$script_file"
@@ -453,7 +469,7 @@ extract_simple_tests_from_script() {
453469
local input_text="${BASH_REMATCH[1]}"
454470
local sed_script="${BASH_REMATCH[2]}"
455471
if [[ -n "$input_text" && -n "$sed_script" && ${#sed_script} -lt 80 ]]; then
456-
run_sed_test "${basename}_echo_${extracted_count}" "$sed_script" "$input_text" "" ""
472+
run_sed_test "${basename}_echo_${extracted_count}" "$sed_script" "$input_text" "" "" "false"
457473
extracted_count=$((extracted_count + 1))
458474
continue
459475
fi
@@ -463,7 +479,7 @@ extract_simple_tests_from_script() {
463479
if [[ $line =~ sed[[:space:]]+-e[[:space:]]+[\'\"]([^\'\"]+)[\'\"] ]] && [[ $extracted_count -lt 2 ]]; then
464480
local sed_script="${BASH_REMATCH[1]}"
465481
if [[ -n "$sed_script" && ${#sed_script} -lt 80 ]]; then
466-
run_sed_test "${basename}_dash_e_${extracted_count}" "$sed_script" "line1\nline2\nline3" "" ""
482+
run_sed_test "${basename}_dash_e_${extracted_count}" "$sed_script" "line1\nline2\nline3" "" "" "true"
467483
extracted_count=$((extracted_count + 1))
468484
continue
469485
fi
@@ -476,7 +492,7 @@ extract_simple_tests_from_script() {
476492
if [[ -n "$pattern" && ${#pattern} -lt 30 ]]; then
477493
local input_text="This is $pattern in text"
478494
local sed_script="s/$pattern/$replacement/"
479-
run_sed_test "${basename}_subst_${extracted_count}" "$sed_script" "$input_text" "" ""
495+
run_sed_test "${basename}_subst_${extracted_count}" "$sed_script" "$input_text" "" "" "true"
480496
extracted_count=$((extracted_count + 1))
481497
continue
482498
fi
@@ -493,7 +509,7 @@ extract_simple_tests_from_script() {
493509
continue
494510
;;
495511
*)
496-
run_sed_test "${basename}_cmd_${extracted_count}" "$sed_script" "test\ndata\nline" "" ""
512+
run_sed_test "${basename}_cmd_${extracted_count}" "$sed_script" "test\ndata\nline" "" "" "true"
497513
extracted_count=$((extracted_count + 1))
498514
;;
499515
esac
@@ -507,7 +523,7 @@ extract_simple_tests_from_script() {
507523
if [[ -n "$input_text" && -n "$sed_script" && ${#sed_script} -lt 60 ]]; then
508524
# Convert \n to actual newlines
509525
input_text=$(echo -e "$input_text")
510-
run_sed_test "${basename}_printf_${extracted_count}" "$sed_script" "$input_text" "" ""
526+
run_sed_test "${basename}_printf_${extracted_count}" "$sed_script" "$input_text" "" "" "false"
511527
extracted_count=$((extracted_count + 1))
512528
continue
513529
fi

0 commit comments

Comments
 (0)