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