| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 | Smalltalk createPackage: 'SUnit-Tests'!TestCase subclass: #ExampleSetTest	instanceVariableNames: 'empty full'	package: 'SUnit-Tests'!!ExampleSetTest commentStamp!ExampleSetTest is taken from Pharo 1.4.THe purpose of this class is to demonstrate a simple use case of the test framework.!!ExampleSetTest methodsFor: 'running'!setUp	empty := Set new.	full := Set with: 5 with: #abc! !!ExampleSetTest methodsFor: 'tests'!testAdd	empty add: 5.	self assert: (empty includes: 5)!testGrow	empty addAll: (1 to: 100).	self assert: empty size equals: 100!testIllegal	self		should: [ empty at: 5 ]		raise: Error.	self		should: [ empty at: 5 put: #abc ]		raise: Error!testIncludes	self assert: (full includes: 5).	self assert: (full includes: #abc)!testOccurrences	self assert: (empty occurrencesOf: 0) equals: 0.	self assert: (full occurrencesOf: 5) equals: 1.	full add: 5.	self assert: (full occurrencesOf: 5) equals: 1!testRemove	full remove: 5.	self assert: (full includes: #abc).	self deny: (full includes: 5)! !TestCase subclass: #SUnitAsyncTest	instanceVariableNames: 'flag'	package: 'SUnit-Tests'!!SUnitAsyncTest methodsFor: 'helpers'!fakeError	flag := 'bad'.	self timeout: 30.	flag := (self async: [ flag := 'ok'. self error: 'Intentional' ]) valueWithTimeout: 20!fakeErrorFailingInTearDown	flag := 'bad'.	self timeout: 30.	flag := (self async: [ self error: 'Intentional' ]) valueWithTimeout: 20!fakeFailure	flag := 'bad'.	self timeout: 30.	flag := (self async: [ flag := 'ok'. self assert: false ]) valueWithTimeout: 20!fakeMultipleTimeoutFailing	self timeout: 100.	(self async: [ 		self timeout: 20.		(self async: [ self finished ]) valueWithTimeout: 30	]) valueWithTimeout: 20!fakeMultipleTimeoutPassing	self timeout: 20.	(self async: [		self timeout: 40.		(self async: [ self finished ]) valueWithTimeout: 20	]) valueWithTimeout: 10!fakeTimeout	self timeout: 10.	(self async: [ self finished ]) valueWithTimeout: 20! !!SUnitAsyncTest methodsFor: 'private'!selectorSetOf: aCollection	^ (aCollection collect: [ :each | each selector ]) asSet! !!SUnitAsyncTest methodsFor: 'running'!setUp	flag := 'ok'!tearDown	self assert: 'ok' equals: flag! !!SUnitAsyncTest methodsFor: 'tests'!testAsyncErrorsAndFailures	| suite runner result assertBlock |	suite := #('fakeError' 'fakeErrorFailingInTearDown' 'fakeFailure' 'testPass') collect: [ :each | self class selector: each ].	runner := TestSuiteRunner on: suite.	self timeout: 200.	result := runner result.	assertBlock := self async: [		self assert: (self selectorSetOf: result errors) equals: #('fakeError') asSet.		self assert: (self selectorSetOf: result failures) equals: #('fakeErrorFailingInTearDown' 'fakeFailure') asSet.		self finished	].	runner announcer on: ResultAnnouncement do: [ :ann |		ann result == result ifTrue: [ result runs = result total ifTrue: assertBlock ] ].	runner run!testAsyncNeedsTimeout	self should: [ self async: [ ] ] raise: Error.	self timeout: 0.	self shouldnt: [ self async: [ ] ] raise: Error.	self finished!testFinishedNeedsTimeout	self should: [ self finished ] raise: Error.	self timeout: 0.	self shouldnt: [ self finished ] raise: Error.!testIsAsyncReturnsCorrectValues	self deny: self isAsync.	self timeout: 0.	self assert: self isAsync.	self finished.	self deny: self isAsync!testPass	flag := 'bad'.	self timeout: 10.	flag := (self async: [ self assert: true. self finished. flag := 'ok' ]) valueWithTimeout: 5!testTimeouts	| suite runner result assertBlock |	suite := #('fakeTimeout' 'fakeMultipleTimeoutFailing' 'fakeMultipleTimeoutPassing' 'testPass') collect: [ :each | self class selector: each ].	runner := TestSuiteRunner on: suite.	self timeout: 200.	result := runner result.	assertBlock := self async: [		self assert: (self selectorSetOf: result errors) equals: Set new.		self assert: (self selectorSetOf: result failures) equals: #('fakeMultipleTimeoutFailing' 'fakeTimeout') asSet.		self finished	].	runner announcer on: ResultAnnouncement do: [ :ann |		ann result == result ifTrue: [ result runs = result total ifTrue: assertBlock ] ].	runner run!testTwoAsyncPassesWithFinishedOnlyOneIsRun	| x |	flag := 'bad'.	self timeout: 10.	x := 0.	flag := (self async: [ self finished. flag := 'ok'. x := x+1. self assert: x equals: 1 ]) valueWithTimeout: 0.	flag := (self async: [ self finished. flag := 'ok'. x := x+1. self assert: x equals: 1 ]) valueWithTimeout: 0.! !
 |