Delta define: #ExampleSetTest as: ( (Class subclassOf: 'TestCase' instanceVariables: 'full empty')) ! (Delta mirrorFor: #ExampleSetTest) revision: '$Revision:$'! (Delta mirrorFor: #ExampleSetTest) group: 'SUnitTests'! (Delta mirrorFor: #ExampleSetTest) comment: ''! Delta define: #ResumableTestFailureTestCase as: ( (Class subclassOf: 'TestCase' instanceVariables: '')) ! (Delta mirrorFor: #ResumableTestFailureTestCase) revision: '$Revision:$'! (Delta mirrorFor: #ResumableTestFailureTestCase) group: 'SUnitTests'! (Delta mirrorFor: #ResumableTestFailureTestCase) comment: ''! Delta define: #SUnitTest as: ( (Class subclassOf: 'TestCase' instanceVariables: 'hasRun hasSetup hasRanOnce')) ! (Delta mirrorFor: #SUnitTest) revision: '$Revision:$'! (Delta mirrorFor: #SUnitTest) group: 'SUnitTests'! (Delta mirrorFor: #SUnitTest) comment: 'This is both an example of writing tests and a self test for the SUnit. The tests here are pretty strange, since you want to make sure things blow up. You should not generally have to write tests this complicated in structure, although they will be far more complicated in terms of your own objects- more assertions, more complicated setup. Kent says: "Never forget, however, that if the tests are hard to write, something is probably wrong with the design".'! Delta define: #SimpleTestResource as: ( (Class subclassOf: 'TestResource' instanceVariables: 'runningState hasRun hasSetup hasRanOnce')) ! (Delta mirrorFor: #SimpleTestResource) revision: '$Revision:$'! (Delta mirrorFor: #SimpleTestResource) group: 'SUnitTests'! (Delta mirrorFor: #SimpleTestResource) comment: ''! Delta define: #SimpleTestResourceTestCase as: ( (Class subclassOf: 'TestCase' instanceVariables: 'resource')) ! (Delta mirrorFor: #SimpleTestResourceTestCase) revision: '$Revision:$'! (Delta mirrorFor: #SimpleTestResourceTestCase) group: 'SUnitTests'! (Delta mirrorFor: #SimpleTestResourceTestCase) comment: ''! ! (Delta mirrorFor: #ExampleSetTest) methodsFor: 'Running' ! setUp empty := Set new. full := Set with: 5 with: #abc ! ! ! (Delta mirrorFor: #ExampleSetTest) methodsFor: 'Testing' ! testAdd empty add: 5. self assert: (empty includes: 5) ! testGrow empty addAll: (1 to: 100). self assert: empty size = 100 ! testIllegal self should: [empty at: 5] raise: TestResult error. self should: [empty at: 5 put: #abc] raise: TestResult error ! testIncludes self assert: (full includes: 5). self assert: (full includes: #abc) ! testOccurrences self assert: (empty occurrencesOf: 0) = 0. self assert: (full occurrencesOf: 5) = 1. full add: 5. self assert: (full occurrencesOf: 5) = 1 ! testRemove full remove: 5. self assert: (full includes: #abc). self deny: (full includes: 5) ! ! ! (Delta mirrorFor: #ResumableTestFailureTestCase) methodsFor: 'Not categorized' ! errorTest 1 zork ! failureLog ^SUnitNameResolver defaultLogDevice ! failureTest self assert: false description: 'You should see me' resumable: true; assert: false description: 'You should see me too' resumable: true; assert: false description: 'You should see me last' resumable: false; assert: false description: 'You should not see me' resumable: true ! isLogging ^false ! okTest self assert: true ! regularTestFailureTest self assert: false description: 'You should see me' ! resumableTestFailureTest self assert: false description: 'You should see me' resumable: true; assert: false description: 'You should see me too' resumable: true; assert: false description: 'You should see me last' resumable: false; assert: false description: 'You should not see me' resumable: true ! testResumable | result suite | suite := TestSuite new. suite addTest: (self class selector: #errorTest). suite addTest: (self class selector: #regularTestFailureTest). suite addTest: (self class selector: #resumableTestFailureTest). suite addTest: (self class selector: #okTest). result := suite run. self assert: result failures size = 2; assert: result errors size = 1 ! ! ! (Delta mirrorFor: #SUnitTest) methodsFor: 'Accessing' ! hasRun ^hasRun ! hasSetup ^hasSetup ! ! ! (Delta mirrorFor: #SUnitTest) methodsFor: 'Private' ! assertForTestResult: aResult runCount: aRunCount passed: aPassedCount failed: aFailureCount errors: anErrorCount self assert: aResult runCount = aRunCount; assert: aResult passedCount = aPassedCount; assert: aResult failureCount = aFailureCount; assert: aResult errorCount = anErrorCount ! error 3 zork ! fail self assert: false ! noop ! setRun hasRun := true ! ! ! (Delta mirrorFor: #SUnitTest) methodsFor: 'Running' ! setUp hasSetup := true ! ! ! (Delta mirrorFor: #SUnitTest) methodsFor: 'Testing' ! errorShouldntRaise self shouldnt: [self someMessageThatIsntUnderstood] raise: SUnitNameResolver notificationObject ! testAssert self assert: true. self deny: false ! testDefects | result suite error failure | suite := TestSuite new. suite addTest: (error := self class selector: #error). suite addTest: (failure := self class selector: #fail). result := suite run. self assert: result defects asArray = (Array with: error with: failure). self assertForTestResult: result runCount: 2 passed: 0 failed: 1 errors: 1 ! testDialectLocalizedException self should: [TestResult signalFailureWith: 'Foo'] raise: TestResult failure. self should: [TestResult signalErrorWith: 'Foo'] raise: TestResult error. ! testError | case result | case := self class selector: #error. result := case run. self assertForTestResult: result runCount: 1 passed: 0 failed: 0 errors: 1. case := self class selector: #errorShouldntRaise. result := case run. self assertForTestResult: result runCount: 1 passed: 0 failed: 0 errors: 1 ! testException self should: [self error: 'foo'] raise: TestResult error ! testFail | case result | case := self class selector: #fail. result := case run. self assertForTestResult: result runCount: 1 passed: 0 failed: 1 errors: 0 ! testIsNotRerunOnDebug | case | case := self class selector: #testRanOnlyOnce. case run. case debug ! testRan | case | case := self class selector: #setRun. case run. self assert: case hasSetup. self assert: case hasRun ! testRanOnlyOnce self assert: hasRanOnce ~= true. hasRanOnce := true ! testResult | case result | case := self class selector: #noop. result := case run. self assertForTestResult: result runCount: 1 passed: 1 failed: 0 errors: 0 ! testRunning (SUnitDelay forSeconds: 2) wait ! testShould self should: [true]; shouldnt: [false] ! testSuite | suite result | suite := TestSuite new. suite addTest: (self class selector: #noop); addTest: (self class selector: #fail); addTest: (self class selector: #error). result := suite run. self assertForTestResult: result runCount: 3 passed: 1 failed: 1 errors: 1 ! ! ! (Delta mirrorFor: #SimpleTestResource) methodsFor: 'accessing' ! runningState ^runningState ! runningState: aSymbol runningState := aSymbol ! ! ! (Delta mirrorFor: #SimpleTestResource) methodsFor: 'running' ! setRun hasRun := true ! setUp self runningState: self startedStateSymbol. hasSetup := true ! startedStateSymbol ^#started ! stoppedStateSymbol ^#stopped ! tearDown self runningState: self stoppedStateSymbol ! ! ! (Delta mirrorFor: #SimpleTestResource) methodsFor: 'testing' ! hasRun ^hasRun ! hasSetup ^hasSetup ! isAvailable ^self runningState == self startedStateSymbol ! ! ! (Delta mirrorFor: #SimpleTestResourceTestCase) classSide methodsFor: 'Not categorized' ! resources ^Set new add: SimpleTestResource current; yourself ! ! ! (Delta mirrorFor: #SimpleTestResourceTestCase) methodsFor: 'Not categorized' ! dummy self assert: true ! error 'foo' odd ! fail self assert: false ! setRun resource setRun ! setUp resource := SimpleTestResource current ! testRan | case | case := self class selector: #setRun. case run. self assert: resource hasSetup. self assert: resource hasRun ! testResourceInitRelease | result suite error failure | suite := TestSuite new. suite addTest: (error := self class selector: #error). suite addTest: (failure := self class selector: #fail). suite addTest: (self class selector: #dummy). result := suite run. self assert: resource hasSetup ! testResourcesCollection | collection | collection := self resources. self assert: collection size = 1 ! !