CustomCodeGeneratorTestCase.st
changeset 635 9edd6a278835
parent 628 6f639016753b
parent 634 d77d9a7561be
child 646 8338755e1088
equal deleted inserted replaced
628:6f639016753b 635:9edd6a278835
     1 "{ Package: 'jn:refactoring_custom' }"
       
     2 
       
     3 TestCase subclass:#CustomCodeGeneratorTestCase
       
     4 	instanceVariableNames:'context builder generator classes changeManager userPreferences
       
     5 		mock'
       
     6 	classVariableNames:''
       
     7 	poolDictionaries:''
       
     8 	category:'Interface-Refactoring-Custom-Tests'
       
     9 !
       
    10 
       
    11 !CustomCodeGeneratorTestCase methodsFor:'accessing'!
       
    12 
       
    13 generator
       
    14     "Should return an instance of CustomCodeGenerator subclass"
       
    15 
       
    16     ^ self subclassResponsibility
       
    17 
       
    18     "Created: / 27-05-2014 / 19:16:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    19 ! !
       
    20 
       
    21 !CustomCodeGeneratorTestCase methodsFor:'asserting'!
       
    22 
       
    23 assertClassExists: aClassName
       
    24 
       
    25     self assert: (Smalltalk classNamed: aClassName asString) isNil not
       
    26 
       
    27     "Created: / 15-06-2014 / 16:42:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    28 !
       
    29 
       
    30 assertClassMethodSource: aSourceCode atSelector: aSelector
       
    31     "Assert that source code is same at given selector for first generated class"
       
    32 
       
    33     | className class |
       
    34 
       
    35     className := classes first classNameBuilded.
       
    36     class := Smalltalk classNamed: className.
       
    37 
       
    38     ^ self assertClassMethodSource: aSourceCode atSelector: aSelector forClass: class
       
    39 
       
    40     "Created: / 11-07-2014 / 20:11:01 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    41 !
       
    42 
       
    43 assertClassMethodSource: expectedSource atSelector: aSelector forClass: aClass
       
    44     "Assert that source code is same at given selector for given class"
       
    45 
       
    46     | actualSource |
       
    47 
       
    48     actualSource := aClass theMetaclass sourceCodeAt: aSelector asSymbol.
       
    49 
       
    50     ^ self assertSource: expectedSource sameAs: actualSource
       
    51 
       
    52     "Created: / 11-07-2014 / 20:09:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    53 !
       
    54 
       
    55 assertClassNotExists: aClassName
       
    56 
       
    57     self assert: (Smalltalk classNamed: aClassName asString) isNil
       
    58 
       
    59     "Created: / 15-06-2014 / 16:42:37 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    60 !
       
    61 
       
    62 assertMethodSource: aSourceCode atSelector: aSelector
       
    63     "Assert that source code is same at given selector for first generated class"
       
    64 
       
    65     | className class |
       
    66 
       
    67     className := classes first classNameBuilded.
       
    68     class := Smalltalk classNamed: className.
       
    69 
       
    70     ^ self assertMethodSource: aSourceCode atSelector: aSelector forClass: class
       
    71 
       
    72     "Created: / 27-05-2014 / 20:06:17 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    73     "Modified: / 30-05-2014 / 22:36:09 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    74 !
       
    75 
       
    76 assertMethodSource: expectedSource atSelector: aSelector forClass: aClass
       
    77     "Assert that source code is same at given selector for given class"
       
    78 
       
    79     | actualSource |
       
    80 
       
    81     actualSource := aClass sourceCodeAt: aSelector asSymbol.
       
    82 
       
    83     ^ self assertSource: expectedSource sameAs: actualSource
       
    84 
       
    85     "Created: / 27-05-2014 / 20:08:32 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    86 !
       
    87 
       
    88 assertSource: expectedSource sameAs: actualSource
       
    89 
       
    90     self assert: (Change isSource: expectedSource sameSourceAs: actualSource)
       
    91 
       
    92     "Created: / 25-05-2014 / 22:18:10 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    93     "Modified: / 10-07-2014 / 11:31:19 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
    94 ! !
       
    95 
       
    96 !CustomCodeGeneratorTestCase methodsFor:'code generation helpers'!
       
    97 
       
    98 createClass
       
    99     "Returns new class change with some name"
       
   100 
       
   101     | class |
       
   102 
       
   103     class := builder createClass.
       
   104     class className: 'DummyClassForGeneratorTestCase'.
       
   105     classes add: class.
       
   106 
       
   107     ^ class
       
   108 
       
   109     "Created: / 29-05-2014 / 23:22:52 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   110 ! !
       
   111 
       
   112 !CustomCodeGeneratorTestCase methodsFor:'context templates'!
       
   113 
       
   114 classWithInstanceVariable
       
   115     | class |
       
   116 
       
   117     class := self createClass.
       
   118     class instanceVariableNames: 'instanceVariable'.
       
   119 
       
   120     context selectedClasses: (Array with: class)
       
   121 
       
   122     "Created: / 29-05-2014 / 00:33:40 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   123     "Modified: / 29-05-2014 / 23:44:20 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   124 !
       
   125 
       
   126 classWithThreeInstanceVariables
       
   127     | class |
       
   128 
       
   129     class := self createClass.
       
   130     class instanceVariableNames: 'instanceVariable_01 instanceVariable_02 instanceVariable_03'.
       
   131 
       
   132     context selectedClasses: (Array with: class).
       
   133     context selectedVariables: (class instanceVariableNames).
       
   134 
       
   135     "Created: / 13-07-2014 / 21:56:12 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   136 !
       
   137 
       
   138 classWithTwoInstanceVariables
       
   139     | class |
       
   140 
       
   141     class := self createClass.
       
   142     class instanceVariableNames: 'instanceVariable_01 instanceVariable_02'.
       
   143 
       
   144     context selectedClasses: (Array with: class).
       
   145     context selectedVariables: (class instanceVariableNames).
       
   146 
       
   147     "Created: / 13-07-2014 / 21:45:06 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   148 ! !
       
   149 
       
   150 !CustomCodeGeneratorTestCase methodsFor:'executing'!
       
   151 
       
   152 createContext: contextTemplateName
       
   153     "Creates context by given template name
       
   154     (produces more readable code than just method call)"
       
   155 
       
   156     self perform: contextTemplateName asSymbol
       
   157 
       
   158     "Created: / 27-07-2014 / 12:27:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   159 !
       
   160 
       
   161 executeGeneratorInContext: contextTemplateName
       
   162     "Executes generator in context created by given name"
       
   163 
       
   164     self perform: contextTemplateName asSymbol.
       
   165     generator executeInContext: context
       
   166 
       
   167     "Created: / 27-05-2014 / 20:03:14 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   168     "Modified: / 29-05-2014 / 23:38:08 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   169 ! !
       
   170 
       
   171 !CustomCodeGeneratorTestCase methodsFor:'initialization & release'!
       
   172 
       
   173 defaultUserPreferences
       
   174 
       
   175     userPreferences
       
   176         generateComments: true;
       
   177         generateCommentsForAspectMethods: true;
       
   178         generateCommentsForGetters: true;
       
   179         generateCommentsForSetters: true
       
   180 
       
   181     "Created: / 09-06-2014 / 22:36:59 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   182 !
       
   183 
       
   184 setUp
       
   185 
       
   186     classes := OrderedCollection new.
       
   187     mock := CustomMock new.
       
   188 
       
   189     context := CustomSubContext new.
       
   190     builder := CustomSourceCodeBuilder new.
       
   191     changeManager := CustomLocalChangeManager new.
       
   192     userPreferences := UserPreferences new.
       
   193     self defaultUserPreferences.
       
   194     generator := self generator.
       
   195 
       
   196     generator isNil ifFalse: [
       
   197         self setUpGenerator: generator
       
   198     ]
       
   199 
       
   200     "Created: / 27-05-2014 / 19:16:44 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   201     "Modified: / 10-07-2014 / 11:58:11 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   202 !
       
   203 
       
   204 setUpGenerator: aGenerator
       
   205 
       
   206     aGenerator builder: builder.
       
   207     aGenerator changeManager: changeManager.
       
   208     aGenerator userPreferences: userPreferences
       
   209 
       
   210     "Created: / 10-07-2014 / 11:57:38 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   211 !
       
   212 
       
   213 tearDown
       
   214 
       
   215     builder redoChanges.
       
   216     changeManager redoChanges.
       
   217     mock unmockAll
       
   218 
       
   219     "Created: / 27-05-2014 / 19:26:30 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   220     "Modified: / 16-06-2014 / 00:45:02 / Jakub Nesveda <nesvejak@fit.cvut.cz>"
       
   221 ! !
       
   222