[squeak-dev] The Trunk: SUnit-ct.135.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Jan 16 20:40:21 UTC 2022

Christoph Thiede uploaded a new version of SUnit to project The Trunk:

==================== Summary ====================

Name: SUnit-ct.135
Author: ct
Time: 16 January 2022, 9:40:03.045332 pm
UUID: 0e341764-d837-c94c-b5f5-c360f5bff1e6
Ancestors: SUnit-ct.134, SUnit-ct.129, SUnit-ct.130

Merge commit.

	Catch warnings and halts in test case execution as well as Errors.

	Deprecates TestResult class >> #error and replaces sends to it with #exError. It is a bad and erroneous practice to override #error in a way that does not signal an error but returns a class object.

=============== Diff against SUnit-ct.134 ===============

Item was changed:
  ----- Method: SUnitTest>>testDialectLocalizedException (in category 'tests') -----
  		should: [TestResult signalFailureWith: 'Foo']
  		raise: TestResult failure.
  		should: [TestResult signalErrorWith: 'Foo']
+ 		raise: TestResult exError.!
- 		raise: TestResult error.
- 			!

Item was changed:
  ----- Method: SUnitTest>>testException (in category 'tests') -----
  		should: [self error: 'foo']
+ 		raise: TestResult exError!
- 		raise: TestResult error
- 			!

Item was changed:
  ----- Method: SUnitTest>>testWithExceptionDo (in category 'tests') -----
  		should: [self error: 'foo']
+ 		raise: TestResult exError
- 		raise: TestResult error
  		withExceptionDo: [:exception |
  			self assert: (exception description includesSubstring: 'foo')
+ 		]!
- 		]
- 			!

Item was changed:
  ----- Method: TestCase>>timeout:after: (in category 'private') -----
  timeout: aBlock after: seconds
  	"Evaluate the argument block. Time out if the evaluation is not
  	complete after the given number of seconds. Handle the situation
  	that a timeout may occur after a failure (during debug)"
  	| theProcess delay watchdog |
  	"the block will be executed in the current process"
  	theProcess := Processor activeProcess.
  	delay := Delay forSeconds: seconds.
  	"make a watchdog process"
  	watchdog := [
  		delay wait. 	"wait for timeout or completion"
  		theProcess ifNotNil:[ theProcess signalException: 
+ 			(TestFailure new messageText: 'Test timed out' translated) ] 
- 			(TestFailure new messageText: 'Test timed out') ] 
  	] newProcess.
  	"Watchdog needs to run at high priority to do its job (but not at timing priority)"
  	watchdog priority: Processor timingPriority-1.
  	"catch the timeout signal"
  	watchdog resume.				"start up the watchdog"
+ 	^[aBlock on: TestFailure, TestResult allErrors do: [:ex|
- 	^[aBlock on: TestFailure, Error, Halt do:[:ex|
  		theProcess := nil.
  		ex pass.
  	]] ensure:[							"evaluate the receiver"
  		theProcess := nil.				"it has completed, so ..."
  		delay delaySemaphore signal.	"arrange for the watchdog to exit"

Item was added:
+ ----- Method: TestResult class>>allErrors (in category 'exceptions') -----
+ allErrors
+ 	^ self exError, Warning, Halt
+ 			!

Item was changed:
  ----- Method: TestResult class>>error (in category 'exceptions') -----
+ 	self deprecated: 'ct: Send #exError to retrieve an exception class or #error: to signal an error, depending on what you need.'.
+ 	^ super error!
- 	^self exError
- 			!

Item was added:
+ ----- Method: TestResult class>>exAllErrors (in category 'exceptions') -----
+ exAllErrors
+ 	^ self exError, Warning, Halt
+ 			!

Item was changed:
  ----- Method: TestResult class>>signalErrorWith: (in category 'exceptions') -----
  signalErrorWith: aString 
+ 	^ self exError signal: aString!
- 	self error signal: aString
- 			!

Item was changed:
  ----- Method: TestResult>>runCase: (in category 'running') -----
  runCase: aTestCase
  	| testCasePassed timeToRun |
  	testCasePassed := true.
  	[timeToRun := [aTestCase runCase] timeToRunWithoutGC] 
  		on: self class failure
  		do: [:signal | 
  				failures add: aTestCase.
  				testCasePassed := false.
  				signal return: false]
+ 		on: self class allErrors
- 		on: self class error
  		do: [:signal |
  				errors add: aTestCase.
  				testCasePassed := false.
  				signal return: false].
  	testCasePassed ifTrue: [passed add: aTestCase].
  	self durations at: aTestCase put: timeToRun.!

More information about the Squeak-dev mailing list