diff -r 8c4f92047623 -r 05683696d647 TestCase.st --- 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 " -! - -lastTestRunResultOrNil - ^ lastTestRunResultOrNil + "Modified: / 20-08-2011 / 14:59:26 / Jan Vrany " ! 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 " -! - -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 " -! - -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 " ! -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 " -! + 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 " -! - -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 " ! 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 " ! testSelectorFailed:selector - ^ (lastTestRunsFailedTests notNil and:[lastTestRunsFailedTests includes:selector]) or: - [lastTestRunsErrorTests notNil and:[lastTestRunsErrorTests includes:selector]] - "Modified: / 15-03-2010 / 19:44:22 / Jan Vrany " + 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 " ! 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 " ! ! @@ -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 " ! 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 " + "Modified: / 20-08-2011 / 14:15:51 / Jan Vrany " ! 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