#BUGFIX by sr
authorsr
Tue, 10 Oct 2017 15:16:03 +0200
changeset 398 84b58f2602d9
parent 397 84e6ade7aad9
child 399 98d1fb9a0b33
#BUGFIX by sr class: RunUnitTests class added: #runWithCompiledUnitTestClasses:
quickSelfTest/RunUnitTests.st
--- a/quickSelfTest/RunUnitTests.st	Tue Oct 10 15:09:25 2017 +0200
+++ b/quickSelfTest/RunUnitTests.st	Tue Oct 10 15:16:03 2017 +0200
@@ -116,6 +116,97 @@
     self logInfo:('%1 passed' bindWith:result passedCount).
     self logInfo:('%1 failed' bindWith:result failureCount).
     self logInfo:('%1 errors' bindWith:result errorCount).
+!
+
+runWithCompiledUnitTestClasses:useCompiledUnitTestClasses
+    |doRunSpecificUnitTests unitTestSuiteName excludedUnitTestClassNames corruptedUnitTestClassNames
+     cmdArgs
+     unitTestSuite
+     eachClassName eachClass
+     result index settingsFilePathName|
+
+    doRunSpecificUnitTests := false.
+    unitTestSuiteName := 'All Unit Tests'.
+    excludedUnitTestClassNames := self excludedUnitTestClassNamesForAll.
+    corruptedUnitTestClassNames := self corruptedUnitTestClassNames.
+
+    cmdArgs := Smalltalk commandLineArguments.
+    index := cmdArgs indexOf:'--settingsFile'.
+    index > 0 ifTrue:[
+        settingsFilePathName := cmdArgs at:index + 1.
+        self logInfo:'load settings file: ', settingsFilePathName printString.
+        settingsFilePathName asFilename fileIn.
+        self logInfo:'ParserFlags makeCommand: ', ParserFlags makeCommand printString.
+    ].
+
+    (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.
+
+Transcript showCR:'1 ', (Smalltalk at: #'stx_goodies_regression') printString.
+Transcript showCR:'2 ', (Smalltalk at: #'stx_goodies_regression') classNamesAndAttributes printString.
+
+    (Smalltalk at: #'stx_goodies_regression') classNamesAndAttributes do:[:eachClassNameAndAttributes |
+        eachClassNameAndAttributes isSymbol ifTrue:[
+            eachClassName := eachClassNameAndAttributes.
+        ] ifFalse:[
+            eachClassName := eachClassNameAndAttributes
+                firstIfEmpty:nil.
+        ].
+
+        (excludedUnitTestClassNames includes:eachClassName) ifFalse:[
+            (corruptedUnitTestClassNames includes:eachClassName) ifTrue:[
+                self
+                    logWarning:('corrupted unit test class detected, please fix #%1'
+                        bindWith: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'!