Merge branch 'sv-comp-run-script' of git://github.com/peterschrammel/jpf-core into...
[jpf-core.git] / src / tests / gov / nasa / jpf / test / vm / basic / AnnotationToStringTest.java
1 package gov.nasa.jpf.test.vm.basic;
2
3 import java.lang.annotation.Retention;
4 import java.lang.annotation.RetentionPolicy;
5
6 import org.junit.Test;
7
8 import gov.nasa.jpf.util.test.TestJPF;
9
10 public class AnnotationToStringTest extends TestJPF {
11   private static final String TTFF_NESTED = "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$Nested2("
12       + "fields=@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A1(f1=[false,false],f2=[true,true]))";
13   private static final String HELLO_WORLD_NESTED = "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$Nested1("
14       + "fields=@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A16(f1=Hello,f2=World))";
15
16
17   public static enum EnumConsts {
18     FIRST, SECOND
19   }
20
21   @Retention(RetentionPolicy.RUNTIME)
22   public @interface A0 {
23     boolean f1();
24
25     boolean f2();
26   }
27
28   @A0(f1 = true, f2 = false)
29   public class C0 {
30   }
31
32   @Test
33   public void testBooleanAttributeToString() {
34     if(verifyNoPropertyViolation()) {
35       Class<?> klass = C0.class;
36       A0 a = klass.getAnnotation(A0.class);
37       System.out.println(a.toString());
38       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A0(f1=true,f2=false)");
39     }
40   }
41
42   @Retention(RetentionPolicy.RUNTIME)
43   public @interface A1 {
44     boolean[] f1();
45
46     boolean[] f2();
47   }
48
49   @A1(f1 = { true, false }, f2 = { false, true })
50   public class C1 {
51   }
52
53   @Test
54   public void testBooleanArrayAttributeToString() {
55     if(verifyNoPropertyViolation()) {
56       Class<?> klass = C1.class;
57       A1 a = klass.getAnnotation(A1.class);
58       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A1(f1=[true,false],f2=[false,true])");
59     }
60   }
61
62   @Retention(RetentionPolicy.RUNTIME)
63   public @interface A2 {
64     byte f1();
65
66     byte f2();
67   }
68
69   @A2(f1 = 0, f2 = 1)
70   public class C2 {
71   }
72
73   @Test
74   public void testByteAttributeToString() {
75     if(verifyNoPropertyViolation()) {
76       Class<?> klass = C2.class;
77       A2 a = klass.getAnnotation(A2.class);
78       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A2(f1=0,f2=1)");
79     }
80   }
81
82   @Retention(RetentionPolicy.RUNTIME)
83   public @interface A3 {
84     byte[] f1();
85
86     byte[] f2();
87   }
88
89   @A3(f1 = { 0, 1 }, f2 = { 1, 0 })
90   public class C3 {
91   }
92
93   @Test
94   public void testByteArrayAttributeToString() {
95     if(verifyNoPropertyViolation()) {
96       Class<?> klass = C3.class;
97       A3 a = klass.getAnnotation(A3.class);
98       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A3(f1=[0,1],f2=[1,0])");
99     }
100   }
101
102   @Retention(RetentionPolicy.RUNTIME)
103   public @interface A4 {
104     char f1();
105
106     char f2();
107   }
108
109   @A4(f1 = 'a', f2 = 'b')
110   public class C4 {
111   }
112
113   @Test
114   public void testCharAttributeToString() {
115     if(verifyNoPropertyViolation()) {
116       Class<?> klass = C4.class;
117       A4 a = klass.getAnnotation(A4.class);
118       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A4(f1=a,f2=b)");
119     }
120   }
121
122   @Retention(RetentionPolicy.RUNTIME)
123   public @interface A5 {
124     char[] f1();
125
126     char[] f2();
127   }
128
129   @A5(f1 = { 'a', 'b' }, f2 = { 'b', 'a' })
130   public class C5 {
131   }
132
133   @Test
134   public void testCharArrayAttributeToString() {
135     if(verifyNoPropertyViolation()) {
136       Class<?> klass = C5.class;
137       A5 a = klass.getAnnotation(A5.class);
138       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A5(f1=[a,b],f2=[b,a])");
139     }
140   }
141
142   @Retention(RetentionPolicy.RUNTIME)
143   public @interface A6 {
144     short f1();
145
146     short f2();
147   }
148
149   @A6(f1 = 0, f2 = 1)
150   public class C6 {
151   }
152
153   @Test
154   public void testShortAttributeToString() {
155     if(verifyNoPropertyViolation()) {
156       Class<?> klass = C6.class;
157       A6 a = klass.getAnnotation(A6.class);
158       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A6(f1=0,f2=1)");
159     }
160   }
161
162   @Retention(RetentionPolicy.RUNTIME)
163   public @interface A7 {
164     short[] f1();
165
166     short[] f2();
167   }
168
169   @A7(f1 = { 0, 1 }, f2 = { 1, 0 })
170   public class C7 {
171   }
172
173   @Test
174   public void testShortArrayAttributeToString() {
175     if(verifyNoPropertyViolation()) {
176       Class<?> klass = C7.class;
177       A7 a = klass.getAnnotation(A7.class);
178       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A7(f1=[0,1],f2=[1,0])");
179     }
180   }
181
182   @Retention(RetentionPolicy.RUNTIME)
183   public @interface A8 {
184     int f1();
185
186     int f2();
187   }
188
189   @A8(f1 = 0, f2 = 1)
190   public class C8 {
191   }
192
193   @Test
194   public void testIntAttributeToString() {
195     if(verifyNoPropertyViolation()) {
196       Class<?> klass = C8.class;
197       A8 a = klass.getAnnotation(A8.class);
198       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A8(f1=0,f2=1)");
199     }
200   }
201
202   @Retention(RetentionPolicy.RUNTIME)
203   public @interface A9 {
204     int[] f1();
205
206     int[] f2();
207   }
208
209   @A9(f1 = { 0, 1 }, f2 = { 1, 0 })
210   public class C9 {
211   }
212
213   @Test
214   public void testIntArrayAttributeToString() {
215     if(verifyNoPropertyViolation()) {
216       Class<?> klass = C9.class;
217       A9 a = klass.getAnnotation(A9.class);
218       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A9(f1=[0,1],f2=[1,0])");
219     }
220   }
221
222   @Retention(RetentionPolicy.RUNTIME)
223   public @interface A10 {
224     long f1();
225
226     long f2();
227   }
228
229   @A10(f1 = 1L, f2 = 10L)
230   public class C10 {
231   }
232
233   @Test
234   public void testLongAttributeToString() {
235     if(verifyNoPropertyViolation()) {
236       Class<?> klass = C10.class;
237       A10 a = klass.getAnnotation(A10.class);
238       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A10(f1=1,f2=10)");
239     }
240   }
241
242   @Retention(RetentionPolicy.RUNTIME)
243   public @interface A11 {
244     long[] f1();
245
246     long[] f2();
247   }
248
249   @A11(f1 = { 1L, 10L }, f2 = { 10L, 1L })
250   public class C11 {
251   }
252
253   @Test
254   public void testLongArrayAttributeToString() {
255     if(verifyNoPropertyViolation()) {
256       Class<?> klass = C11.class;
257       A11 a = klass.getAnnotation(A11.class);
258       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A11(f1=[1,10],f2=[10,1])");
259     }
260   }
261
262   @Retention(RetentionPolicy.RUNTIME)
263   public @interface A12 {
264     float f1();
265
266     float f2();
267   }
268
269   @A12(f1 = 0.5f, f2 = 2.0f)
270   public class C12 {
271   }
272
273   @Test
274   public void testFloatAttributeToString() {
275     if(verifyNoPropertyViolation()) {
276       Class<?> klass = C12.class;
277       A12 a = klass.getAnnotation(A12.class);
278       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A12(f1=0.5,f2=2.0)");
279     }
280   }
281
282   @Retention(RetentionPolicy.RUNTIME)
283   public @interface A13 {
284     float[] f1();
285
286     float[] f2();
287   }
288
289   @A13(f1 = { 0.5f, 2.0f }, f2 = { 2.0f, 0.5f })
290   public class C13 {
291   }
292
293   @Test
294   public void testFloatArrayAttributeToString() {
295     if(verifyNoPropertyViolation()) {
296       Class<?> klass = C13.class;
297       A13 a = klass.getAnnotation(A13.class);
298       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A13(f1=[0.5,2.0],f2=[2.0,0.5])");
299     }
300   }
301
302   @Retention(RetentionPolicy.RUNTIME)
303   public @interface A14 {
304     double f1();
305
306     double f2();
307   }
308
309   @A14(f1 = 2.0, f2 = 3.5)
310   public class C14 {
311   }
312
313   @Test
314   public void testDoubleAttributeToString() {
315     if(verifyNoPropertyViolation()) {
316       Class<?> klass = C14.class;
317       A14 a = klass.getAnnotation(A14.class);
318       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A14(f1=2.0,f2=3.5)");
319     }
320   }
321
322   @Retention(RetentionPolicy.RUNTIME)
323   public @interface A15 {
324     double[] f1();
325
326     double[] f2();
327   }
328
329   @A15(f1 = { 2.0, 3.5 }, f2 = { 3.5, 2.0 })
330   public class C15 {
331   }
332
333   @Test
334   public void testDoubleArrayAttributeToString() {
335     if(verifyNoPropertyViolation()) {
336       Class<?> klass = C15.class;
337       A15 a = klass.getAnnotation(A15.class);
338       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A15(f1=[2.0,3.5],f2=[3.5,2.0])");
339     }
340   }
341
342   @Retention(RetentionPolicy.RUNTIME)
343   public @interface A16 {
344     String f1();
345
346     String f2();
347   }
348
349   @A16(f1 = "Hello", f2 = "World")
350   public class C16 {
351   }
352
353   @Test
354   public void testStringAttributeToString() {
355     if(verifyNoPropertyViolation()) {
356       Class<?> klass = C16.class;
357       A16 a = klass.getAnnotation(A16.class);
358       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A16(f1=Hello,f2=World)");
359     }
360   }
361
362   @Retention(RetentionPolicy.RUNTIME)
363   public @interface A17 {
364     String[] f1();
365
366     String[] f2();
367   }
368
369   @A17(f1 = { "Hello", "World" }, f2 = { "World", "Hello" })
370   public class C17 {
371   }
372
373   @Test
374   public void testStringArrayAttributeToString() {
375     if(verifyNoPropertyViolation()) {
376       Class<?> klass = C17.class;
377       A17 a = klass.getAnnotation(A17.class);
378       System.out.println(a.toString());
379       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A17(f1=[Hello,World],f2=[World,Hello])");
380     }
381   }
382
383   @Retention(RetentionPolicy.RUNTIME)
384   public @interface A18 {
385     Class<?> f1();
386
387     Class<?> f2();
388   }
389
390   @A18(f1 = String.class, f2 = Integer.class)
391   public class C18 {
392   }
393
394   @Test
395   public void testClassAttributeToString() {
396     if(verifyNoPropertyViolation()) {
397       Class<?> klass = C18.class;
398       A18 a = klass.getAnnotation(A18.class);
399       System.out.println(a.toString());
400       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A18(f1=class java.lang.String,f2=class java.lang.Integer)");
401     }
402   }
403
404   @Retention(RetentionPolicy.RUNTIME)
405   public @interface A19 {
406     Class<?>[] f1();
407
408     Class<?>[] f2();
409   }
410
411   @A19(f1 = { String.class, Integer.class }, f2 = { Integer.class, String.class })
412   public class C19 {
413   }
414
415   @Test
416   public void testClassArrayAttributeToString() {
417     if(verifyNoPropertyViolation()) {
418       Class<?> klass = C19.class;
419       A19 a = klass.getAnnotation(A19.class);
420       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A19(f1=[class java.lang.String,class java.lang.Integer],"
421           + "f2=[class java.lang.Integer,class java.lang.String])");
422     }
423   }
424
425   @Retention(RetentionPolicy.RUNTIME)
426   public @interface A20 {
427     EnumConsts f1();
428
429     EnumConsts f2();
430   }
431
432   @A20(f1 = EnumConsts.FIRST, f2 = EnumConsts.SECOND)
433   public class C20 {
434   }
435
436   @Test
437   public void testEnumConstsAttributeToString() {
438     if(verifyNoPropertyViolation()) {
439       Class<?> klass = C20.class;
440       A20 a = klass.getAnnotation(A20.class);
441       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A20(f1=gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$EnumConsts.FIRST,"
442           + "f2=gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$EnumConsts.SECOND)");
443     }
444   }
445
446   @Retention(RetentionPolicy.RUNTIME)
447   public @interface A21 {
448     EnumConsts[] f1();
449
450     EnumConsts[] f2();
451   }
452
453   @A21(f1 = { EnumConsts.FIRST, EnumConsts.SECOND }, f2 = { EnumConsts.SECOND, EnumConsts.FIRST })
454   public class C21 {
455   }
456
457   @Test
458   public void testEnumConstsArrayAttributeToString() {
459     if(verifyNoPropertyViolation()) {
460       Class<?> klass = C21.class;
461       A21 a = klass.getAnnotation(A21.class);
462       assertEquals(a.toString(), "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A21("
463           + "f1=[gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$EnumConsts.FIRST,gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$EnumConsts.SECOND],"
464           + "f2=[gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$EnumConsts.SECOND,gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$EnumConsts.FIRST])");
465     }
466   }
467
468   @Retention(RetentionPolicy.RUNTIME)
469   public @interface Nested1 {
470     A16 fields();
471   }
472   
473   @Retention(RetentionPolicy.RUNTIME)
474   public @interface Nested2 {
475     A1 fields();
476   }
477   
478   @Retention(RetentionPolicy.RUNTIME)
479   public @interface A22 {
480     Nested1 f1();
481     Nested2 f2();
482   }
483   
484   @A22(f1 = @Nested1(fields = @A16(f1 = "Hello", f2 = "World")), f2 = @Nested2(fields = @A1(f1 = {false, false}, f2 = {true, true})))
485   public class C22 {
486     
487   }
488   
489   @Test
490   public void testAnnotationAttributeToString() {
491     if(verifyNoPropertyViolation()) {
492       Class<?> klass = C22.class;
493       A22 a = klass.getAnnotation(A22.class);
494       String toString = "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A22(f1=" + HELLO_WORLD_NESTED + ",f2=" + TTFF_NESTED + ")";
495       assertEquals(a.toString(), a.toString(), toString);
496     }
497   }
498   
499   @Retention(RetentionPolicy.RUNTIME)
500   public @interface A23 {
501     Nested1[] f1();
502     Nested2[] f2();
503   }
504   
505   @A23(f1 = {
506     @Nested1(fields = @A16(f1 = "Hello", f2 = "World")), @Nested1(fields = @A16(f1 = "Hola", f2 = "Mundo"))
507   }, f2 = {
508     @Nested2(fields = @A1(f1 = {false, false}, f2 = {true, true})), @Nested2(fields = @A1(f1 = {true,true}, f2 = {false,false}))
509   })
510   public class C23 {
511     
512   }
513   
514   @Test
515   public void testAnnotationArrayAttributeToString() {
516     if(verifyNoPropertyViolation()) {
517       Class<?> klass = C23.class;
518       A23 a = klass.getAnnotation(A23.class);
519       String holaMundo = HELLO_WORLD_NESTED.replace("Hello", "Hola").replace("World", "Mundo");
520       String trueTrueString = TTFF_NESTED.replaceAll("false", "TMP").replaceAll("true", "false").replaceAll("TMP", "true"); 
521       String toString = "@gov.nasa.jpf.test.vm.basic.AnnotationToStringTest$A23(f1=[" + HELLO_WORLD_NESTED + "," + holaMundo + "],"
522           + "f2=[" + TTFF_NESTED + "," + trueTrueString + "])";
523       assertEquals(a.toString(), toString);
524     }
525   }
526 }