checkin from browser
authorClaus Gittinger <cg@exept.de>
Tue, 04 Dec 2001 10:06:25 +0100
changeset 39 08ee278b27cb
parent 38 5fb751a669eb
child 40 b27893ae4b99
checkin from browser
TestRunner.st
--- a/TestRunner.st	Wed Nov 21 16:05:07 2001 +0100
+++ b/TestRunner.st	Tue Dec 04 10:06:25 2001 +0100
@@ -3,7 +3,7 @@
 ApplicationModel subclass:#TestRunner
 	instanceVariableNames:'result lastPass defect allDefects defectMenu details mode
 		scriptModel script numberOfTestsToRun testsWhichFailed
-		testsWhichPassed'
+		testsWhichPassed categoryModel category'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'SUnit-UI'
@@ -57,103 +57,109 @@
 
     ^ 
      #(#FullSpec
-	#name: #windowSpec
-	#window: 
+        #name: #windowSpec
+        #window: 
        #(#WindowSpec
-	  #label: 'SUnit Camp Smalltalk 2.7b TestRunner'
-	  #name: 'SUnit Camp Smalltalk 2.7b TestRunner'
-	  #min: #(#Point 362 122)
-	  #bounds: #(#Rectangle 16 46 509 221)
-	  #icon: #defaultIcon
-	)
-	#component: 
+          #label: 'SUnit Camp Smalltalk 2.7c TestRunner'
+          #name: 'SUnit Camp Smalltalk 2.7c TestRunner'
+          #min: #(#Point 362 122)
+          #bounds: #(#Rectangle 177 150 670 325)
+          #icon: #defaultIcon
+        )
+        #component: 
        #(#SpecCollection
-	  #collection: #(
-	   #(#ActionButtonSpec
-	      #label: 'Refresh'
-	      #name: 'Button3'
-	      #layout: #(#LayoutFrame 0 0 0 0 75 0 24 0)
-	      #model: #refreshSuites
-	    )
-	   #(#MenuButtonSpec
-	      #label: 'ExampleSetTest'
-	      #name: #tests
-	      #layout: #(#LayoutFrame 76 0 0 0 -216 1 24 0)
-	      #model: #script
-	      #menu: #scriptModel
-	      #useIndex: true
-	    )
-	   #(#ActionButtonSpec
-	      #label: 'Run'
-	      #name: 'Button1'
-	      #layout: #(#LayoutFrame -215 1 0 0 -160 1 24 0)
-	      #model: #runTests
-	      #enableChannel: #enableRunButton
-	    )
-	   #(#ActionButtonSpec
-	      #label: 'ReRun Defects'
-	      #name: 'Button5'
-	      #layout: #(#LayoutFrame -159 1 0 0 -57 1 24 0)
-	      #model: #runDefects
-	      #enableChannel: #enableRunDefectsButton
-	    )
-	   #(#ActionButtonSpec
-	      #label: 'Run All'
-	      #name: 'Button2'
-	      #layout: #(#LayoutFrame -56 1 0 0 0 1 24 0)
-	      #model: #runAllTests
-	    )
-	   #(#LabelSpec
-	      #label: 'N/A'
-	      #name: 'mode'
-	      #layout: #(#LayoutFrame 0 0 25 0 0 1 0 0.5)
-	      #style: #(#FontDescription #Arial #bold #roman 14)
-	      #labelChannel: #mode
-	    )
-	   #(#LabelSpec
-	      #label: '...'
-	      #name: 'details'
-	      #layout: #(#LayoutFrame 0 0 0 0.5 0 1 -25 1)
-	      #labelChannel: #details
-	    )
-	   #(#MenuButtonSpec
-	      #name: #defects
-	      #layout: #(#LayoutFrame 0 0 -24 1 -152 1 0 1)
-	      #isOpaque: true
-	      #flags: 40
-	      #model: #selectionHolder
-	      #initiallyDisabled: true
-	      #enableChannel: #enableDefectsList
-	      #menu: #defectMenu
-	    )
-	   #(#ActionButtonSpec
-	      #label: 'Browse'
-	      #name: 'Button4'
-	      #layout: #(#LayoutFrame -151 1 -24 1 -76 1 0 1)
-	      #model: #browseSelectedTestCase
-	      #initiallyDisabled: true
-	      #enableChannel: #enableRunButton
-	    )
-	   #(#ActionButtonSpec
-	      #label: 'Debug'
-	      #name: 'Button6'
-	      #layout: #(#LayoutFrame -75 1 -24 1 0 1 0 1)
-	      #model: #debugSelectedFailure
-	      #initiallyDisabled: true
-	      #enableChannel: #enableDebugButton
-	    )
-	   #(#ProgressIndicatorSpec
-	      #name: 'ProgressIndicator1'
-	      #layout: #(#LayoutFrame 0 0.0 25 0 0 1.0 36 0)
-	      #visibilityChannel: #percentageIndicatorVisible
-	      #model: #percentageDone
-	      #foregroundColor: #(#Color 32.9992 32.9992 0.0)
-	      #backgroundColor: #(#Color 66.9993 66.9993 0.0)
-	      #showPercentage: false
-	    )
-	   )
+          #collection: #(
+           #(#ActionButtonSpec
+              #label: 'Refresh'
+              #name: 'Button3'
+              #layout: #(#LayoutFrame 0 0 0 0 75 0 48 0)
+              #model: #refreshSuites
+            )
+           #(#MenuButtonSpec
+              #name: 'category'
+              #layout: #(#LayoutFrame 76 0 0 0 -216 1 24 0)
+              #model: #category
+              #menu: #categoryList
+            )
+           #(#MenuButtonSpec
+              #label: 'ExampleSetTest'
+              #name: #tests
+              #layout: #(#LayoutFrame 76 0 24 0 -216 1 48 0)
+              #model: #script
+              #menu: #scriptModel
+              #useIndex: true
+            )
+           #(#ActionButtonSpec
+              #label: 'Run'
+              #name: 'Button1'
+              #layout: #(#LayoutFrame -215 1 0 0 -160 1 48 0)
+              #model: #runTests
+              #enableChannel: #enableRunButton
+            )
+           #(#ActionButtonSpec
+              #label: 'ReRun Defects'
+              #name: 'Button5'
+              #layout: #(#LayoutFrame -159 1 0 0 -57 1 48 0)
+              #model: #runDefects
+              #enableChannel: #enableRunDefectsButton
+            )
+           #(#ActionButtonSpec
+              #label: 'Run All'
+              #name: 'Button2'
+              #layout: #(#LayoutFrame -56 1 0 0 0 1 48 0)
+              #model: #runAllTests
+            )
+           #(#ProgressIndicatorSpec
+              #name: 'ProgressIndicator1'
+              #layout: #(#LayoutFrame 0 0.0 49 0 0 1.0 60 0)
+              #visibilityChannel: #percentageIndicatorVisible
+              #model: #percentageDone
+              #foregroundColor: #(#Color 32.9992 32.9992 0.0)
+              #backgroundColor: #(#Color 66.9993 66.9993 0.0)
+              #showPercentage: false
+            )
+           #(#LabelSpec
+              #label: 'N/A'
+              #name: 'mode'
+              #layout: #(#LayoutFrame 0 0 49 0 0 1 0 0.5)
+              #style: #(#FontDescription #Arial #bold #roman 14)
+              #labelChannel: #mode
+            )
+           #(#LabelSpec
+              #label: '...'
+              #name: 'details'
+              #layout: #(#LayoutFrame 0 0 0 0.5 0 1 -25 1)
+              #labelChannel: #details
+            )
+           #(#MenuButtonSpec
+              #name: #defects
+              #layout: #(#LayoutFrame 0 0 -24 1 -152 1 0 1)
+              #isOpaque: true
+              #flags: 40
+              #model: #selectionHolder
+              #initiallyDisabled: true
+              #enableChannel: #enableDefectsList
+              #menu: #defectMenu
+            )
+           #(#ActionButtonSpec
+              #label: 'Browse'
+              #name: 'Button4'
+              #layout: #(#LayoutFrame -151 1 -24 1 -76 1 0 1)
+              #model: #browseSelectedTestCase
+              #initiallyDisabled: true
+              #enableChannel: #enableRunButton
+            )
+           #(#ActionButtonSpec
+              #label: 'Debug'
+              #name: 'Button6'
+              #layout: #(#LayoutFrame -75 1 -24 1 0 1 0 1)
+              #model: #debugSelectedFailure
+              #initiallyDisabled: true
+              #enableChannel: #enableDebugButton
+            )
+           )
          
-	)
+        )
       )
 ! !
 
@@ -193,13 +199,30 @@
      (if this app is embedded in a subCanvas)."
 
     ^ #(
-	#script
+        #script
       ).
 
 ! !
 
 !TestRunner methodsFor:'Accessing'!
 
+category
+    |holder|
+
+    (holder := builder bindingAt:#category) isNil ifTrue:[
+        holder := '* all *' asValue.
+        builder aspectAt:#category put:holder.
+        holder onChangeSend:#categorySelectionChanged to:self.
+    ].
+    ^ holder.
+!
+
+categoryList
+    ^categoryModel isNil 
+        ifTrue: [categoryModel := ValueHolder new. self updateCategoryList. categoryModel]
+        ifFalse: [categoryModel]
+!
+
 defectMenu
     "automatically generated by UIPainter ..."
 
@@ -369,6 +392,10 @@
     ]
 !
 
+categorySelectionChanged
+    self updateSuitesList
+!
+
 debugSelectedFailure
 	self debugTest: self selection
 
@@ -468,12 +495,14 @@
 !
 
 refreshSuites
-	self updateSuitesList.
-	self script value:nil.
-	self tests selection: 0.
-	self defects selection: 0.
-	result := TestResult new.
-	self displayRefresh
+        self updateCategoryList.
+        self updateSuitesList.
+
+        self script value:nil.
+        self tests selection: 0.
+        self defects selection: 0.
+        result := TestResult new.
+        self displayRefresh
 
     "Created: / 21.6.2000 / 10:58:34 / Sames"
     "Modified: / 21.6.2000 / 12:19:54 / Sames"
@@ -514,13 +543,41 @@
         Cursor 
             wait
                 showWhile:[
+                    |errorCountBefore failureCountBefore|
+
                     self displayRunning.
                     aTestSuite addDependentToHierachy: self.
                     result := TestResult new.
                     self showPercentageIndicator.
 
+                    errorCountBefore :=  result errorCount.
+                    failureCountBefore := result failureCount.
+
                     [
-                        aTestSuite run:result
+                        aTestSuite 
+                            run:result 
+                            afterEachDo:[:eachCase :eachResult |  
+                                |caseName passed errorCountAfter failureCountAfter|
+
+                                caseName := eachCase name.
+                                caseName size == 0 ifTrue:[self halt].
+
+                                errorCountAfter := result errorCount.
+                                failureCountAfter := result failureCount.
+                                passed := (errorCountAfter == errorCountBefore) 
+                                          & (failureCountAfter == failureCountBefore).
+
+                                passed == true ifTrue:[
+                                    testsWhichPassed add:caseName.
+                                    testsWhichFailed remove:caseName ifAbsent:nil.
+                                ] ifFalse:[
+                                    testsWhichFailed add:caseName.
+                                    testsWhichPassed remove:caseName ifAbsent:nil.
+                                ].
+                                errorCountBefore :=  errorCountAfter.
+                                failureCountBefore := failureCountAfter
+
+                            ]
                     ] ensure: [
                         aTestSuite removeDependentFromHierachy: self.
                         self hidePercentageIndicator.
@@ -578,11 +635,32 @@
     "Modified: / 21.6.2000 / 11:32:54 / Sames"
 !
 
+suitesInCategory
+        |suites cat allCategories|
+
+        cat := self category value.
+        allCategories := (cat = '* all *').
+
+        suites := TestCase allSubclasses 
+                        select:[:each | allCategories or:[cat = each category]]
+                        thenCollect: [:each | each name].
+        suites sort.
+        ^ suites 
+!
+
+updateCategoryList
+        |categories|
+
+        categories := (TestCase allSubclasses collect: [:each | each category]) asSet asOrderedCollection.
+        categories sort.
+        categories addFirst:'* all *'.
+        self categoryList value:categories.
+!
+
 updateSuitesList
         |suites|
 
-        suites := TestCase allSubclasses collect: [:each | each name].
-        suites sort.
+        suites := self suitesInCategory.
         suites := suites 
                     collect:[:eachSuiteName |
                                 (testsWhichFailed includes:eachSuiteName) ifTrue:[
@@ -604,10 +682,12 @@
         "generate and return a suite for all tests, except SUnitTests"
 
         | tokens stream suite|
-        tokens := (TestCase subclasses collect: [:each | each name , '* '])
-                                copyWithout: 'SUnitTest* '.
+
+        tokens := (self suitesInCategory
+                          collect: [:eachName | eachName ", '*' " ])
+                      copyWithout: 'SUnitTest* '.
         stream := WriteStream on: String new.
-        tokens do: [:each | stream nextPutAll: each].
+        tokens do: [:each | stream nextPutAll:each; space].
         suite := TestSuitesScripter run: stream contents.
         suite name:'all'.
         ^ suite
@@ -787,7 +867,7 @@
 !
 
 displayRunning
-        self displayRunning:self selectedScript string.
+        self displayRunning:(self selectedScript ? 'all') string.
 !
 
 displayRunning:scriptName
@@ -842,15 +922,18 @@
         |script|
 
         script := self selectedScript.
+        script notNil ifTrue:[script := script string].
 
         self displayDefects: result defects.
 
-        result hasPassed ifTrue:[
-            testsWhichPassed add:script.
-            testsWhichFailed remove:script ifAbsent:nil.
-        ] ifFalse:[
-            testsWhichFailed add:script.
-            testsWhichPassed remove:script ifAbsent:nil.
+        script notNil ifTrue:[
+            result hasPassed ifTrue:[
+                testsWhichPassed add:script.
+                testsWhichFailed remove:script ifAbsent:nil.
+            ] ifFalse:[
+                testsWhichFailed add:script.
+                testsWhichPassed remove:script ifAbsent:nil.
+            ].
         ].
 !
 
@@ -865,5 +948,5 @@
 !TestRunner class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestRunner.st,v 1.20 2001-11-21 15:05:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestRunner.st,v 1.21 2001-12-04 09:06:25 cg Exp $'
 ! !