TestCase.st
changeset 382 05683696d647
parent 377 71ada743cae2
child 390 c2c3895aabd6
--- a/TestCase.st	Sat Aug 20 16:00:36 2011 +0200
+++ b/TestCase.st	Sat Aug 20 16:00:44 2011 +0200
@@ -7,8 +7,7 @@
 	category:'SUnit-Base'
 !
 
-TestCase class instanceVariableNames:'lastTestRunResultOrNil lastTestRunsPassedTests lastTestRunsFailedTests
-	lastTestRunsErrorTests'
+TestCase class instanceVariableNames:'lastOutcomes'
 
 "
  No other class instance variables are inherited by this class.
@@ -94,133 +93,64 @@
     "Modified: / 02-08-2011 / 17:46:51 / cg"
 !
 
-lastTestRunResult
+lastTestRunResultOrNil
 
-    | result |
-    result := TestResult new.
-    lastTestRunsPassedTests ? #() do:
-        [:selector|result passed add: (self selector: selector)].
-    lastTestRunsFailedTests ? #() do:
-        [:selector|result failures add: (self selector: selector)].
-    lastTestRunsErrorTests ? #() do:
-        [:selector|result errors add: (self selector: selector)].
+    "Returns true if all tests passed, false if at least
+     one failed/error  or nil if never run            
+    "
+    lastOutcomes isNil ifTrue:[^nil].
+    lastOutcomes size ~= self testSelectors size ifTrue:[^nil].
+    lastOutcomes do:[:outcome|
+        outcome result == #pass ifFalse:[
+            ^false
+        ].
+    ].
+    ^true
 
-    "Created: / 15-03-2010 / 19:12:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-lastTestRunResultOrNil
-    ^ lastTestRunResultOrNil
+    "Modified: / 20-08-2011 / 14:59:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 lookupHierarchyRoot
         ^TestCase
 !
 
-rememberErrorTest:selector
-
-    | emitChange |
-
-    lastTestRunsErrorTests isNil ifTrue:[
-        lastTestRunsErrorTests := Set new.
-    ].
-
-    emitChange := (self removeSelector: selector from: lastTestRunsPassedTests).
-    emitChange := (self removeSelector: selector from: lastTestRunsFailedTests) or:[emitChange].
-    emitChange := (self addSelector: selector to: lastTestRunsErrorTests) or:[emitChange].
+rememberOutcome: outcome
 
-    emitChange ifTrue:[self lastTestRunResultChanged: selector].
-
-    self rememberFailedTestRun
-
-    "Modified: / 06-08-2006 / 11:01:08 / cg"
-    "Created: / 15-03-2010 / 19:16:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-rememberFailedTest:selector
-
-    | emitChange |
+    lastOutcomes isNil ifTrue:[
+        lastOutcomes := OrderedCollection new.
+    ].
+    "Not a nice code, but portable..."
+    1 to: lastOutcomes size do:[:i|
+        | each |
 
-    lastTestRunsFailedTests isNil ifTrue:[
-        lastTestRunsFailedTests := Set new.
+        each := lastOutcomes at: i.
+        (each testCase class == outcome testCase class and:
+            [each testCase selector == outcome testCase selector]) ifTrue:[
+                lastOutcomes at: i put: outcome.
+                each result ~= outcome result ifTrue:[
+                    self lastTestRunResultChanged: outcome selector. 
+                ].
+                ^self.                    
+            ].
     ].
-
-    emitChange := (self removeSelector: selector from: lastTestRunsPassedTests).
-    emitChange := (self removeSelector: selector from: lastTestRunsErrorTests) or:[emitChange].
-    emitChange := (self addSelector: selector to: lastTestRunsFailedTests) or:[emitChange].
-
-    emitChange ifTrue:[self lastTestRunResultChanged: selector].
-
-    self rememberFailedTestRun
+    lastOutcomes add: outcome.
+    self lastTestRunResultChanged: outcome selector.
+    ^self
 
-    "Modified: / 06-08-2006 / 11:01:08 / cg"
-    "Modified: / 15-03-2010 / 19:15:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-rememberFailedTestRun
-    lastTestRunResultOrNil ~~ false ifTrue:[
-        lastTestRunResultOrNil := false.
-        Smalltalk changed:#lastTestRunResult with:(Array with:self with:nil).
-        self changed:#lastTestRunResult.
-    ]
-
-    "Modified: / 06-08-2006 / 11:00:42 / cg"
+    "Created: / 20-08-2011 / 12:43:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-rememberFailedTestRunWithResult:result
-    self rememberFailedTestRun.
-    self rememberFailedTestsFromResult:result.
-
-    "Modified: / 05-08-2006 / 12:45:19 / cg"
-!
-
-rememberFailedTestsFromResult:result
-    (result failures union:result errors) do:[:eachFailedTest |
-        self rememberFailedTest:(eachFailedTest selector).
-    ].
-
-    "Created: / 05-08-2006 / 12:45:01 / cg"
-    "Modified: / 06-08-2006 / 10:54:31 / cg"
-!
-
-rememberPassedTest:selector
-
-    | emitChange |
-
-    lastTestRunsPassedTests isNil ifTrue:[
-        lastTestRunsPassedTests := Set new.
-    ].
-
-    emitChange := (self removeSelector: selector from: lastTestRunsFailedTests).
-    emitChange := (self removeSelector: selector from: lastTestRunsErrorTests) or:[emitChange].
-    emitChange := (self addSelector: selector to: lastTestRunsPassedTests) or:[emitChange].
+rememberedOutcomeFor: selector
 
-    emitChange ifTrue:[self lastTestRunResultChanged: selector].
-
-    self rememberPassedTestRun
-
-    "Modified: / 06-08-2006 / 11:01:08 / cg"
-    "Modified: / 15-03-2010 / 19:15:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
+    lastOutcomes isNil ifTrue:[^nil].
+    lastOutcomes do:[:outcome|
+        outcome testCase selector == selector ifTrue:[
+            ^outcome
+        ].
+    ].
+    ^nil
 
-rememberPassedTestRun
-    lastTestRunResultOrNil ~~ true ifTrue:[
-        lastTestRunResultOrNil := true.
-        "/lastTestRunsFailedTests := nil.
-        Smalltalk changed:#lastTestRunResult with:(Array with:self with:nil).
-        self changed:#lastTestRunResult.
-    ]
-
-    "Modified: / 06-08-2006 / 11:01:22 / cg"
-    "Modified: / 15-03-2010 / 18:22:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-rememberPassedTestsFromResult:result
-    (result passed) do:[:eachPassedTest |
-        self rememberPassedTest:(eachPassedTest selector).
-    ].
-
-    "Created: / 06-08-2006 / 10:29:47 / cg"
-    "Modified: / 06-08-2006 / 11:42:01 / cg"
+    "Created: / 20-08-2011 / 14:27:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 resources
@@ -240,20 +170,46 @@
 !
 
 testSelectorError:selector
-    ^ lastTestRunsErrorTests notNil and:[lastTestRunsErrorTests includes:selector]
+
+    lastOutcomes isNil ifTrue:[^false].
+    lastOutcomes do:[:each|
+        (each testCase class == self 
+            and:[each testCase selector == selector
+                and:[each result == #error]]) ifTrue:[
+                   ^true
+                ].                        
+    ].
+    ^false
 
     "Created: / 15-03-2010 / 19:44:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testSelectorFailed:selector
-    ^ (lastTestRunsFailedTests notNil and:[lastTestRunsFailedTests includes:selector]) or:
-      [lastTestRunsErrorTests notNil and:[lastTestRunsErrorTests includes:selector]]
 
-    "Modified: / 15-03-2010 / 19:44:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    lastOutcomes isNil ifTrue:[^false].
+    lastOutcomes do:[:each|
+        (each testCase class == self 
+            and:[each testCase selector == selector
+                and:[each result == #fail]]) ifTrue:[
+                   ^true
+                ].                        
+    ].
+    ^false
+
+    "Modified: / 20-08-2011 / 13:02:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 testSelectorPassed:selector
-    ^ lastTestRunsPassedTests notNil and:[lastTestRunsPassedTests includes:selector]
+
+    lastOutcomes isNil ifTrue:[^false].
+    lastOutcomes do:[:each|
+        (each testCase class == self 
+            and:[each testCase selector == selector
+                and:[each result == #pass]]) ifTrue:[
+                   ^true
+                ].                        
+    ].
+    ^false
 
     "Created: / 15-03-2010 / 17:58:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
@@ -385,13 +341,11 @@
 !
 
 rememberResult:result
-    result hasPassed ifTrue:[
-        self rememberPassedTestRun
-    ] ifFalse:[
-        self rememberFailedTestRunWithResult:result
-    ].
+
+    result outcomesDo:[:outcome|self rememberOutcome: outcome].
 
     "Created: / 05-08-2006 / 12:33:08 / cg"
+    "Modified: / 20-08-2011 / 14:02:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 runTests
@@ -631,15 +585,22 @@
 !TestCase methodsFor:'running'!
 
 debug
-        [
-            (self class selector: testSelector) runCase.
-            self class rememberPassedTest: testSelector.
-        ] sunitEnsure: [
-            TestResource resetResources: self resources
-        ].
+
+    | testCase outcome |
+
+    [
+        (testCase := self class selector: testSelector) runCase.
+        outcome := TestCaseOutcome new.
+        outcome testCase: testCase.
+        outcome result: #pass.
+        outcome remember.
+    ] sunitEnsure: [
+        TestResource resetResources: self resources
+    ].
 
     "Modified: / 07-07-2011 / 11:10:50 / jv"
     "Modified: / 07-07-2011 / 11:34:08 / Jan Vrany <jan.vrant@fit.cvut,cz>"
+    "Modified: / 20-08-2011 / 14:15:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 debugAsFailure
@@ -830,11 +791,11 @@
 !TestCase class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestCase.st,v 1.75 2011-08-18 18:37:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestCase.st,v 1.76 2011-08-20 14:00:44 vrany Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestCase.st,v 1.75 2011-08-18 18:37:10 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestCase.st,v 1.76 2011-08-20 14:00:44 vrany Exp $'
 !
 
 version_SVN