Skip to content

Commit 72746ad

Browse files
authored
Merge pull request #117 from DurieuxPol/feat/progressBarLog
Added a progress bar as a logger
2 parents 693737a + 5dd1be6 commit 72746ad

12 files changed

Lines changed: 507 additions & 60 deletions

src/MuTalk-CI-Tests/MTCoveragePropagationPreparationTest.class.st

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ MTCoveragePropagationPreparationTest >> testWorking [
1515
analysis := MTAnalysis new
1616
testClasses: { MTCIHelperTest };
1717
classesToMutate: { MTCIHelper };
18-
budget: MTFreeBudget new.
18+
budget: MTFreeBudget new;
19+
logger: MTNullLogger new.
1920
analysis run.
2021

2122
moreInfo := MTCoveragePropagationPreparation new

src/MuTalk-Model/MTAnalysis.class.st

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ MTAnalysis >> defaultBudget [
6565
{ #category : 'accessing - defaults' }
6666
MTAnalysis >> defaultLogger [
6767

68-
^ MTTranscriptLogger new
68+
^ MTProgressBarLogger new
6969
]
7070

7171
{ #category : 'accessing - defaults' }
@@ -117,42 +117,49 @@ MTAnalysis >> generalResult [
117117
{ #category : 'running' }
118118
MTAnalysis >> generateCoverageAnalysis [
119119

120-
logger logStartCoverageAnalysis.
120+
logger logStartCoverageAnalysis: testCases size.
121121
coverageAnalysisResult := (MTCoverageAnalysis
122122
for: methodsToMutate
123123
running: testCases)
124124
run;
125-
result
125+
result.
126+
logger logEndCoverageAnalysis
126127
]
127128

128129
{ #category : 'running' }
129130
MTAnalysis >> generateMutations [
130131

131-
logger logStartMutationGeneration.
132+
logger logStartMutationGeneration: self methodSize.
132133
^ mutations ifNil: [
133134
mutations := mutantGenerationStrategy
134135
mutationsFor: self
135136
loggingIn: logger.
136-
logger logTotalNumberOfMutations: mutations.
137+
logger
138+
logTotalNumberOfMutations: mutations;
139+
logEndMutationGeneration.
137140
mutations ]
138141
]
139142

140143
{ #category : 'running' }
141144
MTAnalysis >> generateResults [
142145

143146
mutantResults := OrderedCollection new.
144-
logger logStartMutationEvaluation.
147+
logger logStartMutationEvaluation: mutations.
145148

146149
mutations do: [ :aMutation |
147150
(budget exceedsBudgetOn: mutantResults fromTotalMutations: mutations)
148151
ifTrue: [ ^ mutantResults ].
149-
logger logStartEvaluating: aMutation.
152+
logger logStartEvaluating: aMutation with: testCases size.
153+
150154
mutantResults add: ((MTMutantEvaluation
151155
for: aMutation
152156
using: testCases
153157
following: testSelectionStrategy
154158
andConsidering: self coverageAnalysisResult)
155-
valueStoppingOnError: stopOnErrorOrFail) ].
159+
valueStoppingOnError: stopOnErrorOrFail).
160+
logger logEndEvaluating ].
161+
162+
logger logEndMutationEvaluation.
156163
logger logEnd.
157164
^ mutantResults
158165
]
@@ -161,7 +168,10 @@ MTAnalysis >> generateResults [
161168
MTAnalysis >> initialTestRun [
162169
"Runs all tests once and filters them"
163170

164-
testCases do: [ :aTestCase | aTestCase run ].
171+
| results |
172+
logger logStartInitialTestRun: testCases size.
173+
results := testCases collect: [ :aTestCase | aTestCase run ].
174+
logger logEndInitialTestRun.
165175

166176
"The test filter is initialized lazily here because the default one needs the run time of tests, so the initial test run must be executed first"
167177
testCases := self testFilter filterTests: testCases.
@@ -198,6 +208,12 @@ MTAnalysis >> logger: anObject [
198208
logger := anObject
199209
]
200210

211+
{ #category : 'as yet unclassified' }
212+
MTAnalysis >> methodSize [
213+
214+
^ (self modelClasses flatCollect: #methods) size
215+
]
216+
201217
{ #category : 'accessing' }
202218
MTAnalysis >> methodsToMutate [
203219

@@ -292,16 +308,23 @@ MTAnalysis >> run [
292308
those classes) and execute all mutants in the set of testClases.
293309
We obtain a result for each mutant generated"
294310

295-
self initialTestRun.
296-
297-
"The budget is started after the initial test run because the default one needs the run time of tests"
298-
budget start.
299-
logger logAnalysisStartFor: self.
300-
301311
elapsedTime := [
302-
self generateCoverageAnalysis.
303-
self generateMutations.
304-
self generateResults ] timeToRun
312+
logger logAnalysisStart.
313+
self initialTestRun.
314+
self startBudget.
315+
[
316+
self generateCoverageAnalysis.
317+
self generateMutations.
318+
self generateResults ] timeToRun ] ensure: [
319+
logger release ]
320+
]
321+
322+
{ #category : 'starting' }
323+
MTAnalysis >> startBudget [
324+
"The budget is initialized here because the default one needs the run time of tests, so the initial test run must be executed first"
325+
326+
budget ifNil: [ budget := self defaultBudget ].
327+
budget start
305328
]
306329

307330
{ #category : 'accessing' }

src/MuTalk-Model/MTAnalysisLogger.class.st

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Class {
77
}
88

99
{ #category : 'logging' }
10-
MTAnalysisLogger >> logAnalysisStartFor: aMutationTestingAnalysis [
10+
MTAnalysisLogger >> logAnalysisStart [
1111
self subclassResponsibility
1212
]
1313

@@ -17,6 +17,36 @@ MTAnalysisLogger >> logEnd [
1717
^ self subclassResponsibility
1818
]
1919

20+
{ #category : 'logging' }
21+
MTAnalysisLogger >> logEndCoverageAnalysis [
22+
23+
^ self subclassResponsibility
24+
]
25+
26+
{ #category : 'logging' }
27+
MTAnalysisLogger >> logEndEvaluating [
28+
29+
self subclassResponsibility
30+
]
31+
32+
{ #category : 'logging' }
33+
MTAnalysisLogger >> logEndInitialTestRun [
34+
35+
self subclassResponsibility
36+
]
37+
38+
{ #category : 'logging' }
39+
MTAnalysisLogger >> logEndMutationEvaluation [
40+
41+
self subclassResponsibility
42+
]
43+
44+
{ #category : 'logging' }
45+
MTAnalysisLogger >> logEndMutationGeneration [
46+
47+
self subclassResponsibility
48+
]
49+
2050
{ #category : 'logging' }
2151
MTAnalysisLogger >> logNumberOfGeneratedMutations: aNumber [
2252

@@ -35,24 +65,31 @@ MTAnalysisLogger >> logStartBuildingMutantionsFor: aCompiledMethod using: aMutan
3565
]
3666

3767
{ #category : 'logging' }
38-
MTAnalysisLogger >> logStartCoverageAnalysis [
68+
MTAnalysisLogger >> logStartCoverageAnalysis: testSize [
3969

4070
^ self subclassResponsibility
4171
]
4272

4373
{ #category : 'logging' }
44-
MTAnalysisLogger >> logStartEvaluating: aMethodMutation [
74+
MTAnalysisLogger >> logStartEvaluating: aMethodMutation with: testSize [
75+
76+
self subclassResponsibility
77+
]
78+
79+
{ #category : 'logging' }
80+
MTAnalysisLogger >> logStartInitialTestRun: testSize [
81+
4582
self subclassResponsibility
4683
]
4784

4885
{ #category : 'logging' }
49-
MTAnalysisLogger >> logStartMutationEvaluation [
86+
MTAnalysisLogger >> logStartMutationEvaluation: mutants [
5087

5188
^ self subclassResponsibility
5289
]
5390

5491
{ #category : 'logging' }
55-
MTAnalysisLogger >> logStartMutationGeneration [
92+
MTAnalysisLogger >> logStartMutationGeneration: methodSize [
5693

5794
^ self subclassResponsibility
5895
]
@@ -62,3 +99,16 @@ MTAnalysisLogger >> logTotalNumberOfMutations: mutations [
6299

63100
^ self subclassResponsibility
64101
]
102+
103+
{ #category : 'private' }
104+
MTAnalysisLogger >> methodNameOf: aCompiledMethod [
105+
106+
^ aCompiledMethod methodClass name asString , '>>'
107+
, aCompiledMethod selector printString
108+
]
109+
110+
{ #category : 'dependencies' }
111+
MTAnalysisLogger >> release [
112+
113+
"Hook for subclasses. Called after the analysis is done, either because of success of exception/unwind"
114+
]

src/MuTalk-Model/MTFileLogger.class.st

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,9 @@ MTFileLogger >> initializeToFileNamed: aString [
3939
fileReference := aString asFileReference.
4040
self initialize
4141
]
42+
43+
{ #category : 'dependencies' }
44+
MTFileLogger >> release [
45+
46+
stream close
47+
]

src/MuTalk-Model/MTMethodMutation.class.st

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ MTMethodMutation >> printOn: aStream [
175175
MTMethodMutation >> runMutantStoppingOnError: aBoolean in: anEvaluation [
176176

177177
| testResults brokenTests |
178+
"1halt."
178179
[
179180
EpMonitor disableDuring: [
180181
testResults := [

src/MuTalk-Model/MTMutantGenerationStrategy.class.st

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,11 @@ MTMutantGenerationStrategy >> mutationsFor: aMutationTestingAnalysis loggingIn:
8383

8484
| mutations |
8585
mutations := OrderedCollection new.
86-
(self methodsToMutateFrom: aMutationTestingAnalysis)
87-
do: [ :aMethod |
88-
mutations addAll: (self
89-
mutationsFor: aMethod
90-
usingAll: aMutationTestingAnalysis operators
91-
logginIn: aLogger) ]
92-
displayingProgress: 'Building Mutants'.
86+
(self methodsToMutateFrom: aMutationTestingAnalysis) do: [ :aMethod |
87+
mutations addAll: (self
88+
mutationsFor: aMethod
89+
usingAll: aMutationTestingAnalysis operators
90+
logginIn: aLogger) ].
9391
^ mutantSelectionStrategy shuffleMutants: mutations
9492
]
9593

src/MuTalk-Model/MTNullLogger.class.st

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,43 @@ MTNullLogger class >> new [
1616
]
1717

1818
{ #category : 'logging' }
19-
MTNullLogger >> logAnalysisStartFor: aMutationTestingAnalysis [
19+
MTNullLogger >> logAnalysisStart [
2020
]
2121

2222
{ #category : 'logging' }
2323
MTNullLogger >> logEnd [
2424

2525

26+
]
27+
28+
{ #category : 'logging' }
29+
MTNullLogger >> logEndCoverageAnalysis [
30+
31+
32+
]
33+
34+
{ #category : 'logging' }
35+
MTNullLogger >> logEndEvaluating [
36+
37+
38+
]
39+
40+
{ #category : 'logging' }
41+
MTNullLogger >> logEndInitialTestRun [
42+
43+
44+
]
45+
46+
{ #category : 'logging' }
47+
MTNullLogger >> logEndMutationEvaluation [
48+
49+
50+
]
51+
52+
{ #category : 'logging' }
53+
MTNullLogger >> logEndMutationGeneration [
54+
55+
2656
]
2757

2858
{ #category : 'logging' }
@@ -42,7 +72,7 @@ MTNullLogger >> logStartBuildingMutantionsFor: aCompiledMethod using: aMutantOpe
4272
]
4373

4474
{ #category : 'logging' }
45-
MTNullLogger >> logStartCoverageAnalysis [
75+
MTNullLogger >> logStartCoverageAnalysis: testSize [
4676

4777

4878
]
@@ -52,7 +82,19 @@ MTNullLogger >> logStartEvaluating: aMethodMutation [
5282
]
5383

5484
{ #category : 'logging' }
55-
MTNullLogger >> logStartMutationEvaluation [
85+
MTNullLogger >> logStartEvaluating: aMethodMutation with: testSize [
86+
87+
88+
]
89+
90+
{ #category : 'logging' }
91+
MTNullLogger >> logStartInitialTestRun: testSize [
92+
93+
94+
]
95+
96+
{ #category : 'logging' }
97+
MTNullLogger >> logStartMutationEvaluation: mutants [
5698

5799

58100
]
@@ -61,6 +103,12 @@ MTNullLogger >> logStartMutationEvaluation [
61103
MTNullLogger >> logStartMutationGeneration [
62104

63105

106+
]
107+
108+
{ #category : 'logging' }
109+
MTNullLogger >> logStartMutationGeneration: methodSize [
110+
111+
64112
]
65113

66114
{ #category : 'logging' }

0 commit comments

Comments
 (0)