summaryrefslogtreecommitdiffstats
path: root/library
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2019-12-09 10:40:04 (GMT)
committersebres <sebres@users.sourceforge.net>2019-12-09 10:40:04 (GMT)
commitc66173309fa8adc4c4159bdeae016c7f9e2cbae0 (patch)
treeffe2adb40d880478e93ff87bc5d704a8a6ee3fff /library
parentc8634b0b9e917684290212424750b64a28afbe85 (diff)
parentf9490c56c66dcc35ca0686411ef0e11742bde5f1 (diff)
downloadtcl-c66173309fa8adc4c4159bdeae016c7f9e2cbae0.zip
tcl-c66173309fa8adc4c4159bdeae016c7f9e2cbae0.tar.gz
tcl-c66173309fa8adc4c4159bdeae016c7f9e2cbae0.tar.bz2
merge 8.5 (timing issue avoidance, skip test in runtime feature)
Diffstat (limited to 'library')
-rw-r--r--library/tcltest/tcltest.tcl66
1 files changed, 51 insertions, 15 deletions
diff --git a/library/tcltest/tcltest.tcl b/library/tcltest/tcltest.tcl
index c98cf0b..e5dbdfe 100644
--- a/library/tcltest/tcltest.tcl
+++ b/library/tcltest/tcltest.tcl
@@ -1986,15 +1986,20 @@ proc tcltest::test {name description args} {
if {[set cmd [uplevel 1 {namespace which SetupTest}]] ne ""} {
set setup [list $cmd $setup]
}
+ set processTest 1
set code [catch {uplevel 1 $setup} setupMsg]
if {$code == 1} {
set errorInfo(setup) $::errorInfo
set errorCodeRes(setup) $::errorCode
+ if {$errorCodeRes(setup) eq "BYPASS-SKIPPED-TEST"} {
+ _noticeSkipped $name $setupMsg
+ set processTest [set code 0]
+ }
}
set setupFailure [expr {$code != 0}]
# Only run the test body if the setup was successful
- if {!$setupFailure} {
+ if {$processTest && !$setupFailure} {
# Register startup time
if {[IsVerbose msec] || [IsVerbose usec]} {
@@ -2017,16 +2022,20 @@ proc tcltest::test {name description args} {
if {$returnCode == 1} {
set errorInfo(body) $::errorInfo
set errorCodeRes(body) $::errorCode
+ if {$errorCodeRes(body) eq "BYPASS-SKIPPED-TEST"} {
+ _noticeSkipped $name $actualAnswer
+ set processTest [set returnCode 0]
+ }
}
}
# check if the return code matched the expected return code
set codeFailure 0
- if {!$setupFailure && ($returnCode ni $returnCodes)} {
+ if {$processTest && !$setupFailure && ($returnCode ni $returnCodes)} {
set codeFailure 1
}
set errorCodeFailure 0
- if {!$setupFailure && !$codeFailure && $returnCode == 1 && \
+ if {$processTest && !$setupFailure && !$codeFailure && $returnCode == 1 && \
![string match $errorCode $errorCodeRes(body)]} {
set errorCodeFailure 1
}
@@ -2035,7 +2044,7 @@ proc tcltest::test {name description args} {
# them. If the comparison fails, then so did the test.
set outputFailure 0
variable outData
- if {[info exists output] && !$codeFailure} {
+ if {$processTest && [info exists output] && !$codeFailure} {
if {[set outputCompare [catch {
CompareStrings $outData $output $match
} outputMatch]] == 0} {
@@ -2047,7 +2056,7 @@ proc tcltest::test {name description args} {
set errorFailure 0
variable errData
- if {[info exists errorOutput] && !$codeFailure} {
+ if {$processTest && [info exists errorOutput] && !$codeFailure} {
if {[set errorCompare [catch {
CompareStrings $errData $errorOutput $match
} errorMatch]] == 0} {
@@ -2059,7 +2068,9 @@ proc tcltest::test {name description args} {
# check if the answer matched the expected answer
# Only check if we ran the body of the test (no setup failure)
- if {$setupFailure || $codeFailure} {
+ if {!$processTest} {
+ set scriptFailure 0
+ } elseif {$setupFailure || $codeFailure} {
set scriptFailure 0
} elseif {[set scriptCompare [catch {
CompareStrings $actualAnswer $result $match
@@ -2123,6 +2134,12 @@ proc tcltest::test {name description args} {
}
}
+ # if skipped, it is safe to return here
+ if {!$processTest} {
+ incr testLevel -1
+ return
+ }
+
# if we didn't experience any failures, then we passed
variable numTests
if {!($setupFailure || $cleanupFailure || $coreFailure
@@ -2183,7 +2200,7 @@ proc tcltest::test {name description args} {
puts [outputChannel] "---- errorCode(setup): $errorCodeRes(setup)"
}
}
- if {$scriptFailure} {
+ if {$processTest && $scriptFailure} {
if {$scriptCompare} {
puts [outputChannel] "---- Error testing result: $scriptMatch"
} else {
@@ -2250,6 +2267,32 @@ proc tcltest::test {name description args} {
return
}
+# Skip --
+#
+# Skips a running test and add a reason to skipped "constraints". Can be used
+# to conditional intended abort of the test.
+#
+# Side Effects: Maintains tally of total tests seen and tests skipped.
+#
+proc tcltest::Skip {reason} {
+ return -code error -errorcode BYPASS-SKIPPED-TEST $reason
+}
+
+proc tcltest::_noticeSkipped {name reason} {
+ variable testLevel
+ variable numTests
+
+ if {[IsVerbose skip]} {
+ puts [outputChannel] "++++ $name SKIPPED: $reason"
+ }
+
+ if {$testLevel == 1} {
+ incr numTests(Skipped)
+ AddToSkippedBecause $reason
+ }
+}
+
+
# Skipped --
#
# Given a test name and it constraints, returns a boolean indicating
@@ -2330,14 +2373,7 @@ proc tcltest::Skipped {name constraints} {
}
if {!$doTest} {
- if {[IsVerbose skip]} {
- puts [outputChannel] "++++ $name SKIPPED: $constraints"
- }
-
- if {$testLevel == 1} {
- incr numTests(Skipped)
- AddToSkippedBecause $constraints
- }
+ _noticeSkipped $name $constraints
return 1
}
}