--- 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 $'
! !