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 |
|