--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/quickSelfTest/RunUnitTests.st Tue Mar 21 16:03:37 2017 +0100
@@ -0,0 +1,162 @@
+'From Smalltalk/X, Version:7.1.0.0 on 21-03-2017 at 14:52:37' !
+
+"{ Package: 'stx:goodies/regression' }"
+
+"{ NameSpace: Smalltalk }"
+
+Object subclass:#RunUnitTests
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'tests-Regression'
+!
+
+!RunUnitTests class methodsFor:'documentation'!
+
+documentation
+"
+ documentation to be added.
+
+ [author:]
+ sr
+
+ [instance variables:]
+
+ [class variables:]
+
+ [see also:]
+
+"
+! !
+
+!RunUnitTests class methodsFor:'actions'!
+
+run
+ |doRunSpecificUnitTests unitTestSuiteName excludedUnitTestClassNames corruptedUnitTestClassNames
+ cmdArgs
+ unitTestSuite
+ eachClassName eachClass
+ result|
+
+ doRunSpecificUnitTests := false.
+ unitTestSuiteName := 'All Unit Tests'.
+ excludedUnitTestClassNames := self excludedUnitTestClassNamesForAll.
+ corruptedUnitTestClassNames := self corruptedUnitTestClassNames.
+
+ cmdArgs := Smalltalk commandLineArguments.
+ (cmdArgs includes:'--runOnlyExpeccoUnitTests') ifTrue:[
+ self logInfo:'configured to run expecco unit tests only'.
+ doRunSpecificUnitTests := true.
+ unitTestSuiteName := 'expecco Unit Tests'.
+ excludedUnitTestClassNames := self excludedUnitTestClassNamesForExpecco.
+ ].
+
+ doRunSpecificUnitTests ifFalse:[
+ self logInfo:'configured to run all available unit tests'.
+ ].
+
+ self logInfo:'collecting unit test classes to run'.
+ unitTestSuite := TestSuite named:unitTestSuiteName.
+ (Smalltalk at: #'stx_goodies_regression') classNamesAndAttributes do:[:eachClassNameAndAttributes |
+ eachClassNameAndAttributes isSymbol ifTrue:[
+ eachClassName := eachClassNameAndAttributes.
+ ] ifFalse:[
+ eachClassName := eachClassNameAndAttributes
+ firstIfEmpty:nil.
+ ].
+
+ (corruptedUnitTestClassNames includes:eachClassName) ifTrue:[
+ self
+ logWarning:('corrupted unit test class detected, please fix #%1'
+ bindWith:eachClassName).
+ ] ifFalse:[
+ (excludedUnitTestClassNames includes:eachClassName) ifFalse:[
+ eachClassName notNil ifTrue:[
+ eachClass := Smalltalk
+ fileInClass:eachClassName
+ package:'stx:goodies/regression'.
+
+ eachClass notNil ifTrue:[
+ eachClass isTestCaseLike ifTrue:[
+ unitTestSuite addTest:eachClass suite.
+ ].
+ ].
+ ].
+ ].
+ ].
+ ].
+
+ self
+ logInfo:('%1 unit test classes collected'
+ bindWith:unitTestSuite tests size).
+
+ self logInfo:'starting unit tests'.
+ result := unitTestSuite
+ run:TestResultStX new
+ beforeEachDo:[:test | self logInfo:'performing unit test ', test printString]
+ afterEachDo:[:test| ]
+ debug:(cmdArgs includes:'--debug').
+
+ self logInfo:'generating report'.
+ TestResultReporter
+ report:result
+ format:#xml_jUnit
+ as:'testresult.xml'.
+
+ self logInfo:'summary:'.
+ self logInfo:('%1 tests' bindWith:result runCount).
+ self logInfo:('%1 passed' bindWith:result passedCount).
+ self logInfo:('%1 failed' bindWith:result failureCount).
+ self logInfo:('%1 errors' bindWith:result errorCount).
+! !
+
+!RunUnitTests class methodsFor:'constants'!
+
+corruptedUnitTestClassNames
+ ^ #(
+ #'RegressionTests::ExternalInterfaceTests'
+ #'RegressionTests::Win32OLETests'
+ #'RegressionTests::HTTPServerTests'
+ #'RegressionTests::SocketTests'
+ #'RegressionTests::DelayTest'
+ #'RegressionTests::ContextTest2'
+ #'RegressionTests::DebuggerTest'
+ #'RegressionTests::OperatingSystem'
+ )
+!
+
+excludedUnitTestClassNamesForAll
+ ^ #()
+!
+
+excludedUnitTestClassNamesForExpecco
+ ^ self excludedUnitTestClassNamesForAll
+ , #(
+
+ )
+! !
+
+!RunUnitTests class methodsFor:'logging'!
+
+log:aString
+ type:aType
+
+ Stdout
+ showCR:('%1 [%2] : %3'
+ bindWith:Timestamp now printString
+ with:(aType printString asLowercase paddedTo:'warning' size)
+ with:aString).
+!
+
+logInfo:aString
+ self
+ log:aString
+ type:'INFO'
+!
+
+logWarning:aString
+ self
+ log:aString
+ type:'WARNING'
+! !
+