@@ -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