forked from pharo-contributions/mutalk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMTPredicateBasedMutantOperator.class.st
81 lines (63 loc) · 2.1 KB
/
MTPredicateBasedMutantOperator.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Class {
#name : 'MTPredicateBasedMutantOperator',
#superclass : 'MTAbstractMutantOperator',
#category : 'MuTalk-Model-Operators - Abstract',
#package : 'MuTalk-Model',
#tag : 'Operators - Abstract'
}
{ #category : 'testing' }
MTPredicateBasedMutantOperator class >> isAbstract [
^ self == MTPredicateBasedMutantOperator
]
{ #category : 'testing' }
MTPredicateBasedMutantOperator class >> isOriginalOperator [
^ false
]
{ #category : 'private' }
MTPredicateBasedMutantOperator >> affectedNodeFor: aParseTree at: nodeIndex [
| allNodes |
allNodes := self affectedNodesFor: aParseTree.
^ allNodes at: nodeIndex
]
{ #category : 'private' }
MTPredicateBasedMutantOperator >> affectedNodesFor: aParseTree [
^ aParseTree allChildren select: [ :aNode |
self appliesToNode: aNode ]
]
{ #category : 'instance creation' }
MTPredicateBasedMutantOperator >> appliesToNode: aNode [
self subclassResponsibility
]
{ #category : 'private' }
MTPredicateBasedMutantOperator >> modifiedSourceFor: aCompiledMethod with: aParseTree number: aNumber newExpression: aNode [
| parseTreeCopy allNodes |
parseTreeCopy := aParseTree copy.
allNodes := self affectedNodesFor: parseTreeCopy.
allNodes size >= aNumber ifTrue: [
| oldNode |
oldNode := allNodes at: aNumber.
oldNode replaceWith: aNode ].
^ parseTreeCopy formattedCode
]
{ #category : 'private' }
MTPredicateBasedMutantOperator >> mutationsFor: aCompiledMethod with: aParseTree number: nodeIndex storeIn: accumulator [
| affectedNode newNode |
affectedNode := self affectedNodeFor: aParseTree at: nodeIndex.
newNode := self newNodeFrom: affectedNode.
accumulator add: (MTMethodMutation
for: aCompiledMethod
using: self
nodeNumber: nodeIndex
ofClass: aCompiledMethod methodClass
withData: newNode).
^ accumulator
]
{ #category : 'instance creation' }
MTPredicateBasedMutantOperator >> newNodeFrom: anOldNode [
self subclassResponsibility
]
{ #category : 'private' }
MTPredicateBasedMutantOperator >> timesToApplyIn: aCompiledMethod with: aParseTree [
"Evaluates how many times can the operator be applyied"
^ (self affectedNodesFor: aParseTree) size
]