#FEATURE by cg
class: TestCase
added: #ensureRequiredPackagesAreLoaded
comment/format in: #runCaseAsFailure:
changed:
#runCase
#runCaseAsFailure
class: TestCase class
added: #requiredPackageNames
comment/format in:
#coveredClassNames
#coveredClasses
--- a/TestCase.st Wed May 29 01:13:02 2019 +0200
+++ b/TestCase.st Wed May 29 01:35:49 2019 +0200
@@ -389,6 +389,7 @@
^ self coveredClassNames collect:[:each | Smalltalk classNamed:each]
"Modified (comment): / 30-08-2017 / 11:09:22 / cg"
+ "Modified: / 29-05-2019 / 01:30:01 / Claus Gittinger"
!
lastTestRunResultChanged: selector
@@ -414,8 +415,8 @@
!TestCase class methodsFor:'queries'!
coveredClassNames
- "should be redefined to return a collection of classes which are tested by
- this suite/case.
+ "should be redefined to return a collection of class names
+ which are tested by this suite/case.
If not redefined, coveredPackageNames should be.
These classes can be instrumented for coverage analysis,
@@ -424,6 +425,7 @@
^ #()
"Created: / 06-07-2011 / 21:27:03 / cg"
+ "Modified (comment): / 29-05-2019 / 01:32:23 / Claus Gittinger"
!
coveredPackageNames
@@ -442,6 +444,16 @@
TestCase instances built from it"
^self == TestCase
+!
+
+requiredPackageNames
+ "can be redefined to return a collection of packages
+ which are required to be present when running tests.
+ If not redefined, coveredPackageNames is used."
+
+ ^ nil
+
+ "Created: / 29-05-2019 / 01:31:59 / Claus Gittinger"
! !
!TestCase class methodsFor:'quick testing'!
@@ -729,6 +741,25 @@
!TestCase methodsFor:'private'!
+ensureRequiredPackagesAreLoaded
+ |names|
+
+ (names := self class requiredPackageNames) isNil ifTrue:[
+ (names := self class coveredPackageNames)
+ ].
+ names notEmptyOrNil ifTrue:[
+ "/ ensure that the packages are loaded
+ names do:[:each |
+ (Smalltalk loadPackage:each) ifFalse:[
+ self error:('package not loaded: %1' bindWith:each)
+ ].
+ ].
+ ].
+ self setUp
+
+ "Created: / 29-05-2019 / 01:32:58 / Claus Gittinger"
+!
+
executeShould: aBlock inScopeOf: anExceptionalEvent
"/ ^[aBlock value.
"/ false] sunitOn: anExceptionalEvent
@@ -1091,6 +1122,7 @@
runCase
|didSetup|
+ self ensureRequiredPackagesAreLoaded.
self resources do: [:each | each availableFor: self].
[
@@ -1109,18 +1141,22 @@
]
"Modified: / 13-07-2017 / 14:03:01 / cg"
+ "Modified: / 29-05-2019 / 01:34:01 / Claus Gittinger"
!
runCaseAsFailure
+ self ensureRequiredPackagesAreLoaded.
self setUp.
[
- [self openDebuggerOnFailingTestMethod] ensure: [self safeTearDown]
+ [self openDebuggerOnFailingTestMethod] ensure: [self safeTearDown]
] fork
- "Modified: / 21.6.2000 / 10:04:33 / Sames"
+ "Modified: / 21-06-2000 / 10:04:33 / Sames"
+ "Modified: / 29-05-2019 / 01:34:10 / Claus Gittinger"
!
runCaseAsFailure: aSemaphore
+ self ensureRequiredPackagesAreLoaded.
[
|didSetup|
@@ -1142,6 +1178,7 @@
] ensure: [aSemaphore signal].
"Modified: / 13-07-2017 / 14:03:44 / cg"
+ "Modified: / 29-05-2019 / 01:34:30 / Claus Gittinger"
! !
!TestCase::Should class methodsFor:'documentation'!