dejagnu
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

PATCH: add support for verifying errors in internal unit tests


From: Jacob Bachmeyer
Subject: PATCH: add support for verifying errors in internal unit tests
Date: Fri, 07 Dec 2018 18:59:01 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1.22) Gecko/20090807 MultiZilla/1.8.3.4e SeaMonkey/1.1.17 Mnenhy/0.7.6.0

This patch adds new procedures for verifying that errors are raised when appropriate. This patch also fixes some bugs introduced in previous work, including finally getting a very tricky quoting bit right for using eval in lib_*_test with lists of arguments. The proper quoting inhibits command and variable substitutions when "eval" is called.

----
*ChangeLog entry:
        * testsuite/runtest.all/default_procs.tcl:
        (lib_errpat_test, lib_errregexp_test, lib_err_test): New.
        (lib_regexp_test): Fix copy-paste-edit error.
        (lib_pat_test, lib_regexp_test, lib_ret_test, lib_bool_test):
        Fix handling of errors raised by tested procedure.  Also ensure
        proper quoting of argument lists passed to eval.
----
patch:
----
diff --git a/testsuite/runtest.all/default_procs.tcl 
b/testsuite/runtest.all/default_procs.tcl
index ebb0daf..d5ff88a 100644
--- a/testsuite/runtest.all/default_procs.tcl
+++ b/testsuite/runtest.all/default_procs.tcl
@@ -4,59 +4,132 @@ set errno ""

# this tests a proc for a returned pattern
proc lib_pat_test { cmd arglist pattern } {
-    catch { eval [list $cmd] $arglist } result
-    puts "CMD(lib_pat_test) was: $cmd $arglist"
-    puts "RESULT(lib_pat_test) was: \"${result}\" for pattern \"$pattern\"."
-
-    if { [regexp -- "with too many" $result] } {
+    puts "CMD(lib_pat_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 0 } {
+       puts "RESULT(lib_pat_test) was: \"${result}\"\
+               for pattern \"$pattern\"."
+       if { [string match "$pattern" $result] } {
+           return 1
+       } else {
+           return 0
+       }
+    } else {
+       puts "RESULT(lib_pat_test) was error \"${result}\""
        return -1
    }
-    if { [string match "$pattern" $result] } {
-       return 1
+}
+
+# this tests a proc for a returned regexp
+proc lib_regexp_test { cmd arglist regexp } {
+    puts "CMD(lib_regexp_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 0 } {
+       puts "RESULT(lib_regexp_test) was: \"${result}\"\
+               for regexp \"$regexp\"."
+       if { [regexp -- $regexp $result] } {
+           return 1
+       } else {
+           return 0
+       }
    } else {
-       return 0
+       puts "RESULT(lib_regexp_test) was error \"${result}\""
+       return -1
    }
}

-# this tests a proc for a returned regexp
-proc lib_regexp_test { cmd arglist pattern } {
-    catch { eval [list $cmd] $arglist } result
-    puts "CMD(lib_pat_test) was: $cmd $arglist"
-    puts "RESULT(lib_pat_test) was: \"${result}\" for pattern \"$pattern\"."
+# this tests a proc for a returned value
+proc lib_ret_test { cmd arglist val } {
+    puts "CMD(lib_ret_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 0 } {
+       puts "RESULT(lib_ret_test) was: $result"
+       if { $result eq $val } {
+           return 1
+       } else {
+           return 0
+       }
+    } else {
+       puts "RESULT(lib_ret_test) was error \"${result}\""
+       return -1
+    }
+}

-    if { [regexp -- "with too many" $result] } {
+# this tests a proc for an expected boolean result
+proc lib_bool_test { cmd arglist val } {
+    puts "CMD(lib_bool_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 0 } {
+       puts "RESULT(lib_bool_test) was: \"$result\" expecting $val."
+       if { $val } {
+           if { $result } { return 1 } else { return 0 }
+       } else {
+           if { $result } { return 0 } else { return 1 }
+       }
+    } else {
+       puts "RESULT(lib_bool_test) was error \"${result}\""
        return -1
    }
-    if { [regexp -- "$pattern" $result] } {
-       return 1
+}
+
+# this tests that a proc raises an error matching a pattern
+proc lib_errpat_test { cmd arglist pattern } {
+    puts "CMD(lib_errpat_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 1 } {
+       # caught exception code 1 (TCL_ERROR) as expected
+       puts "RESULT(lib_errpat_test) was error\
+               \"${result}\" for pattern \"$pattern\"."
+       if { [string match $pattern $result] } {
+           # the expected error
+           return 1
+       } else {
+           # an unexpected error
+           return -1
+       }
    } else {
+       # no error -> fail
+       puts "RESULT(lib_errpat_test) was: \"${result}\"\
+               without error; failing."
        return 0
    }
}

-# this tests a proc for a returned value
-proc lib_ret_test { cmd arglist val } {
-    catch { eval [list $cmd] $arglist } result
-    puts "CMD(lib_ret_test) was: $cmd $arglist"
-    puts "RESULT(lib_ret_test) was: $result"
-
-    if { $result eq $val } {
-       return 1
+# this tests that a proc raises an error matching a regexp
+proc lib_errregexp_test { cmd arglist regexp } {
+    puts "CMD(lib_errregexp_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 1 } {
+       # caught exception code 1 (TCL_ERROR) as expected
+       puts "RESULT(lib_errregexp_test) was error\
+               \"${result}\" for regexp \"$regexp\"."
+       if { [regexp -- $regexp $result] } {
+           # the expected error
+           return 1
+       } else {
+           # an unexpected error
+           return -1
+       }
    } else {
+       # no error -> fail
+       puts "RESULT(lib_errregexp_test) was: \"${result}\"\
+               without error; failing."
        return 0
    }
}

-# this tests a proc for an expected boolean result
-proc lib_bool_test { cmd arglist val } {
-    catch { eval [list $cmd] $arglist } result
-    puts "CMD(lib_bool_test) was: $cmd $arglist"
-    puts "RESULT(lib_bool_test) was: \"$result\" expecting \"$val\"."
-
-    if { $val } {
-       if { $result } { return 1 } else { return 0 }
+# this tests that a proc raises an error matching an exact string
+proc lib_err_test { cmd arglist val } {
+    puts "CMD(lib_err_test) is: $cmd $arglist"
+    if { [catch { eval [list $cmd] [lrange $arglist 0 end] } result] == 1 } {
+       # caught exception code 1 (TCL_ERROR) as expected
+       puts "RESULT(lib_err_test) was error: $result"
+       if { $result eq $val } {
+           # the expected error
+           return 1
+       } else {
+           # an unexpected error
+           return -1
+       }
    } else {
-       if { $result } { return 0 } else { return 1 }
+       # no error -> fail
+       puts "RESULT(lib_err_test) was: \"${result}\"\
+               without error; failing."
+       return 0
    }
}

----


-- Jacob



reply via email to

[Prev in Thread] Current Thread [Next in Thread]