1
2 package eu.simuline.testhelpers;
3
4 import eu.simuline.testhelpers.Actions;
5
6
7
8 import static org.junit.Assert.assertEquals;
9
10
11
12
13 import org.junit.Test;
14 import org.junit.Before;
15 import org.junit.runner.RunWith;
16 import org.junit.runners.Suite;
17 import org.junit.runners.Suite.SuiteClasses;
18
19
20
21
22
23
24
25
26 @RunWith(Suite.class)
27 @SuiteClasses({AccessorTest.TestAll.class})
28 public class AccessorTest {
29
30
31
32
33
34 static AccessorTest TEST = new AccessorTest();
35
36 public static class TestAll {
37 @Test public void testGetField() throws Exception {
38 AccessorTest.TEST.testGetField();
39 }
40 @Test public void testSetField() throws Exception {
41 AccessorTest.TEST.testSetField();
42 }
43 @Test public void testCreate() throws Exception {
44 AccessorTest.TEST.testCreate();
45 }
46 @Test public void testInvoke() throws Exception {
47 AccessorTest.TEST.testInvoke();
48 }
49 @Test public void testGetInnerClass() {
50 AccessorTest.TEST.testGetInnerClass();
51 }
52 }
53
54
55
56
57
58
59
60
61 Integer test = Integer.valueOf(0);
62
63 class NonStatic {
64 class NonStatic1 {
65 }
66
67 }
68
69 static class Static {
70 static class Static2 {
71 }
72 }
73
74 static class ForTests {
75 private int aPrimitiveField = 3;
76 private static int aStaticPrimitiveField = 4;
77 private final static int aFinalField = -1;
78 static {
79 System.out.println("ForTests:static");
80 }
81
82 private int privateMethod(int i) {
83 return aPrimitiveField*i;
84 }
85 protected int protectedMethod(int i) {
86 return aPrimitiveField*i*10;
87 }
88 private static int privateStaticMethod(int i) {
89 return aStaticPrimitiveField*i;
90 }
91
92 }
93
94 static class ForTestsB extends ForTests {
95 private int aPrimitiveField = 33;
96 private static int aStaticPrimitiveField = 43;
97 static {
98 System.out.println("ForTestsB:static");
99 }
100
101 private int privateMethod(int i) {
102 return aPrimitiveField*i;
103 }
104 protected int protectedMethod(int i) {
105 return aPrimitiveField*i*10;
106 }
107 private static int privateStaticMethod(int i) {
108 return aStaticPrimitiveField*i;
109 }
110 }
111
112
113
114
115 private void setUp() {
116 try {
117 Class.forName("eu.simuline.testhelpers.AccessorTest");
118 Class.forName("eu.simuline.testhelpers.AccessorTest.Static");
119 Class.forName("eu.simuline.testhelpers.AccessorTest.Static.Static2");
120 Class.forName("eu.simuline.testhelpers.AccessorTest.ForTests");
121 Class.forName("eu.simuline.testhelpers.AccessorTest.ForTestsB");
122 } catch (ClassNotFoundException e) {
123 throw new IllegalStateException("****");
124 }
125 }
126
127
128 public void testGetField() throws Exception {
129 Object obj;
130
131
132
133
134
135 obj = new ForTests();
136 assertEquals(Integer.valueOf(3),
137 (Integer)Accessor.getField(obj,"aPrimitiveField"));
138
139
140
141
142
143
144 try {
145 Accessor.getField((Object)null,"aPrimitiveField");
146 } catch (IllegalArgumentException e) {
147 assertEquals("Specified null-target. ",e.getMessage());
148 }
149
150
151
152
153
154
155 assertEquals(Integer.valueOf(4),
156 (Integer)Accessor.getField(ForTests.class,
157 "aStaticPrimitiveField"));
158
159
160
161
162
163
164 try {
165 Accessor.getField((Class)null,"aStaticPrimitiveField");
166 } catch (IllegalArgumentException e) {
167 assertEquals("Specified null-class. ",e.getMessage());
168 }
169
170
171
172
173
174
175 try {
176 Accessor.getField(null,null,"aStaticPrimitiveField");
177 } catch (IllegalArgumentException e) {
178 assertEquals("Specified null-class. ",e.getMessage());
179 }
180
181
182
183
184
185
186 assertEquals(Integer.valueOf(3),
187 (Integer)Accessor.getField(ForTests.class,
188 new ForTestsB(),
189 "aPrimitiveField"));
190
191
192
193
194
195 assertEquals(Integer.valueOf(33),
196 (Integer)Accessor.getField(ForTestsB.class,
197 new ForTestsB(),
198 "aPrimitiveField"));
199
200
201
202
203
204 assertEquals(Integer.valueOf(4),
205 (Integer)Accessor.getField(ForTests.class,
206 null,
207 "aStaticPrimitiveField"));
208
209
210
211
212
213 assertEquals(Integer.valueOf(43),
214 (Integer)Accessor.getField(ForTestsB.class,
215 null,
216 "aStaticPrimitiveField"));
217
218
219
220
221
222
223
224
225
226
227
228
229
230 try {
231 Accessor.getField(Integer.class,null,"aNonExistingField");
232 } catch (NoSuchFieldException e) {
233 assertEquals("aNonExistingField",e.getMessage());
234 }
235
236
237
238
239
240
241 try {
242 Accessor.getField(ForTests.class,
243 new ForTests(),
244 "aStaticPrimitiveField");
245 } catch (IllegalArgumentException e) {
246 assertEquals("The specified field 'aStaticPrimitiveField' should " +
247 "not be static. ",
248 e.getMessage());
249 }
250
251
252
253
254
255
256 try {
257 Accessor.getField(ForTests.class,
258 null,
259 "aPrimitiveField");
260 } catch (IllegalArgumentException e) {
261 assertEquals("The specified field 'aPrimitiveField' should " +
262 "be static. ",
263 e.getMessage());
264 }
265
266 }
267
268
269 public void testSetField() throws Exception {
270
271 Object obj;
272
273
274
275
276
277 obj = new ForTests();
278 Accessor.setField(obj,"aPrimitiveField",Integer.valueOf(30));
279
280 assertEquals(Integer.valueOf(30),
281 (Integer)Accessor.getField(obj,"aPrimitiveField"));
282
283
284
285
286
287
288
289 try {
290 Accessor.setField((Object)null,"aPrimitiveField",null);
291 } catch (IllegalArgumentException e) {
292 assertEquals("Specified null-target. ",e.getMessage());
293 }
294
295
296
297
298
299
300 Accessor.setField(ForTests.class,
301 "aStaticPrimitiveField",
302 Integer.valueOf(40));
303 assertEquals(Integer.valueOf(40),
304 (Integer)Accessor.getField(ForTests.class,
305 "aStaticPrimitiveField"));
306
307
308
309
310
311
312 try {
313 Accessor.setField((Class)null,
314 "aStaticPrimitiveField",
315 Integer.valueOf(-1));
316 } catch (IllegalArgumentException e) {
317 assertEquals("Specified null-class. ",e.getMessage());
318 }
319
320
321
322
323
324 try {
325 Accessor.setField(null,
326 null,
327 "aStaticPrimitiveField",
328 Integer.valueOf(-1));
329 } catch (IllegalArgumentException e) {
330 assertEquals("Specified null-class. ",e.getMessage());
331 }
332
333
334
335
336
337
338 obj = new ForTestsB();
339 Accessor.setField(ForTests.class,
340 obj,
341 "aPrimitiveField",
342 Integer.valueOf(30));
343 assertEquals(Integer.valueOf(30),
344 (Integer)Accessor.getField(ForTests.class,
345 obj,
346 "aPrimitiveField"));
347
348
349
350
351
352
353 obj = new ForTestsB();
354 Accessor.setField(ForTestsB.class,
355 obj,
356 "aPrimitiveField",
357 Integer.valueOf(330));
358 assertEquals(Integer.valueOf(330),
359 (Integer)Accessor.getField(ForTestsB.class,
360 obj,
361 "aPrimitiveField"));
362
363
364
365
366
367 Accessor.setField(ForTests.class,
368 null,
369 "aStaticPrimitiveField",
370 Integer.valueOf(40));
371 assertEquals(Integer.valueOf(40),
372 (Integer)Accessor.getField(ForTests.class,
373 null,
374 "aStaticPrimitiveField"));
375
376
377
378
379
380
381 Accessor.setField(ForTestsB.class,
382 null,
383 "aStaticPrimitiveField",
384 Integer.valueOf(430));
385 assertEquals(Integer.valueOf(430),
386 (Integer)Accessor.getField(ForTestsB.class,
387 null,
388 "aStaticPrimitiveField"));
389
390
391
392
393
394 try {
395 Accessor.setField(Integer.class,
396 null,
397 "aNonExistingField",
398 Integer.valueOf(-1));
399 } catch (NoSuchFieldException e) {
400 assertEquals("aNonExistingField",e.getMessage());
401 }
402
403
404
405
406
407
408 try {
409 Accessor.setField(ForTests.class,
410 new ForTests(),
411 "aStaticPrimitiveField",
412 Integer.valueOf(-1));
413 } catch (IllegalArgumentException e) {
414 assertEquals("The specified field 'aStaticPrimitiveField' should " +
415 "not be static. ",
416 e.getMessage());
417 }
418
419
420
421
422
423
424 try {
425 Accessor.setField(ForTests.class,
426 null,
427 "aPrimitiveField",
428 Integer.valueOf(-1));
429 } catch (IllegalArgumentException e) {
430 assertEquals("The specified field 'aPrimitiveField' should " +
431 "be static. ",
432 e.getMessage());
433 }
434
435
436
437
438
439
440 try {
441 Accessor.setField(ForTests.class,
442 "aFinalField",
443 Integer.valueOf(-1));
444 } catch (IllegalArgumentException e) {
445 assertEquals("Field 'aFinalField' in class '" +
446 ForTests.class.getName() +
447 "' is declared final and is hence not accessible. ",
448 e.getMessage());
449 }
450
451
452
453
454
455
456 try {
457 Accessor.setField(ForTests.class,
458 "aStaticPrimitiveField",
459 null);
460 } catch (IllegalArgumentException e) {
461 assertEquals("Tried to assign null-value " +
462 "to field 'aStaticPrimitiveField'" +
463 " in class '" + ForTests.class.getName() +
464 "' although its type '" + Integer.TYPE +
465 "' is primitive. ",
466 e.getMessage());
467 }
468
469 }
470
471 public void testCreate() throws Exception {
472 ForTests ft;
473
474
475
476
477
478 ft = Accessor.create(ForTests.class);
479
480
481
482
483
484 ft = Accessor.create(ForTests.class,
485 new Class[] {},
486 new Object[] {});
487 }
488
489 public void testInvoke() throws Exception {
490 int result;
491
492
493
494
495
496
497 result = ((Integer)Accessor.invoke(new ForTestsB(),
498 "privateMethod",
499 Integer.valueOf(2))
500 ).intValue();
501 assertEquals(66,result);
502
503
504
505
506
507
508 result = ((Integer)Accessor.invoke(new ForTests(),
509 "privateMethod",
510 Integer.valueOf(2))
511 ).intValue();
512 assertEquals(6,result);
513
514
515
516
517
518
519 result = ((Integer)Accessor.invoke(new ForTestsB(),
520 "protectedMethod",
521 Integer.valueOf(2))
522 ).intValue();
523 assertEquals(660,result);
524
525
526
527
528
529
530 result = ((Integer)Accessor.invoke(new ForTests(),
531 "protectedMethod",
532 Integer.valueOf(2))
533 ).intValue();
534 assertEquals(60,result);
535
536
537
538
539
540
541 Accessor.setField(ForTests.class,
542 "aStaticPrimitiveField",
543 Integer.valueOf(4));
544 result = ((Integer)Accessor.invokeStatic(ForTests.class,
545 "privateStaticMethod",
546 Integer.valueOf(2))
547 ).intValue();
548 assertEquals(8,result);
549
550 }
551
552 public void testGetInnerClass() {
553
554
555
556
557
558 try {
559 Accessor.getInnerClass(null,"ForTests");
560 } catch (IllegalArgumentException e) {
561 assertEquals("Specified null-class. ",e.getMessage());
562 }
563
564
565
566
567
568
569 try {
570 Accessor.getInnerClass(AccessorTest.class,(String)null);
571 } catch (IllegalArgumentException e) {
572 assertEquals("Specified null-class-name. ",e.getMessage());
573 }
574
575
576
577
578
579
580 try {
581 Accessor.getInnerClass(AccessorTest.class,"noInnerClass");
582 } catch (IllegalArgumentException e) {
583 assertEquals("Class '" + AccessorTest.class.getName() +
584 "' has no inner class named '" + "noInnerClass" + "'. ",
585 e.getMessage());
586 }
587
588
589
590
591
592
593 assertEquals(ForTests.class,
594 Accessor.getInnerClass(AccessorTest.class,
595 "ForTests"));
596 }
597
598
599
600
601
602
603
604
605
606
607
608 public static void main(String args[]) {
609 Actions.runFromMain();
610 }
611
612 }