return whole source code when selected interval is empty
retrieve selector from method when none selector is specified
"{ Package: 'jn:refactoring_custom' }"
CustomCodeGeneratorOrRefactoringTestCase subclass:#CustomNamespaceTests
instanceVariableNames:'refactoryChangeManager'
classVariableNames:''
poolDictionaries:''
category:'Interface-Refactoring-Custom-Tests'
!
!CustomNamespaceTests methodsFor:'accessing'!
generatorOrRefactoring
^ nil
"Modified: / 31-05-2014 / 22:48:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomNamespaceTests methodsFor:'initialization & release'!
setUp
super setUp.
refactoryChangeManager := RefactoryChangeManager instance.
"Created: / 16-04-2014 / 21:39:50 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 31-05-2014 / 22:45:57 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomNamespaceTests methodsFor:'private'!
lastUndoChange
refactoryChangeManager undoableOperations isEmpty ifTrue: [
^ nil
] ifFalse: [
^ refactoryChangeManager undoChange
].
"Created: / 16-04-2014 / 21:40:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 31-05-2014 / 19:53:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomNamespaceTests methodsFor:'tests'!
test_all_class_var_names
| class actualClassVars expectedClassVars |
class := model createClass
name: #MockClassForTestCase;
classVariableNames: #('ClassVar1' 'ClassVar2');
yourself.
expectedClassVars := (Object allClassVarNames, (Array with: #ClassVar1 with: #ClassVar2)).
actualClassVars := class theNonMetaclass allClassVarNames.
self assert: expectedClassVars = actualClassVars
"Created: / 20-06-2014 / 22:35:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 10:47:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_class_and_method_with_default_class
| class |
self skipIf: true description: 'will be maybe fixed in future'.
model
name: #MockClassForTestCase;
createClass;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod;
replace: '`@selector' with: 'aSelector2';
createMethod.
model execute.
class := Smalltalk classNamed: 'MockClassForTestCase'.
self assert: (class includesSelector: #aSelector).
self assert: (class includesSelector: #aSelector2).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
self shouldImplement'.
"Created: / 30-08-2014 / 23:09:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:26:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_class_and_method_within_given_package
| class package method1 method2 |
self skipIf: true description: 'will be maybe fixed in future'.
package := self class package.
self assert: package size > 3.
class := model
package: package;
className: 'MockClassForTestCase';
createClass.
model
class: class;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod;
replace: '`@selector' with: 'aSelector2';
createMethod.
self assert: (class includesSelector: #aSelector) not.
self assert: (class includesSelector: #aSelector2) not.
model execute.
class := Smalltalk classNamed: 'MockClassForTestCase'.
self assert: (class includesSelector: #aSelector).
self assert: (class includesSelector: #aSelector2).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
self shouldImplement'.
self assert: class package equals: package.
method1 := class compiledMethodAt: #aSelector.
self assert: method1 package equals: package.
method2 := class compiledMethodAt: #aSelector2.
self assert: method2 package equals: package.
"Created: / 30-08-2014 / 22:21:31 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:26:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_class_and_method_without_given_package
| class package method1 method2 |
self skipIf: true description: 'will be maybe fixed in future'.
package := self class package.
self assert: package size > 3.
class := model
className: 'MockClassForTestCase';
createClass.
model
class: class;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod;
replace: '`@selector' with: 'aSelector2';
createMethod.
self assert: (class includesSelector: #aSelector) not.
self assert: (class includesSelector: #aSelector2) not.
model execute.
class := Smalltalk classNamed: 'MockClassForTestCase'.
self assert: (class includesSelector: #aSelector).
self assert: (class includesSelector: #aSelector2).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
self shouldImplement'.
self deny: class package = package.
method1 := class compiledMethodAt: #aSelector.
self deny: method1 package = package.
method2 := class compiledMethodAt: #aSelector2.
self deny: method2 package = package.
"Created: / 30-08-2014 / 23:01:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:26:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_method
| class |
self skipIf: true description: 'will be maybe fixed in future'.
class := self class.
model
class: class;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod;
replace: '`@selector' with: 'aSelector2';
createMethod.
self assert: (class includesSelector: #aSelector) not.
self assert: (class includesSelector: #aSelector2) not.
model execute.
self assert: (class includesSelector: #aSelector).
self assert: (class includesSelector: #aSelector2).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
self shouldImplement'.
"Created: / 27-04-2014 / 17:48:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 26-08-2014 / 23:39:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:26:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_method_with_class
| class className method |
self skipIf: true description: 'will be maybe fixed in future'.
className := 'TestClassNameForTestCase'.
class := model
className: className;
classVariableNames: 'ClassVar1 ClassVar2';
instanceVariableNames: 'instVar1 instVar2';
poolDictionaryNames: 'dictName';
superclassName: 'TestCase';
category: 'Some-Category';
createClass.
model
class: class;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod.
self assertClassNotExists: className.
[
model execute.
class := Smalltalk classNamed: className.
self assert: class new className = className.
self assert: class superclass new className = 'TestCase'.
self assert: class instanceVariableString = 'instVar1 instVar2'.
self assert: class classVariableString = 'ClassVar1 ClassVar2'.
self assert: class poolDictionaries = 'dictName'.
self assert: class category = 'Some-Category'.
self assert: (class includesSelector: #aSelector).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
method := class compiledMethodAt: #aSelector.
self assert: (method category) = 'a protocol'.
] ensure:[
class notNil ifTrue:[
class removeFromSystem.
].
]
"Created: / 04-05-2014 / 13:00:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 26-08-2014 / 23:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:27:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_method_within_given_package
| class package method1 method2 |
self skipIf: true description: 'will be maybe fixed in future'.
package := self class package.
self assert: package size > 3.
class := self class.
model
package: package;
class: class;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod;
replace: '`@selector' with: 'aSelector2';
createMethod.
self assert: (class includesSelector: #aSelector) not.
self assert: (class includesSelector: #aSelector2) not.
model execute.
self assert: (class includesSelector: #aSelector).
self assert: (class includesSelector: #aSelector2).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
self shouldImplement'.
method1 := class compiledMethodAt: #aSelector.
self assert: method1 package equals: package.
method2 := class compiledMethodAt: #aSelector2.
self assert: method2 package equals: package.
"Created: / 30-08-2014 / 21:40:15 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:27:33 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_chaining_api_create_method_without_given_package
| class package method1 method2 |
self skipIf: true description: 'will be maybe fixed in future'.
package := self class package.
self assert: package size > 3.
class := self class.
model
class: class;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod;
replace: '`@selector' with: 'aSelector2';
createMethod.
self assert: (class includesSelector: #aSelector) not.
self assert: (class includesSelector: #aSelector2) not.
model execute.
self assert: (class includesSelector: #aSelector).
self assert: (class includesSelector: #aSelector2).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
self assert: (class sourceCodeAt: #aSelector2) = 'aSelector2
self shouldImplement'.
method1 := class compiledMethodAt: #aSelector.
self deny: method1 package = package.
method2 := class compiledMethodAt: #aSelector2.
self deny: method2 package = package.
"Created: / 30-08-2014 / 21:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 22:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_changes_empty_as_default
self assert:model changes size = 0.
"Created: / 22-07-2014 / 22:52:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 10:54:16 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_class_and_class_method_generated_as_one_undo_change
| className class lastUndoChange |
lastUndoChange := self lastUndoChange.
className := #MockClassForTestingOneUndoChange.
self assertClassNotExists: className.
model := CustomNamespace new.
model changeManager: refactoryChangeManager.
class := model createClass
name: className;
compile;
yourself.
self assertClassNotExists: className.
model createMethod
class: class theMetaclass;
protocol: 'a protocol';
source: 'aSelector
^ nil';
compile.
self assertClassNotExists: className.
self assert: lastUndoChange = (self lastUndoChange).
model execute.
self assertClassExists: className.
self assert: (lastUndoChange = (self lastUndoChange)) not.
self assert: ((Smalltalk classNamed: className) class includesSelector: #aSelector).
self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector) not.
refactoryChangeManager undoOperation.
self assertClassNotExists: className.
self assert: lastUndoChange = (self lastUndoChange).
"Created: / 17-04-2014 / 23:54:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 23:02:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_class_and_instance_method_generated_as_one_undo_change
| className class lastUndoChange |
lastUndoChange := self lastUndoChange.
className := #MockClassForTestingOneUndoChange.
self assertClassNotExists: className.
model := CustomNamespace new.
model changeManager: refactoryChangeManager.
class := model createClass
name: className;
compile;
yourself.
self assertClassNotExists: className.
model createMethod
class: class;
protocol: 'a protocol';
source: 'aSelector
^ nil';
compile.
self assertClassNotExists: className.
self assert: lastUndoChange = (self lastUndoChange).
model execute.
self assertClassExists: className.
self assert: (lastUndoChange = (self lastUndoChange)) not.
self assert: ((Smalltalk classNamed: className) includesSelector: #aSelector).
refactoryChangeManager undoOperation.
self assertClassNotExists: className.
self assert: lastUndoChange = (self lastUndoChange).
"Created: / 17-04-2014 / 23:54:05 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 09-10-2014 / 23:04:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_comment_in_method_generated
| class generatedSource expectedSource |
class := self class.
model createMethod
class: self class;
protocol: 'a protocol';
source: 'aSelector
"a comment"
^ nil';
compile.
self assert: (class includesSelector: #aSelector) not.
model execute.
generatedSource := (class sourceCodeAt: #aSelector).
expectedSource := 'aSelector
"a comment"
^ nil'.
self assert: (class includesSelector: #aSelector).
self assert: (generatedSource includesSubString: '"a comment"').
self assertSource: expectedSource sameAs: generatedSource
"Created: / 27-04-2014 / 15:57:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 26-08-2014 / 23:42:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 09-10-2014 / 23:06:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_immediate
| mockClass |
mockClass := model createClassImmediate: 'MockClassForTestCase'.
self assert: mockClass new className = 'MockClassForTestCase'.
self assert: mockClass superclass new className = 'Object'.
self assert: mockClass instanceVariableString = ''.
self assert: mockClass classVariableString = ''.
self assert: mockClass poolDictionaries = ''.
self assert: mockClass category = ''.
"Created: / 15-06-2014 / 17:27:41 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 27-07-2014 / 12:42:53 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_immediate_with_category
| mockClass |
mockClass := model createClassImmediate: 'MockClassForTestCase' category: 'Some-Category01'.
self assert: mockClass new className = 'MockClassForTestCase'.
self assert: mockClass superclass new className = 'Object'.
self assert: mockClass instanceVariableString = ''.
self assert: mockClass classVariableString = ''.
self assert: mockClass poolDictionaries = ''.
self assert: mockClass category = 'Some-Category01'.
"Modified: / 19-10-2014 / 20:56:27 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_immediate_with_given_super_class_name
| mockClass |
mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
self assert: mockClass new className = 'MockClassForTestCase'.
self assert: mockClass superclass new className = 'Object'.
self assert: mockClass instanceVariableString = ''.
self assert: mockClass classVariableString = ''.
self assert: mockClass poolDictionaries = ''.
self assert: mockClass category = ''.
"Created: / 27-07-2014 / 12:42:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_immediate_with_instance_and_class_variables
| mockClass |
mockClass := model
createClassImmediate: 'MockClassForTestCase'
superClassName: 'Object'
instanceVariableNames: 'instVar'
classVariableNames: 'ClassVar'.
self assert: mockClass new className = 'MockClassForTestCase'.
self assert: mockClass superclass new className = 'Object'.
self assert: mockClass instanceVariableString = 'instVar'.
self assert: mockClass classVariableString = 'ClassVar'.
self assert: mockClass poolDictionaries = ''.
self assert: mockClass category = ''.
"Created: / 23-08-2014 / 22:24:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_immediate_with_instance_variables
| mockClass |
mockClass := model
createClassImmediate: 'MockClassForTestCase'
instanceVariableNames: 'instVar'.
self assert: mockClass new className = 'MockClassForTestCase'.
self assert: mockClass superclass new className = 'Object'.
self assert: mockClass instanceVariableString = 'instVar'.
self assert: mockClass classVariableString = ''.
self assert: mockClass poolDictionaries = ''.
self assert: mockClass category = ''.
"Created: / 23-08-2014 / 22:26:24 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_immediate_with_super_class_name_instance_variable_names_class_variable_names_pool_dictionaries_category
| mockClass |
mockClass := model
createClassImmediate: 'MockClassForTestCase'
superClassName: 'Object'
instanceVariableNames: 'instVar'
classVariableNames: 'ClassVar'
poolDictionaries: 'pollDict01'
category: 'Some-Category01'.
self assert: mockClass new className = 'MockClassForTestCase'.
self assert: mockClass superclass new className = 'Object'.
self assert: mockClass instanceVariableString = 'instVar'.
self assert: mockClass classVariableString = 'ClassVar'.
self assert: mockClass poolDictionaries = 'pollDict01'.
self assert: mockClass category = 'Some-Category01'.
"Modified (comment): / 19-10-2014 / 20:53:28 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_within_given_package
| class package |
package := self class package.
self assert: package size > 3.
model createClass
name: #MockClassForTestCase;
package: package;
compile.
model execute.
class := Smalltalk classNamed: 'MockClassForTestCase'.
self assert: class new className = 'MockClassForTestCase'.
self assert: class superclass new className = 'Object'.
self assert: class instanceVariableString = ''.
self assert: class classVariableString = ''.
self assert: class poolDictionaries = ''.
self assert: class category = '** As yet undefined **'.
self assert: class package = package.
"Created: / 30-08-2014 / 20:35:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified (format): / 09-10-2014 / 23:23:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_class_without_given_package
| class package |
package := self class package.
self assert: package size > 3.
model createClass
name: #MockClassForTestCase;
compile.
model execute.
class := Smalltalk classNamed: 'MockClassForTestCase'.
self assert: class new className = 'MockClassForTestCase'.
self assert: class superclass new className = 'Object'.
self assert: class instanceVariableString = ''.
self assert: class classVariableString = ''.
self assert: class poolDictionaries = ''.
self assert: class category = '** As yet undefined **'.
self assert: (class package = package) not.
"Created: / 30-08-2014 / 20:57:22 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 10-10-2014 / 00:02:18 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_method_immediate
| mockClass expectedSource actualSource |
expectedSource := 'instanceMethod:aParam
^ self'.
mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
model createMethodImmediate: mockClass protocol: 'a protocol' source: expectedSource.
actualSource := (mockClass sourceCodeAt: #instanceMethod:).
self assertSource: expectedSource sameAs: actualSource.
self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'a protocol'
"Created: / 15-06-2014 / 17:28:36 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 24-06-2014 / 21:59:23 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_method_immediate_protocol_source_package
| expectedSource actualSource mockClass |
expectedSource := 'instanceMethod:aParam
^ self'.
mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
model createMethodImmediate: mockClass
protocol: 'a protocol'
source: expectedSource
package: #some_package01.
actualSource := (mockClass sourceCodeAt: #instanceMethod:).
self assertSource: expectedSource sameAs: actualSource.
self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'a protocol'.
self assert: (mockClass compiledMethodAt: #instanceMethod:) package = #some_package01.
"Modified: / 17-10-2014 / 10:02:42 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_method_immediate_with_preset_protocol
| mockClass expectedSource actualSource |
expectedSource := 'instanceMethod:aParam
^ self'.
mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
model createMethodImmediate: mockClass source: expectedSource.
actualSource := (mockClass sourceCodeAt: #instanceMethod:).
self assertSource: expectedSource sameAs: actualSource.
self assert: (mockClass compiledMethodAt: #instanceMethod:) category = 'protocol'
"Created: / 23-08-2014 / 21:48:51 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_method_within_given_package
| mockClass package method |
package := self class package.
self assert: package size > 3.
mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
model createMethod
class: mockClass;
protocol: 'a protocol';
package: package;
source: 'selector ^ 123';
compile.
model execute.
method := (mockClass compiledMethodAt: #selector).
self assert: method package = package
"Created: / 30-08-2014 / 18:45:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 10-10-2014 / 00:02:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_create_method_without_given_package
| mockClass package method |
package := self class package.
self assert: package size > 3.
mockClass := model createClassImmediate: 'MockClassForTestCase' superClassName: 'Object'.
model createMethod
class: mockClass;
protocol: 'a protocol';
source: 'selector ^ 123';
compile.
model execute.
method := (mockClass compiledMethodAt: #selector).
self assert: (method package = package) not
"Created: / 30-08-2014 / 18:46:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 10-10-2014 / 15:33:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_empty_class_definition_string
| expectedDefinition actualDefinition |
expectedDefinition := 'Object subclass: #''Unknown Class''
instanceVariableNames: ''''
classVariableNames: ''''
poolDictionaries: ''''
category: ''** As yet undefined **'''.
actualDefinition := model createClass definitionString.
self assertSource: expectedDefinition sameAs: actualDefinition.
"Created: / 10-10-2014 / 15:41:45 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_empty_class_in_changes
model createClass compile.
self assert:(model changes changesSize) = 1.
"Created: / 22-07-2014 / 22:22:04 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 10-10-2014 / 15:48:35 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_method_source_builded
| method expectedSource actualSource |
method := model createMethod
source: '`@methodName
^ `variableName';
replace: '`@methodName' with: #selector;
replace: '`variableName' with: 'aName';
yourself.
expectedSource := 'selector
^ aName'.
actualSource := method newSource.
self assertSource: expectedSource sameAs: actualSource
"Created: / 18-05-2014 / 17:14:13 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 26-08-2014 / 23:40:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 10-10-2014 / 15:56:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_method_source_builded_with_comment
| method buildedSource expectedSource |
method := model createMethod
source: '`@methodName
`"comment
^ `variableName';
replace: '`@methodName' with: #selector;
replace: '`variableName' with: 'aName';
replace: '`"comment' with: '"a comment"';
yourself.
buildedSource := method newSource.
expectedSource := 'selector
"a comment"
^ aName'.
self assertSource: expectedSource sameAs: buildedSource
"Created: / 19-05-2014 / 18:57:25 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 26-08-2014 / 23:55:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 10-10-2014 / 15:56:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_method_source_with_original_formatting
| method originalSource actualSource expectedSource |
originalSource := 'methodName
`variableName do: [ each | each call ].'.
expectedSource := 'methodName
collection do: [ each | each call ].'.
model formatter: CustomNoneSourceCodeFormatter new.
method := model createMethod
source: originalSource;
replace: '`variableName' with: 'collection';
yourself.
actualSource := method newSource.
self assertSource: expectedSource sameAs: actualSource.
"Created: / 22-07-2014 / 23:04:43 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 10-10-2014 / 15:57:21 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_nil_changes_not_in_change_collector
self should: [
model createMethod compile.
] raise: Error.
self assert: model changes changesSize = 0.
"Created: / 22-07-2014 / 22:16:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 10-10-2014 / 16:00:56 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_one_method_for_multiple_classes
| classCollection classNames |
self skipIf: true description: 'will be maybe fixed in future'.
classCollection := OrderedCollection new.
classNames := Array with: 'DummyClassForTestCase1' with: 'DummyClassForTestCase2'.
classNames do: [ :className |
classCollection add: (model className: className; createClass).
].
model
classes: classCollection;
protocol: 'a protocol';
source: '`@selector
self shouldImplement';
replace: '`@selector' with: 'aSelector';
createMethod.
model execute.
classNames do: [ :className |
| class method |
class := Smalltalk classNamed: className.
self assert: (class includesSelector: #aSelector).
self assert: (class sourceCodeAt: #aSelector) = 'aSelector
self shouldImplement'.
method := class compiledMethodAt: #aSelector.
self assert: (method category) = 'a protocol'.
].
"Created: / 02-05-2014 / 23:31:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 26-08-2014 / 23:41:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 10-10-2014 / 16:02:55 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
!
test_undo_changes_for_multiple_executes
"Note: Methods createClassImmediate and createMethodImmediate have execute call inside"
|mockSuperClassName mockClassName mockSuperClass|
mockSuperClassName := 'MockSuperClassForTestCase'.
mockClassName := 'MockClassForTestCase'.
mockSuperClass := model createClassImmediate:mockSuperClassName
superClassName:'Object'.
model createClassImmediate:mockClassName
superClassName:mockSuperClassName.
"/ Instance method
model
createMethodImmediate:mockSuperClass
protocol:'instance-protocol'
source:'instanceMethod: aParam
self shouldImplement'.
"/ Class method
model
createMethodImmediate:mockSuperClass class
protocol:'class-protocol'
source:'classMethod: aParam
self shouldImplement'.
self assertClassExists:mockSuperClassName.
self assertClassExists:mockClassName.
model undoChanges.
self assertClassNotExists:mockSuperClassName.
self assertClassNotExists:mockClassName.
"Created: / 15-06-2014 / 16:21:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
"Modified: / 19-10-2014 / 14:57:07 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
! !
!CustomNamespaceTests class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
! !