From 9b0b71d6b18ebb77cff67ca5e032adad7145dd40 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Fri, 9 May 2025 11:09:12 +0200 Subject: [PATCH] ts: fix json whatis error test with random output order Signed-off-by: Xavier Delaruelle --- testsuite/config/base-config.exp | 44 +++++++++++++++++++++++++ testsuite/modules.70-maint/290-json.exp | 12 +++---- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/testsuite/config/base-config.exp b/testsuite/config/base-config.exp index 75e17f21..ef7550ec 100644 --- a/testsuite/config/base-config.exp +++ b/testsuite/config/base-config.exp @@ -836,6 +836,31 @@ proc _test_err_re {test_shell cmd answer force_nl failcmd} { } } +proc _test_err_re_sort {test_shell cmd answer failcmd} { + global comp_error + global verbose + + # newline is expected at end of answer + if {$answer ne {} && $answer ne "\n"} { + append answer \n + } + + set comp_error_sort [join [lsort [split $comp_error \n]] \n] + set answer_sort [join [lsort [split $answer \n]] \n] + set answer_sort "^$answer_sort\$" + + if {![regexp -- $answer_sort $comp_error_sort]} { + $failcmd "$cmd ($test_shell)" + set ol [string length $comp_error_sort] + set oe [string length $answer_sort] + send_user "ERR\[$ol\]: '$comp_error_sort'#>\n" + send_user "EXP\[$oe\]: '$answer_sort'#>\n" + return 0; + } else { + return 1; + } +} + proc _test_out {test_shell cmd answer failcmd} { global comp_output global verbose @@ -1118,6 +1143,25 @@ proc testouterr_cmd {test_shell cmd answer anserr {failcmd {fail}}} { } } +# +# Test procedure for matching with regular expressions in the stdout and sorted stderr +# + +proc testouterr_cmd_re_sort {test_shell cmd answer anserr {failcmd {fail}}} { + if {$test_shell eq "ALL"} { + global supported_shells + foreach shell $supported_shells { + testouterr_cmd_re_sort $shell $cmd $answer $anserr + } + } else { + _test_sub $test_shell "$cmd" + if { [_test_out_re $test_shell "$cmd" "$answer" $failcmd] + && [_test_err_re_sort $test_shell "$cmd" "$anserr" $failcmd] } { + _test_ok $test_shell "$cmd" + } + } +} + # # Test procedure for full text matching with stdout and specified file # diff --git a/testsuite/modules.70-maint/290-json.exp b/testsuite/modules.70-maint/290-json.exp index f94835bc..4715c73d 100644 --- a/testsuite/modules.70-maint/290-json.exp +++ b/testsuite/modules.70-maint/290-json.exp @@ -246,12 +246,12 @@ if {$is_file_perms_editable && $tcl_platform(user) ne {root} && !$is_locked_dir_ change_file_perms $mp/iCaSe/1 ugo-rx change_file_perms $mp/icASE/1 ugo-rx change_file_perms $mp/icase/1 ugo-rx - testouterr_cmd sh {whatis --json -i ICASE/1} ERR "{\"errors\": \[ -{ \"severity\": \"ERROR\", \"message\": \[ \"Permission denied on '$mp/iCaSe/1'\" \] }, -{ \"severity\": \"ERROR\", \"message\": \[ \"Permission denied on '$mp/ICASE/1'\" \] }, -{ \"severity\": \"ERROR\", \"message\": \[ \"Permission denied on '$mp/IcAsE/1'\" \] }, -{ \"severity\": \"ERROR\", \"message\": \[ \"Permission denied on '$mp/icASE/1'\" \] }, -{ \"severity\": \"ERROR\", \"message\": \[ \"Permission denied on '$mp/icase/1'\" \] } \] + testouterr_cmd_re_sort sh {whatis --json -i ICASE/1} ERR "{\"errors\": \\\[ +{ \"severity\": \"ERROR\", \"message\": \\\[ \"Permission denied on '$mpre/iCaSe/1'\" \\\] }.* +{ \"severity\": \"ERROR\", \"message\": \\\[ \"Permission denied on '$mpre/ICASE/1'\" \\\] }.* +{ \"severity\": \"ERROR\", \"message\": \\\[ \"Permission denied on '$mpre/IcAsE/1'\" \\\] }.* +{ \"severity\": \"ERROR\", \"message\": \\\[ \"Permission denied on '$mpre/icASE/1'\" \\\] }.* +{ \"severity\": \"ERROR\", \"message\": \\\[ \"Permission denied on '$mpre/icase/1'\" \\\] }.* }" testouterr_cmd sh {whatis --json -i -s ICASE/1} ERR "{}" restore_file_perms $mp/IcAsE/1