Skip to content

Commit

Permalink
Merge pull request #42 from jecisc/30-Add-tests-on-cleaners-about-ins…
Browse files Browse the repository at this point in the history
…tanceclass-sides-cleanings

30-Add-tests-on-cleaners-about-instanceclass-sides-cleanings
  • Loading branch information
jecisc committed Apr 15, 2020
2 parents 1733c12 + 85c8e6c commit 70e8169
Show file tree
Hide file tree
Showing 10 changed files with 202 additions and 9 deletions.
36 changes: 36 additions & 0 deletions src/Chanel-Tests/ChanelConditionalSimplifierCleanerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,39 @@ ChanelConditionalSimplifierCleanerTest >> testIsNotNilIfTrue [
ChanelConditionalSimplifierCleanerTest >> testIsNotNilIfTrueIfFalse [
self assert: '10 isNotNil ifTrue: [ false ] ifFalse: [ true ]' isRewrittenAs: '10 ifNil: [ true ] ifNotNil: [ false ]'
]

{ #category : #tests }
ChanelConditionalSimplifierCleanerTest >> testReplacementOnClassSide [
class class
compile:
('{1}
{2}' format: {self selector . '10 isNil ifFalse: [ false ]'}).

self runCleaner.

self
assert: (class class >> self selector) sourceCode
equals:
('{1}
{2}' format: {self selector . '10 ifNotNil: [ false ]'})
]

{ #category : #tests }
ChanelConditionalSimplifierCleanerTest >> testWithNothingToReplace [
| oldMethod |
class
compile:
('{1}
{2}' format: {self selector . '10 ifNotNil: [ false ]'}).

oldMethod := class >> self selector.
self runCleaner.

self
assert: (class >> self selector) sourceCode
equals:
('{1}
{2}' format: {self selector . '10 ifNotNil: [ false ]'}).

self assert: class >> self selector identicalTo: oldMethod
]
Original file line number Diff line number Diff line change
Expand Up @@ -153,3 +153,27 @@ ChanelDuplicatedMethodFromTraitCleanerTest >> testRemoveDuplicatedMethodFromTrai
self assert: (trait localSelectors includes: #one).
self deny: (class localSelectors includes: #one)
]

{ #category : #tests }
ChanelDuplicatedMethodFromTraitCleanerTest >> testRemoveDuplicatedMethodFromTraitOnClassSide [
| trait |
class := self createClassNamed: #ChanelDuplicatedMethodFromTraitFake.
trait := self createTraitNamed: #TChanelDuplicatedMethodFromTraitFake.

class addToComposition: trait.

trait class
compile:
'one
^ #one'.

class class
compile:
'one
^ #one'.

self runCleaner.

self assert: (trait class localSelectors includes: #one).
self deny: (class class localSelectors includes: #one)
]
36 changes: 36 additions & 0 deletions src/Chanel-Tests/ChanelEnsureSuperIsCalledCleanerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,24 @@ ChanelEnsureSuperIsCalledCleanerTest >> testDoesNotAddSuperSetUpIfEmptyMethod [
self assert: oldMethod identicalTo: class >> #setUp
]

{ #category : #'tests - setup' }
ChanelEnsureSuperIsCalledCleanerTest >> testDoesNotAddSuperSetUpOnClassSide [
class class compile: 'setUp
self assert: true'.

oldMethod := class class>> #setUp.

self runCleaner.

self
assert: (class class>> #setUp) sourceCode
equals: 'setUp
self assert: true'.

"In case there is nothing to change, we should *not* recompile the method, thus it should be identical."
self assert: oldMethod identicalTo: class class>> #setUp
]

{ #category : #'tests - setup' }
ChanelEnsureSuperIsCalledCleanerTest >> testDoesNotAddSuperSetUpWhenAlreadyThere [
class := self createTestCaseNamed: #ChanelTestClass.
Expand Down Expand Up @@ -222,6 +240,24 @@ ChanelEnsureSuperIsCalledCleanerTest >> testDoesNotAddSuperTearDownIfEmptyMethod
self assert: oldMethod identicalTo: class >> #tearDown
]

{ #category : #'tests - teardown' }
ChanelEnsureSuperIsCalledCleanerTest >> testDoesNotAddSuperTearDownOnClassSide [
class class compile: 'tearDown
self assert: true'.

oldMethod := class class>> #tearDown.

self runCleaner.

self
assert: (class class>> #tearDown) sourceCode
equals: 'tearDown
self assert: true'.

"In case there is nothing to change, we should *not* recompile the method, thus it should be identical."
self assert: oldMethod identicalTo: class class>> #tearDown
]

{ #category : #'tests - teardown' }
ChanelEnsureSuperIsCalledCleanerTest >> testDoesNotAddSuperTearDownWhenAlreadyThere [
class := self createTestCaseNamed: #ChanelTestClass.
Expand Down
12 changes: 12 additions & 0 deletions src/Chanel-Tests/ChanelMethodsOnlyCallingSuperCleanerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,15 @@ ChanelMethodsOnlyCallingSuperCleanerTest >> testRemoveMethodOnlyCollingSuperEven

self deny: (class localSelectors includes: #initialize)
]

{ #category : #tests }
ChanelMethodsOnlyCallingSuperCleanerTest >> testRemoveMethodOnlyCollingSuperOnClassSide [
class class
compile:
'initialize
super initialize'.

self runCleaner.

self deny: (class class localSelectors includes: #initialize)
]
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,19 @@ ChanelNilAssignationInInitializeCleanerTest >> testRemoveNilAssigment [
super initialize'
]

{ #category : #tests }
ChanelNilAssignationInInitializeCleanerTest >> testRemoveNilAssigmentOnClassSide [
class class
compile:
'initialize
test := nil'.

self runCleaner.

self assert: (class class >> #initialize) sourceCode equals: 'initialize
'
]

{ #category : #tests }
ChanelNilAssignationInInitializeCleanerTest >> testRemoveNilAssigments [
class
Expand Down
18 changes: 18 additions & 0 deletions src/Chanel-Tests/ChanelProtocolsCleanerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,15 @@ ChanelProtocolsCleanerTest >> testMethodInSpecificProtocolNotUpdateIfNotInTheLis
self assert: (class >> #initialize2) protocol equals: 'random'
]

{ #category : #tests }
ChanelProtocolsCleanerTest >> testMethodInSpecificProtocolOnClassSide [
class class compile: 'initialize' classified: 'random'.

self runCleaner.

self assert: (class class>> #initialize) protocol equals: 'initialization'
]

{ #category : #tests }
ChanelProtocolsCleanerTest >> testTestMethodInSpecificProtocol [
class := self createTestCaseNamed: #ChanelProtocolsFake.
Expand Down Expand Up @@ -135,3 +144,12 @@ ChanelProtocolsCleanerTest >> testUpdateCloseProtocol [

self assert: (class >> #method) protocol equals: 'instance creation'
]

{ #category : #tests }
ChanelProtocolsCleanerTest >> testUpdateCloseProtocolOnClassSide [
class class compile: 'method' classified: 'instance-creation'.

self runCleaner.

self assert: (class class>> #method) protocol equals: 'instance creation'
]
36 changes: 36 additions & 0 deletions src/Chanel-Tests/ChanelTestEqualityCleanerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,22 @@ ChanelTestEqualityCleanerTest >> testDenyIdenticalTo [
self assert: 'self deny: 3 == 2' isRewrittenAs: 'self deny: 3 identicalTo: 2'
]

{ #category : #tests }
ChanelTestEqualityCleanerTest >> testReplacementOnClassSide [
class class
compile:
('{1}
{2}' format: {self selector . 'self assert: 3 = 2'}).

self runCleaner.

self
assert: (class class >> self selector) sourceCode
equals:
('{1}
{2}' format: {self selector . 'self assert: 3 equals: 2'})
]

{ #category : #tests }
ChanelTestEqualityCleanerTest >> testShouldNotReplaceIfNotATestCase [
"We only replace the assertion of TestCase because other objects are much poorer in term of assertions."
Expand All @@ -92,3 +108,23 @@ ChanelTestEqualityCleanerTest >> testShouldNotReplaceIfNotATestCase [
('{1}
{2}' format: {self selector . 'self assert: 3 = 2'})
]

{ #category : #tests }
ChanelTestEqualityCleanerTest >> testWithNothingToReplace [
| oldMethod |
class
compile:
('{1}
{2}' format: {self selector . 'self assert: 3 equals: 2'}).

oldMethod := class >> self selector.
self runCleaner.

self
assert: (class >> self selector) sourceCode
equals:
('{1}
{2}' format: {self selector . 'self assert: 3 equals: 2'}).

self assert: class >> self selector identicalTo: oldMethod
]
21 changes: 21 additions & 0 deletions src/Chanel-Tests/ChanelUnreadTemporaryCleanerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,27 @@ ChanelUnreadTemporaryCleanerTest >> testRemoveTemporaries [
^#one'
]

{ #category : #tests }
ChanelUnreadTemporaryCleanerTest >> testRemoveTemporariesOnClassSide [
class class
compile:
'testMethod
| test test2 |
test := self toto.
test2 := self toto2.
^#one'.

self runCleaner.

self
assert: (class class>> #testMethod) sourceCode
equals:
'testMethod
self toto.
self toto2.
^#one'
]

{ #category : #tests }
ChanelUnreadTemporaryCleanerTest >> testRemoveTemporary [
class
Expand Down
10 changes: 2 additions & 8 deletions src/Chanel/ChanelAbstractCleaner.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,6 @@ ChanelAbstractCleaner >> configuration: anObject [

{ #category : #rewriting }
ChanelAbstractCleaner >> rewriteMethodsOf: classes with: rewriter [
classes
do: [ :class |
class localMethods
do: [ :method |
| ast |
ast := method ast.
(rewriter executeTree: ast) ifTrue: [ class compile: ast formattedCode ] ] ]
displayingProgress: [ :c | c printString ]
(classes flatCollect: [ :class | class localMethods , class class localMethods ])
do: [ :method | (rewriter executeTree: method ast) ifTrue: [ method ast install ] ]
]
5 changes: 4 additions & 1 deletion src/Chanel/ClassDescription.extension.st
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@ Extension { #name : #ClassDescription }
{ #category : #'*Chanel' }
ClassDescription >> removeDuplicatedMethodsFromTrait [
self localMethods
do: [ :method | self traitComposition compiledMethodAt: method selector ifPresent: [ :m | m ast = method ast ifTrue: [ method removeFromSystem ] ] ]
do: [ :method | self traitComposition compiledMethodAt: method selector ifPresent: [ :m | m ast = method ast ifTrue: [ method removeFromSystem ] ] ].

self class localMethods
do: [ :method | self traitComposition classComposition compiledMethodAt: method selector ifPresent: [ :m | m ast = method ast ifTrue: [ method removeFromSystem ] ] ].
]

0 comments on commit 70e8169

Please sign in to comment.