1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.generics;
18
19 import java.beans.IntrospectionException;
20
21 import junit.framework.TestCase;
22
23 import org.yaml.snakeyaml.Util;
24 import org.yaml.snakeyaml.Yaml;
25
26 public class GenericArrayTypeTest extends TestCase {
27
28 public void testPrimitives() {
29 GenericPrimitivesArray ga = new GenericPrimitivesArray(3);
30 Yaml yaml = new Yaml();
31 try {
32 yaml.dump(ga);
33 fail("Arrays of primitives are not yet fully supported.");
34 } catch (Exception e) {
35 assertEquals("Arrays of primitives are not fully supported.", e.getMessage());
36 }
37 }
38
39 public static class GenericPrimitivesArray extends AbstractAnimal<int[]> {
40 private int[] home;
41
42 public GenericPrimitivesArray(int count) {
43 home = new int[count];
44 for (int i = 0; i < home.length; i++) {
45 home[i] = i + 1;
46 }
47 }
48
49 @Override
50 public int[] getHome() {
51 return home;
52 }
53
54 @Override
55 public void setHome(int[] home) {
56 this.home = home;
57 }
58 }
59
60 public void testClasses() throws IntrospectionException {
61 GenericArray ga = new GenericArray();
62 Yaml yaml = new Yaml();
63 String doc = yaml.dump(ga);
64
65 String etalon = "!!org.yaml.snakeyaml.generics.GenericArrayTypeTest$GenericArray\n"
66 + "home: [1, 2, 3]\n" + "name: Array3\n";
67 assertEquals(etalon, doc);
68 if (GenericsBugDetector.isProperIntrospection()) {
69 GenericArray parsed = (GenericArray) yaml.load(doc);
70 assertEquals("Array3", parsed.getName());
71 assertEquals(3, parsed.getHome().length);
72 } else {
73 try {
74 yaml.load(doc);
75 } catch (Exception e) {
76
77 String message = "Cannot create property=home for JavaBean=org.yaml.snakeyaml.generics.GenericArrayTypeTest$GenericArray";
78 assertTrue(e.getMessage(), e.getMessage().contains(message));
79 }
80 }
81 }
82
83 public static class GenericArray extends AbstractAnimal<Integer[]> {
84 private Integer[] home;
85
86 public GenericArray() {
87 home = new Integer[3];
88 for (int i = 0; i < home.length; i++) {
89 home[i] = i + 1;
90 }
91 setName("Array" + String.valueOf(3));
92 }
93
94 @Override
95 public Integer[] getHome() {
96 return home;
97 }
98
99 @Override
100 public void setHome(Integer[] home) {
101 this.home = home;
102 }
103 }
104
105 public void testJavaBean() throws IntrospectionException {
106 GenericArray ga = new GenericArray();
107 ArrayBean bean = new ArrayBean();
108 bean.setId("ID556677");
109 bean.setGa(ga);
110 Yaml dumper = new Yaml();
111 String doc = dumper.dumpAsMap(bean);
112
113 assertEquals(Util.getLocalResource("javabeans/genericArray-1.yaml"), doc);
114
115 Yaml beanLoader = new Yaml();
116 if (GenericsBugDetector.isProperIntrospection()) {
117 ArrayBean loaded = beanLoader.loadAs(doc, ArrayBean.class);
118 assertEquals("ID556677", loaded.getId());
119 assertEquals("Array3", loaded.getGa().getName());
120 assertEquals(3, loaded.getGa().getHome().length);
121 } else {
122 try {
123 beanLoader.load(doc);
124 } catch (Exception e) {
125
126 String message = "Cannot create property=home for JavaBean=org.yaml.snakeyaml.generics.GenericArrayTypeTest$GenericArray";
127 assertTrue(e.getMessage(), e.getMessage().contains(message));
128 }
129 }
130 }
131
132 public static class ArrayBean {
133 private String id;
134 private GenericArray ga;
135
136 public String getId() {
137 return id;
138 }
139
140 public void setId(String id) {
141 this.id = id;
142 }
143
144 public GenericArray getGa() {
145 return ga;
146 }
147
148 public void setGa(GenericArray ga) {
149 this.ga = ga;
150 }
151 }
152 }