1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package examples.collections;
17
18 import java.util.Iterator;
19 import java.util.LinkedHashMap;
20 import java.util.Map;
21
22 import junit.framework.TestCase;
23
24 import org.yaml.snakeyaml.Util;
25 import org.yaml.snakeyaml.Yaml;
26
27
28
29
30
31 public class TypeSafeMap2Test extends TestCase {
32 public void testDumpMap() {
33 MapBean2 bean = new MapBean2();
34 Map<Developer2, Color> data = new LinkedHashMap<Developer2, Color>();
35 data.put(new Developer2("Andy", "tester"), Color.BLACK);
36 data.put(new Developer2("Lisa", "owner"), Color.RED);
37 bean.setData(data);
38 Map<Color, Developer2> developers = new LinkedHashMap<Color, Developer2>();
39 developers.put(Color.WHITE, new Developer2("Fred", "creator"));
40 developers.put(Color.BLACK, new Developer2("John", "committer"));
41 bean.setDevelopers(developers);
42 Yaml yaml = new Yaml();
43 String output = yaml.dumpAsMap(bean);
44
45 String etalon = Util.getLocalResource("examples/map-bean-12.yaml");
46 assertEquals(etalon, output);
47 }
48
49 public void testMap2() {
50 MapBean2 bean = new MapBean2();
51 Map<Developer2, Color> data = new LinkedHashMap<Developer2, Color>();
52 data.put(new Developer2("Andy", "tester"), Color.BLACK);
53 data.put(new SuperMan("Bill", "cleaner", false), Color.BLACK);
54 data.put(new Developer2("Lisa", "owner"), Color.RED);
55 bean.setData(data);
56 Map<Color, Developer2> developers = new LinkedHashMap<Color, Developer2>();
57 developers.put(Color.WHITE, new Developer2("Fred", "creator"));
58 developers.put(Color.RED, new SuperMan("Jason", "contributor", true));
59 developers.put(Color.BLACK, new Developer2("John", "committer"));
60 bean.setDevelopers(developers);
61 Yaml yaml = new Yaml();
62 String output = yaml.dumpAsMap(bean);
63
64 String etalon = Util.getLocalResource("examples/map-bean-13.yaml");
65 assertEquals(etalon, output);
66
67 Yaml beanLoader = new Yaml();
68 MapBean2 parsed = beanLoader.loadAs(etalon, MapBean2.class);
69 assertNotNull(parsed);
70 Map<Developer2, Color> parsedData = parsed.getData();
71 assertEquals(3, parsedData.size());
72 assertTrue(parsedData.containsKey(new SuperMan("Bill", "cleaner", false)));
73 assertEquals(Color.BLACK, parsedData.get(new SuperMan("Bill", "cleaner", false)));
74
75 Map<Color, Developer2> parsedDevelopers = parsed.getDevelopers();
76 assertEquals(3, parsedDevelopers.size());
77 assertEquals(new SuperMan("Jason", "contributor", true), parsedDevelopers.get(Color.RED));
78 }
79
80 public void testLoadMap() {
81 String output = Util.getLocalResource("examples/map-bean-12.yaml");
82
83 Yaml beanLoader = new Yaml();
84 MapBean2 parsed = beanLoader.loadAs(output, MapBean2.class);
85 assertNotNull(parsed);
86 Map<Developer2, Color> data = parsed.getData();
87 assertEquals(2, data.size());
88 Iterator<Developer2> iter = data.keySet().iterator();
89 Developer2 first = iter.next();
90 assertEquals("Andy", first.getName());
91 assertEquals("tester", first.getRole());
92 assertEquals(Color.BLACK, data.get(first));
93 Developer2 second = iter.next();
94 assertEquals("Lisa", second.getName());
95 assertEquals("owner", second.getRole());
96 assertEquals(Color.RED, data.get(second));
97
98 Map<Color, Developer2> developers = parsed.getDevelopers();
99 assertEquals(2, developers.size());
100 Iterator<Color> iter2 = developers.keySet().iterator();
101 Color firstColor = iter2.next();
102 assertEquals(Color.WHITE, firstColor);
103 Developer2 dev1 = developers.get(firstColor);
104 assertEquals("Fred", dev1.getName());
105 assertEquals("creator", dev1.getRole());
106 Color secondColor = iter2.next();
107 assertEquals(Color.BLACK, secondColor);
108 Developer2 dev2 = developers.get(secondColor);
109 assertEquals("John", dev2.getName());
110 assertEquals("committer", dev2.getRole());
111 }
112
113 public static enum Color {
114 WHITE, BLACK, RED;
115 }
116
117 public static class MapBean2 {
118 private Map<Developer2, Color> data;
119 private String name;
120 private Map<Color, Developer2> developers;
121
122 public MapBean2() {
123 name = "Bean123";
124 }
125
126 public String getName() {
127 return name;
128 }
129
130 public void setName(String name) {
131 this.name = name;
132 }
133
134 public Map<Color, Developer2> getDevelopers() {
135 return developers;
136 }
137
138 public void setDevelopers(Map<Color, Developer2> developers) {
139 this.developers = developers;
140 }
141
142 public Map<Developer2, Color> getData() {
143 return data;
144 }
145
146 public void setData(Map<Developer2, Color> data) {
147 this.data = data;
148 }
149
150 }
151
152 public static class Developer2 implements Comparable<Developer2> {
153 private String name;
154 private String role;
155
156 public Developer2() {
157 }
158
159 private Developer2(String name, String role) {
160 this.name = name;
161 this.role = role;
162 }
163
164 public String getName() {
165 return name;
166 }
167
168 public void setName(String name) {
169 this.name = name;
170 }
171
172 public String getRole() {
173 return role;
174 }
175
176 public void setRole(String role) {
177 this.role = role;
178 }
179
180 public int compareTo(Developer2 o) {
181 return name.compareTo(o.name);
182 }
183
184 @Override
185 public boolean equals(Object obj) {
186 if (obj instanceof Developer2) {
187 return toString().equals(obj.toString());
188 } else {
189 return false;
190 }
191 }
192
193 @Override
194 public int hashCode() {
195 return toString().hashCode();
196 }
197
198 @Override
199 public String toString() {
200 return "Developer " + name + " " + role;
201 }
202
203 }
204
205 public static class SuperMan extends Developer2 {
206 private boolean smart;
207
208 public SuperMan() {
209 super();
210 }
211
212 private SuperMan(String name, String role, boolean smart) {
213 super(name, role);
214 this.smart = smart;
215 }
216
217 public boolean isSmart() {
218 return smart;
219 }
220
221 public void setSmart(boolean smart) {
222 this.smart = smart;
223 }
224
225 @Override
226 public String toString() {
227 return "Super" + super.toString();
228 }
229 }
230 }