13 testCorrectInstanceCreation |
13 testCorrectInstanceCreation |
14 | javaClassRef initString javaMethodRef | |
14 | javaClassRef initString javaMethodRef | |
15 |
15 |
16 initString := 'Ljava/lang/Runnable;'. |
16 initString := 'Ljava/lang/Runnable;'. |
17 javaClassRef := JavaClassRef2 for: initString. |
17 javaClassRef := JavaClassRef2 for: initString. |
18 javaMethodRef := JavaMethodRef2 |
18 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
19 javaMethodRef := JavaInterfaceMethodRef2 |
19 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
20 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
20 inClassIdentifiedByRef: javaClassRef. |
21 inClassIdentifiedByRef: javaClassRef. |
21 self assertTrue: (javaMethodRef isResolved not). |
22 self assertTrue: (javaMethodRef isResolved not). |
22 self assertTrue: (javaMethodRef valueCache isNil). |
23 self assertTrue: (javaMethodRef valueCache isNil). |
23 self assertTrue: (javaMethodRef name = 'run'). |
24 self assertTrue: (javaMethodRef name = 'run'). |
24 self assertTrue: (javaMethodRef descriptor = '()V'). |
25 self assertTrue: (javaMethodRef descriptor = '()V'). |
25 self assertTrue: (javaMethodRef classRef name = 'Ljava/lang/Runnable;'). |
26 self assertTrue: (javaMethodRef classRef name = 'Ljava/lang/Runnable;'). |
26 |
27 |
27 "Created: / 08-04-2011 / 14:01:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
28 "Created: / 08-04-2011 / 14:01:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
28 "Modified: / 08-04-2011 / 16:48:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
29 "Modified: / 13-04-2011 / 12:17:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
29 ! |
30 ! |
30 |
31 |
31 testCorrectResolving |
32 testCorrectResolving |
32 | javaClassRef initString javaMethodRef expectedResult result | |
33 | javaClassRef initString javaMethodRef expectedResult result | |
33 |
34 |
34 initString := 'Ljava/lang/Runnable;'. |
35 initString := 'Ljava/lang/Runnable;'. |
35 javaClassRef := JavaClassRef2 for: initString. |
36 javaClassRef := JavaClassRef2 for: initString. |
36 javaMethodRef := JavaMethodRef2 |
37 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
38 javaMethodRef := JavaInterfaceMethodRef2 |
37 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
39 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
38 inClassIdentifiedByRef: javaClassRef. |
40 inClassIdentifiedByRef: javaClassRef. |
39 result := javaMethodRef resolve. |
41 result := javaMethodRef resolve. |
40 expectedResult := (Java classForName: 'java.lang.Runnable') methodDictionary |
42 expectedResult := (Java classForName: 'java.lang.Runnable') |
41 at: #'run()V'. |
43 methodDictionary at: #'run()V'. |
42 self assertTrue: (result = expectedResult). |
44 self assertTrue: (result = expectedResult). |
43 |
45 |
44 "Created: / 08-04-2011 / 14:07:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
46 "Created: / 08-04-2011 / 14:07:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
45 "Modified: / 08-04-2011 / 16:48:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
47 "Modified: / 13-04-2011 / 12:17:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
46 ! |
48 ! |
47 |
49 |
48 testInvalidation |
50 testInvalidation |
49 | javaClassRef javaMethodRef | |
51 | javaClassRef javaMethodRef | |
50 |
52 |
51 javaClassRef := JavaClassRef2 for: 'Ljava/lang/Runnable;'. |
53 javaClassRef := JavaClassRef2 for: 'Ljava/lang/Runnable;'. |
52 javaMethodRef := JavaFieldRef2 |
54 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
55 javaMethodRef := JavaInterfaceMethodRef2 |
53 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
56 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
54 inClassIdentifiedByRef: javaClassRef. |
57 inClassIdentifiedByRef: javaClassRef. |
55 self assertTrue: (javaMethodRef isResolved not). |
58 self assertTrue: (javaMethodRef isResolved not). |
56 javaMethodRef resolve. |
59 javaMethodRef resolve. |
57 self assertTrue: (javaMethodRef isResolved). |
60 self assertTrue: (javaMethodRef isResolved). |
96 javaMethodRef invalidateForClass: 'Ljava/lang/Runnable;'. |
102 javaMethodRef invalidateForClass: 'Ljava/lang/Runnable;'. |
97 self assertTrue: (javaMethodRef isResolved not). |
103 self assertTrue: (javaMethodRef isResolved not). |
98 self assertTrue: (javaClassRef isResolved not). |
104 self assertTrue: (javaClassRef isResolved not). |
99 |
105 |
100 "Created: / 08-04-2011 / 16:23:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
106 "Created: / 08-04-2011 / 16:23:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
107 "Modified: / 13-04-2011 / 12:17:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
101 ! |
108 ! |
102 |
109 |
103 testResolving |
110 testResolving |
104 | javaClassRef javaMethodRef | |
111 | javaClassRef javaMethodRef | |
105 |
112 |
106 javaClassRef := JavaClassRef2 for: 'Ljava/lang/Runnable;'. |
113 javaClassRef := JavaClassRef2 for: 'Ljava/lang/Runnable;'. |
107 javaMethodRef := JavaFieldRef2 |
114 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
115 javaMethodRef := JavaInterfaceMethodRef2 |
108 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
116 namedAndTyped: (JavaNameAndType2 name: 'run' descriptor: '()V') |
109 inClassIdentifiedByRef: javaClassRef. |
117 inClassIdentifiedByRef: javaClassRef. |
110 self assertTrue: (javaMethodRef isResolved not). |
118 self assertTrue: (javaMethodRef isResolved not). |
111 javaMethodRef resolve. |
119 javaMethodRef resolve. |
112 self assertTrue: (javaClassRef isResolved). |
120 self assertTrue: (javaClassRef isResolved). |
113 self assertTrue: (javaMethodRef isResolved). |
121 self assertTrue: (javaMethodRef isResolved). |
114 |
122 |
115 "Created: / 08-04-2011 / 14:04:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
123 "Created: / 08-04-2011 / 14:04:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
116 "Modified: / 08-04-2011 / 16:47:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
124 "Modified: / 13-04-2011 / 12:17:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
125 ! ! |
|
126 |
|
127 !JavaInterfaceMethodRefTests methodsFor:'permission tests'! |
|
128 |
|
129 testAccessingPrivateFromOutside |
|
130 | javaClassRef javaMethodRef initString throwedException | |
|
131 |
|
132 self enableMockedExceptionThrowing. |
|
133 |
|
134 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
135 javaClassRef := JavaClassRef2 for: initString. |
|
136 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
137 javaMethodRef := JavaMethodRef2 |
|
138 namedAndTyped: (JavaNameAndType2 name: 'privateMethod' |
|
139 descriptor: '()Ljava/lang/String;') |
|
140 inClassIdentifiedByRef: javaClassRef. |
|
141 javaMethodRef resolve. ] on: Error |
|
142 do: [:e | throwedException := e ]. |
|
143 self assertTrue: (throwedException notNil |
|
144 and: [ throwedException messageText = 'IllegalAccessError' ]). |
|
145 self disableMockedExceptionThrowing. |
|
146 |
|
147 "Created: / 13-04-2011 / 14:44:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
148 "Modified: / 13-04-2011 / 23:09:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
149 ! |
|
150 |
|
151 testAccessingPrivateFromOutsideInNonPublic |
|
152 | javaClassRef javaMethodRef initString throwedException | |
|
153 |
|
154 self enableMockedExceptionThrowing. |
|
155 |
|
156 [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'. |
|
157 javaClassRef := JavaClassRef2 for: initString. |
|
158 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
159 javaMethodRef := JavaMethodRef2 |
|
160 namedAndTyped: (JavaNameAndType2 name: 'privateMethod' |
|
161 descriptor: '()Ljava/lang/String;') |
|
162 inClassIdentifiedByRef: javaClassRef. |
|
163 javaMethodRef resolve. ] on: Error |
|
164 do: [:e | throwedException := e ]. |
|
165 self assertTrue: (throwedException notNil |
|
166 and: [ throwedException messageText = 'IllegalAccessError' ]). |
|
167 self disableMockedExceptionThrowing. |
|
168 |
|
169 "Created: / 13-04-2011 / 14:47:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
170 "Modified: / 14-04-2011 / 14:11:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
171 ! |
|
172 |
|
173 testAccessingPrivateFromSubclass |
|
174 | javaClassRef javaMethodRef initString throwedException | |
|
175 |
|
176 self enableMockedExceptionThrowing. |
|
177 |
|
178 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
179 javaClassRef := JavaClassRef2 for: initString. |
|
180 javaClassRef owner: (Java classForName: 'java.lang.SubclassOfPublicClass'). |
|
181 javaMethodRef := JavaMethodRef2 |
|
182 namedAndTyped: (JavaNameAndType2 name: 'privateMethod' |
|
183 descriptor: '()Ljava/lang/String;') |
|
184 inClassIdentifiedByRef: javaClassRef. |
|
185 javaMethodRef resolve. ] on: Error |
|
186 do: [:e | throwedException := e ]. |
|
187 self assertTrue: (throwedException notNil |
|
188 and: [ throwedException messageText = 'IllegalAccessError' ]). |
|
189 self disableMockedExceptionThrowing. |
|
190 |
|
191 "Created: / 13-04-2011 / 14:49:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
192 "Modified: / 14-04-2011 / 00:03:40 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
193 ! |
|
194 |
|
195 testAccessingProtectedFromOutside |
|
196 | javaClassRef javaMethodRef initString throwedException | |
|
197 |
|
198 self enableMockedExceptionThrowing. |
|
199 |
|
200 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
201 javaClassRef := JavaClassRef2 for: initString. |
|
202 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
203 javaMethodRef := JavaMethodRef2 |
|
204 namedAndTyped: (JavaNameAndType2 name: 'protectedMethod' |
|
205 descriptor: '()Ljava/lang/String;') |
|
206 inClassIdentifiedByRef: javaClassRef. |
|
207 javaMethodRef resolve. ] on: Error |
|
208 do: [:e | throwedException := e ]. |
|
209 self assertTrue: (throwedException notNil |
|
210 and: [ throwedException messageText = 'IllegalAccessError' ]). |
|
211 self disableMockedExceptionThrowing. |
|
212 |
|
213 "Created: / 13-04-2011 / 14:44:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
214 "Modified: / 14-04-2011 / 14:12:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
215 ! |
|
216 |
|
217 testAccessingProtectedFromOutsideInNonPublic |
|
218 | javaClassRef javaMethodRef initString throwedException | |
|
219 |
|
220 self enableMockedExceptionThrowing. |
|
221 |
|
222 [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'. |
|
223 javaClassRef := JavaClassRef2 for: initString. |
|
224 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
225 javaMethodRef := JavaMethodRef2 |
|
226 namedAndTyped: (JavaNameAndType2 name: 'protectedMethod' |
|
227 descriptor: '()Ljava/lang/String;') |
|
228 inClassIdentifiedByRef: javaClassRef. |
|
229 javaMethodRef resolve. ] on: Error |
|
230 do: [:e | throwedException := e ]. |
|
231 self assertTrue: (throwedException notNil |
|
232 and: [ throwedException messageText = 'IllegalAccessError' ]). |
|
233 self disableMockedExceptionThrowing. |
|
234 |
|
235 "Created: / 13-04-2011 / 14:47:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
236 "Modified: / 14-04-2011 / 14:11:15 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
237 ! |
|
238 |
|
239 testAccessingProtectedFromSubclass |
|
240 | javaClassRef javaMethodRef initString throwedException | |
|
241 |
|
242 self enableMockedExceptionThrowing. |
|
243 |
|
244 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
245 javaClassRef := JavaClassRef2 for: initString. |
|
246 javaClassRef owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass'). |
|
247 javaMethodRef := JavaMethodRef2 |
|
248 namedAndTyped: (JavaNameAndType2 name: 'protectedMethod' |
|
249 descriptor: '()Ljava/lang/String;') |
|
250 inClassIdentifiedByRef: javaClassRef. |
|
251 javaMethodRef resolve. ] on: Error |
|
252 do: [:e | throwedException := e ]. |
|
253 self assertTrue: (throwedException isNil). |
|
254 self disableMockedExceptionThrowing. |
|
255 |
|
256 "Created: / 13-04-2011 / 14:49:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
257 "Modified: / 13-04-2011 / 23:18:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
258 ! |
|
259 |
|
260 testAccessingPublic |
|
261 | javaClassRef javaMethodRef initString | |
|
262 |
|
263 self enableMockedExceptionThrowing. |
|
264 self shouldnt: |
|
265 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
266 javaClassRef := JavaClassRef2 for: initString. |
|
267 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
268 javaMethodRef := JavaMethodRef2 |
|
269 namedAndTyped: (JavaNameAndType2 name: 'publicMethod' descriptor: '()Ljava/lang/String;') |
|
270 inClassIdentifiedByRef: javaClassRef. |
|
271 javaMethodRef resolve.] |
|
272 raise: Error. |
|
273 self disableMockedExceptionThrowing. |
|
274 |
|
275 "Created: / 13-04-2011 / 14:44:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
276 ! |
|
277 |
|
278 testAccessingPublicFromOutside |
|
279 | javaClassRef javaMethodRef initString | |
|
280 |
|
281 self enableMockedExceptionThrowing. |
|
282 self shouldnt: |
|
283 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
284 javaClassRef := JavaClassRef2 for: initString. |
|
285 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
286 javaMethodRef := JavaMethodRef2 |
|
287 namedAndTyped: (JavaNameAndType2 name: 'publicMethod' |
|
288 descriptor: '()Ljava/lang/String;') |
|
289 inClassIdentifiedByRef: javaClassRef. |
|
290 javaMethodRef resolve. ] |
|
291 raise: Error. |
|
292 self disableMockedExceptionThrowing. |
|
293 |
|
294 "Created: / 13-04-2011 / 14:44:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
295 ! |
|
296 |
|
297 testAccessingPublicFromOutsideInNonPublic |
|
298 | javaClassRef javaMethodRef initString throwedException | |
|
299 |
|
300 self enableMockedExceptionThrowing. |
|
301 |
|
302 [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'. |
|
303 javaClassRef := JavaClassRef2 for: initString. |
|
304 javaClassRef owner: (Java classForName: 'java.lang.Object'). |
|
305 javaMethodRef := JavaMethodRef2 |
|
306 namedAndTyped: (JavaNameAndType2 name: 'publicMethod' |
|
307 descriptor: '()Ljava/lang/String;') |
|
308 inClassIdentifiedByRef: javaClassRef. |
|
309 javaMethodRef resolve. ] on: Error |
|
310 do: [:e | throwedException := e ]. |
|
311 self assertTrue: (throwedException notNil and:[throwedException messageText = 'IllegalAccessError']). |
|
312 self disableMockedExceptionThrowing. |
|
313 |
|
314 "Created: / 13-04-2011 / 14:48:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
315 "Modified: / 13-04-2011 / 23:04:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
|
316 ! |
|
317 |
|
318 testAccessingPublicFromSubclass |
|
319 | javaClassRef javaMethodRef initString throwedException | |
|
320 |
|
321 self enableMockedExceptionThrowing. |
|
322 |
|
323 [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'. |
|
324 javaClassRef := JavaClassRef2 for: initString. |
|
325 javaClassRef owner: (Java classForName: 'java.lang.SubclassOfPublicClass'). |
|
326 javaMethodRef := JavaMethodRef2 |
|
327 namedAndTyped: (JavaNameAndType2 name: 'publicMethod' |
|
328 descriptor: '()Ljava/lang/String;') |
|
329 inClassIdentifiedByRef: javaClassRef. |
|
330 javaMethodRef resolve. ] on: Error |
|
331 do: [:e | throwedException := e ]. |
|
332 self assertTrue: (throwedException isNil ). |
|
333 self disableMockedExceptionThrowing. |
|
334 |
|
335 "Created: / 13-04-2011 / 14:49:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>" |
117 ! ! |
336 ! ! |
118 |
337 |
119 !JavaInterfaceMethodRefTests class methodsFor:'documentation'! |
338 !JavaInterfaceMethodRefTests class methodsFor:'documentation'! |
120 |
339 |
121 version_SVN |
340 version_SVN |
122 ^ '$Id$' |
341 ^ '$Id$' |
123 ! ! |
342 ! ! |
|
343 |