SystemOrganization addCategory: #'Refactoring-Tests-Changes'! TestCase subclass: #RBRefactoringChangeTests instanceVariableNames: 'changes' classVariableNames: '' poolDictionaries: '' category: 'Refactoring-Tests-Changes'! !RBRefactoringChangeTests class methodsFor: 'accessing' stamp: 'lr 9/5/2010 19:39'! packageNamesUnderTest ^ #('Refactoring-Changes')! ! !RBRefactoringChangeTests methodsFor: 'utilities' stamp: 'lr 9/5/2010 19:51'! equalityTestFor: aChange self assert: aChange = aChange. self assert: aChange hash = aChange hash! ! !RBRefactoringChangeTests methodsFor: 'utilities' stamp: 'lr 9/6/2010 10:33'! perform: aChange do: aBlock "Perform a change in the system silently, evaluate aBlock and then undo the change again." ^ SystemChangeNotifier uniqueInstance doSilently: [ | undo | undo := aChange execute. aBlock ensure: [ undo execute ] ]! ! !RBRefactoringChangeTests methodsFor: 'mocking' stamp: 'lr 9/6/2010 13:38'! selectionInterval ^ 1 to: 0! ! !RBRefactoringChangeTests methodsFor: 'running' stamp: 'lr 10/2/2010 13:37'! setUp super setUp. changes := CompositeRefactoryChange named: 'testing'! ! !RBRefactoringChangeTests methodsFor: 'utilities' stamp: 'lr 9/5/2010 20:07'! stringTestFor: aChange self assert: (aChange name isString and: [ aChange name notEmpty ]). self assert: (aChange printString isString and: [ aChange printString notEmpty ]). self assert: (aChange changeString isString and: [ aChange changeString notEmpty ]). self assert: (aChange displayString isString and: [ aChange displayString notEmpty ])! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/30/2010 14:12'! testAddClassInteractively | change | change := AddClassChange definition: 'TestCase subclass: #' , self class name , ' instanceVariableNames: ''instVar'' classVariableNames: ''ClassVar'' poolDictionaries: ''PoolDict'' category: ''' , self class category , '''' for: self. self assert: change controller = self. self assert: change superclassName = self class superclass name. self assert: change changeClassName = self class name. self assert: change instanceVariableNames size = 1. self assert: change instanceVariableNames first = 'instVar'. self assert: change classVariableNames size = 1. self assert: change classVariableNames first = 'ClassVar'. self assert: change poolDictionaryNames size = 1. self assert: change poolDictionaryNames first = 'PoolDict'. self assert: change category = self class category. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 10/2/2010 13:38'! testAddClassPattern self class environment allClassesDo: [ :class | | change | change := changes defineClass: class definition. self assert: (change isKindOf: AddClassChange). self assert: (change changeClassName = class name). self assert: (class superclass isNil ifTrue: [ change definitionClass = ProtoObject ] ifFalse: [ change definitionClass = class superclass ]). self assert: (change instanceVariableNames = class instVarNames asArray). self assert: (change classVariableNames = class classVarNames asArray). self assert: (change poolDictionaryNames = class poolDictionaryNames asArray). self assert: (change category = class category). self universalTestFor: change ]! ! !RBRefactoringChangeTests methodsFor: 'tests-traits' stamp: 'lr 10/1/2010 07:10'! testAddClassTraitPattern self class environment allTraitsDo: [ :trait | | change | change := changes defineClass: trait classTrait definition. self assert: (change isKindOf: AddClassTraitChange). self assert: (change changeClassName = trait name). self universalTestFor: change ]! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:35'! testAddClassVariable | change | change := changes addClassVariable: 'ClassVar' to: self class. self assert: change changeClassName = self class name. self assert: change variable = 'ClassVar'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:36'! testAddInstanceVariable | change | change := changes addInstanceVariable: 'instVar' to: self class. self assert: change changeClassName = self class name. self assert: change variable = 'instVar'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 10/1/2010 07:09'! testAddMetaclassPattern BrowserEnvironment new allMetaClasses do: [ :class | | change | change := changes defineClass: class class definition. self assert: (change isKindOf: AddMetaclassChange). self assert: (change changeClassName = class name). self assert: (change classInstanceVariableNames = class class instVarNames). self universalTestFor: change ]! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:36'! testAddPool | change | change := changes addPool: 'PoolDict' to: self class. self assert: change changeClassName = self class name. self assert: change variable = 'PoolDict'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests-traits' stamp: 'lr 10/1/2010 07:08'! testAddTraitPattern self class environment allTraitsDo: [ :trait | | change | change := changes defineClass: trait definition. self assert: (change isKindOf: AddTraitChange). self assert: (change changeClassName = trait name). self assert: (change category = trait category). self universalTestFor: change ]! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:39'! testComment | change | change := changes comment: 'Some Comment' in: self class. self assert: change changeClassName = self class name. self assert: change comment = 'Some Comment'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:42'! testCompileIn | change | change := changes compile: 'setUp' in: self class. self assert: change changeClassName = self class name. self assert: change selector = #setUp. self assert: change source = 'setUp'. self assert: change protocol = #running. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:42'! testCompileInClassified | change | change := changes compile: 'setUp' in: self class classified: #accessing. self assert: change changeClassName = self class name. self assert: change selector = #setUp. self assert: change source = 'setUp'. self assert: change protocol = #accessing. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/30/2010 20:13'! testCompileInInteractively | change | change := AddMethodChange compile: 'setUp' in: self class classified: #running for: self. self assert: change controller = self. self assert: change changeClassName = self class name. self assert: change selector = #setUp. self assert: change source = 'setUp'. self assert: change protocol = #running. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/6/2010 11:31'! testComposite changes compile: 'method ^ 1' in: self class classified: #utilities; compile: 'method ^ 2' in: self class class classified: #utilities. self assert: (changes changesSize = 2). self assert: (changes problemCount = 2). self assert: (changes changeForClass: self class name selector: #method) notNil. self assert: (changes changeForMetaclass: self class name selector: #method) notNil. self universalTestFor: changes! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:43'! testPerformAddRemoveClass | change | change := changes defineClass: 'TestCase subclass: #' , self class name , 'Mock instanceVariableNames: ''foo bar'' classVariableNames: '''' poolDictionaries: '''' category: ''' , self class category , ''''. self perform: change do: [ self assert: (Smalltalk hasClassNamed: change changeClassName) ]. self deny: (Smalltalk hasClassNamed: change changeClassName) ! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:43'! testPerformAddRemoveClassInstanceVariable | change | change := changes addInstanceVariable: 'instVar' to: self class class. self perform: change do: [ self assert: (change changeClass instVarNames includes: 'instVar') ]. self deny: (change changeClass instVarNames includes: 'instVar')! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/30/2010 14:12'! testPerformAddRemoveClassInteractively | change | change := AddClassChange definition: 'TestCase subclass: #' , self class name , 'Mock instanceVariableNames: ''foo bar'' classVariableNames: '''' poolDictionaries: '''' category: ''' , self class category , '''' for: self. self perform: change do: [ self assert: (Smalltalk hasClassNamed: change changeClassName). self assert: change definedClass name = change changeClassName. self assert: change definedClass isBehavior ]. self deny: (Smalltalk hasClassNamed: change changeClassName). self assert: change definedClass isObsolete ! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:42'! testPerformAddRemoveClassVariable | change | change := changes addClassVariable: 'ClassVar' to: self class. self perform: change do: [ self assert: (change changeClass classVarNames includes: 'ClassVar') ]. self deny: (change changeClass classVarNames includes: 'ClassVar')! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:43'! testPerformAddRemoveInstanceVariable | change | change := changes addInstanceVariable: 'instVar' to: self class. self perform: change do: [ self assert: (change changeClass instVarNames includes: 'instVar') ]. self deny: (change changeClass instVarNames includes: 'instVar')! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:58'! testPerformAddRemoveMethod | change source | change := changes compile: 'method ^ 1' in: self class classified: #utilities. self perform: change do: [ self assert: (self respondsTo: #method) ]. self deny: (self respondsTo: #method)! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/30/2010 20:13'! testPerformAddRemoveMethodInteractively | change source | change := AddMethodChange compile: 'method ^ 1' in: self class classified: #utilities for: self. self perform: change do: [ self assert: (self respondsTo: #method) ]. self deny: (self respondsTo: #method). self assert: change definedSelector = #method! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:41'! testPerformChangeClass | change | change := changes defineClass: 'TestCase subclass: #' , self class name , ' instanceVariableNames: ''changes foo'' classVariableNames: '''' poolDictionaries: '''' category: ''' , self class category , ''''. self perform: change do: [ self assert: (change changeClass instVarNames includes: 'foo') ]. self deny: (change changeClass instVarNames includes: 'foo') ! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:54'! testPerformChangeComment | change comment | change := changes comment: 'Some Comment' in: self class. comment := change changeClass organization classComment. self perform: change do: [ self assert: (change changeClass comment = 'Some Comment') ]. self assert: change changeClass organization classComment = comment! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/30/2010 14:36'! testPerformChangeMetaclass | change | change := changes defineClass: self class name , ' class instanceVariableNames: ''something'''. self perform: change do: [ self assert: (change changeClass class instVarNames includes: 'something') ]. self deny: (change changeClass class instVarNames includes: 'something')! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 10:58'! testPerformChangeMethod | change source | change := changes compile: 'setUp ^ 1' in: self class. source := change changeClass sourceCodeAt: #setUp. self perform: change do: [ self assert: (change changeClass sourceCodeAt: #setUp) = 'setUp ^ 1' ]. self assert: (change changeClass sourceCodeAt: #setUp) = source! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 11:23'! testPerformCompositeChange changes compile: 'method1 ^ 1' in: self class classified: #utilities; compile: 'method2 ^ 2' in: self class classified: #utilities. self perform: changes do: [ self assert: (self respondsTo: #method1). self assert: (self respondsTo: #method2) ]. self deny: (self respondsTo: #method1). self deny: (self respondsTo: #method2) ! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 11:07'! testPerformRenameClass | change | change := changes renameClass: self class to: self class name , 'Plus'. self perform: change do: [ self deny: (Smalltalk hasClassNamed: change oldName). self assert: (Smalltalk hasClassNamed: change newName) ]. self assert: (Smalltalk hasClassNamed: change oldName). self deny: (Smalltalk hasClassNamed: change newName)! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 13:53'! testPerformRenameClassVariable self perform: (changes addClassVariable: 'ClassVar' to: self class) do: [ | change | change := changes renameClassVariable: 'ClassVar' to: 'ClassVarPlus' in: self class. self perform: change do: [ self deny: (change changeClass classVarNames includes: change oldName). self assert: (change changeClass classVarNames includes: change newName) ]. self assert: (change changeClass classVarNames includes: change oldName). self deny: (change changeClass classVarNames includes: change newName) ]! ! !RBRefactoringChangeTests methodsFor: 'tests-perform' stamp: 'lr 9/6/2010 11:15'! testPerformRenameInstanceVariable | change | change := changes renameInstanceVariable: 'changes' to: 'changesPlus' in: self class. self perform: change do: [ self deny: (change changeClass instVarNames includes: change oldName). self assert: (change changeClass instVarNames includes: change newName) ]. self assert: (change changeClass instVarNames includes: change oldName). self deny: (change changeClass instVarNames includes: change newName)! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:32'! testRemoveClass | change | change := changes removeClass: self class. self assert: change changeClassName = self class name. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:33'! testRemoveClassNamed | change | change := changes removeClassNamed: self class name. self assert: change changeClassName = self class name. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:35'! testRemoveClassVariable | change | change := changes removeClassVariable: 'ClassVar' from: self class. self assert: change changeClassName = self class name. self assert: change variable = 'ClassVar'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:36'! testRemoveInstanceVariable | change | change := changes removeInstanceVariable: 'instVar' from: self class. self assert: change changeClassName = self class name. self assert: change variable = 'instVar'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:43'! testRemoveMethod | change | change := changes removeMethod: #setUp from: self class. self assert: change changeClassName = self class name. self assert: change selector = #setUp. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:38'! testRemovePool | change | change := changes removePool: 'PoolDict' from: self class. self assert: change changeClassName = self class name. self assert: change variable = 'PoolDict'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 19:46'! testRenameClass | change | change := changes renameClass: self class to: self class name , 'Plus'. self assert: change oldName = self class name. self assert: change newName = (self class name , 'Plus'). self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 20:02'! testRenameClassVariable | change | change := changes renameClassVariable: 'ClassVar1' to: 'ClassVar2' in: self class. self assert: change changeClassName = self class name. self assert: change oldName = 'ClassVar1'. self assert: change newName = 'ClassVar2'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'tests' stamp: 'lr 9/5/2010 20:02'! testRenameInstanceVariable | change | change := changes renameInstanceVariable: 'instVar1' to: 'instVar2' in: self class. self assert: change changeClassName = self class name. self assert: change oldName = 'instVar1'. self assert: change newName = 'instVar2'. self universalTestFor: change! ! !RBRefactoringChangeTests methodsFor: 'utilities' stamp: 'lr 9/5/2010 20:06'! undoTestFor: aChange | undo | undo := aChange asUndoOperation. self assert: (undo isKindOf: RefactoryChange)! ! !RBRefactoringChangeTests methodsFor: 'utilities' stamp: 'lr 9/5/2010 20:00'! universalTestFor: aChange self equalityTestFor: aChange. self stringTestFor: aChange. (aChange isKindOf: RefactoryClassChange) ifTrue: [ self undoTestFor: aChange ]! !