1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.yaml.snakeyaml.issues.issue100;
17
18 import java.util.HashSet;
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Set;
22
23 import junit.framework.TestCase;
24
25 import org.yaml.snakeyaml.Util;
26 import org.yaml.snakeyaml.Yaml;
27 import org.yaml.snakeyaml.constructor.Constructor;
28
29 public class MergeJavaBeanTest extends TestCase {
30
31 @SuppressWarnings("unchecked")
32 public void testNoMerge() {
33 String input = "- &id001 !!org.yaml.snakeyaml.issues.issue100.Data {age: 11, id: id123}\n- *id001";
34
35 Yaml yaml = new Yaml();
36 List<Data> list = (List<Data>) yaml.load(input);
37 for (Data data : list) {
38
39 assertEquals("id123", data.getId());
40 assertEquals(11, data.getAge());
41 }
42 }
43
44 public void testMergeWithTags() {
45 String input = Util.getLocalResource("issues/issue100-1.yaml");
46
47 Yaml yaml = new Yaml();
48
49 List<?> list = (List<?>) yaml.load(input);
50
51 assertEquals(list.get(0).getClass(), Data.class);
52 assertEquals(11, ((Data) list.get(0)).getAge());
53 assertEquals("id123", ((Data) list.get(0)).getId());
54
55
56 assertEquals(list.get(1).getClass(), Data.class);
57 assertEquals(13, ((Data) list.get(1)).getAge());
58 assertEquals("id456", ((Data) list.get(1)).getId());
59
60
61 assertEquals(list.get(2).getClass(), Data.class);
62 assertEquals(11, ((Data) list.get(2)).getAge());
63 assertEquals("id789", ((Data) list.get(2)).getId());
64
65
66 assertEquals(list.get(3).getClass(), DataMore.class);
67 assertEquals(30, ((DataMore) list.get(3)).getAge());
68 assertEquals("id123", ((DataMore) list.get(3)).getId());
69 assertTrue(((DataMore) list.get(3)).isComplete());
70
71
72 assertTrue(list.get(4) instanceof Map);
73 assertEquals(1, ((Map<?, ?>) list.get(4)).size());
74 assertTrue(((Map<?, ?>) list.get(4)).containsKey("age"));
75 assertEquals(100, ((Map<?, ?>) list.get(4)).get("age"));
76
77
78 assertEquals(list.get(5).getClass(), DataMore.class);
79 assertEquals(100, ((DataMore) list.get(5)).getAge());
80 assertEquals("id789", ((DataMore) list.get(5)).getId());
81 assertFalse(((DataMore) list.get(5)).isComplete());
82
83 Set<Data> dataSet = new HashSet<Data>();
84 for (Object data : list) {
85 if (data instanceof Data) {
86 dataSet.add((Data) data);
87 }
88 }
89 assertEquals("Must be all but one Data instances.", list.size() - 1, dataSet.size());
90 }
91
92
93
94
95
96 @SuppressWarnings("unchecked")
97 public void testMergeBeanToMap() {
98 String input = "- &id001 !!org.yaml.snakeyaml.issues.issue100.Data {age: 11, id: id123}\n- << : *id001";
99
100 Yaml yaml = new Yaml();
101 List<Object> list = (List<Object>) yaml.load(input);
102
103 Data first = (Data) list.get(0);
104 assertEquals(11, first.getAge());
105 assertEquals("id123", first.getId());
106
107 Map<?, ?> second = (Map<?, ?>) list.get(1);
108 assertEquals(11, second.get("age"));
109 assertEquals("id123", second.get("id"));
110 }
111
112 @SuppressWarnings("unchecked")
113 public void testMergeAndDeviate() {
114 String input = "- &id001 !!org.yaml.snakeyaml.issues.issue100.Data {age: 11, id: id123}\n- <<: *id001\n id: id456";
115
116 Yaml yaml = new Yaml();
117 List<Object> list = (List<Object>) yaml.load(input);
118
119 Data first = (Data) list.get(0);
120 assertEquals(11, first.getAge());
121 assertEquals("id123", first.getId());
122
123 Map<?, ?> second = (Map<?, ?>) list.get(1);
124 assertEquals(11, second.get("age"));
125 assertEquals("id456", second.get("id"));
126 }
127
128
129
130
131
132
133
134
135
136
137
138
139 @SuppressWarnings("unchecked")
140 public void testMergeAndDeviateOverride() {
141 String input = "- &id001 !!org.yaml.snakeyaml.issues.issue100.Data {age: 11, id: id123}\n- &id002 !!org.yaml.snakeyaml.issues.issue100.Data {age: 37}\n- <<: [ *id002, *id001 ]";
142
143 Yaml yaml = new Yaml();
144 List<Data> list = (List<Data>) yaml.load(input);
145
146
147 assertEquals(11, list.get(0).getAge());
148 assertEquals("id123", list.get(0).getId());
149
150
151 assertEquals(37, list.get(1).getAge());
152 assertEquals(null, list.get(1).getId());
153
154
155 Map<?, ?> third = (Map<?, ?>) list.get(2);
156 assertEquals(37, third.get("age"));
157 assertEquals("id123", third.get("id"));
158 }
159
160
161
162
163
164 public void testMergeBeanProperty() {
165 String input = Util.getLocalResource("issues/issue100-3.yaml");
166
167 Yaml yaml = new Yaml(new Constructor(DataBean.class));
168 DataBean bean = (DataBean) yaml.load(input);
169 assertEquals("id001", bean.getId());
170 assertEquals("id002", bean.getData().getId());
171 assertEquals(17, bean.getData().getAge());
172 assertEquals(17, bean.getMore().getAge());
173 assertEquals("more003", bean.getMore().getId());
174 assertTrue(bean.getMore().isComplete());
175 }
176
177
178
179
180 @SuppressWarnings("unchecked")
181 public void testMergeMapToJavaBean() {
182 String input = "- &id001 { age: 11, id: id123 }\n- !!org.yaml.snakeyaml.issues.issue100.Data\n <<: *id001\n id: id456";
183
184 Yaml yaml = new Yaml(new Constructor());
185 List<Object> objects = (List<Object>) yaml.load(input);
186 assertEquals(2, objects.size());
187
188 Object first = objects.get(0);
189 Map<Object, Object> firstMap = (Map<Object, Object>) first;
190
191 assertEquals(11, firstMap.get("age"));
192 assertEquals("id123", firstMap.get("id"));
193
194 Data secondData = (Data) objects.get(1);
195 assertEquals(11, secondData.getAge());
196 assertEquals("id456", secondData.getId());
197 }
198 }