1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.yaml.snakeyaml.issues.issue61;
18
19 import java.util.HashMap;
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 public class GenericMapBeanTest extends TestCase {
28 @SuppressWarnings("unchecked")
29 public void testGenericMap() throws Exception {
30 Yaml yaml = new Yaml();
31 MapProvider<String, Integer> listProvider = new MapProvider<String, Integer>();
32 listProvider.getMap().put("foo", 17);
33 listProvider.getMap().put("bar", 19);
34 String s = yaml.dumpAsMap(listProvider);
35
36 assertEquals("map:\n foo: 17\n bar: 19\n", s);
37
38 Yaml loader = new Yaml();
39 MapProvider<String, Integer> listProvider2 = loader.loadAs(s, MapProvider.class);
40 assertEquals(new Integer(17), listProvider2.getMap().get("foo"));
41 assertEquals(new Integer(19), listProvider2.getMap().get("bar"));
42 assertEquals(listProvider, listProvider2);
43 }
44
45 @SuppressWarnings("rawtypes")
46 public void testGenericBean() throws Exception {
47 Yaml yaml = new Yaml();
48 MapProvider<String, Bean> listProvider = new MapProvider<String, Bean>();
49 Bean foo = new Bean();
50 foo.setName("foo");
51 listProvider.getMap().put("foo", foo);
52 Bean bar = new Bean();
53 bar.setName("bar");
54 bar.setNumber(3);
55 listProvider.getMap().put("bar", bar);
56 String s = yaml.dumpAsMap(listProvider);
57
58 String etalon = Util.getLocalResource("issues/issue61-2.yaml");
59 assertEquals(etalon, s);
60
61 Yaml loader = new Yaml();
62 MapProvider listProvider2 = loader.loadAs(s, MapProvider.class);
63 Bean foo2 = (Bean) listProvider2.getMap().get("foo");
64 assertEquals("foo", foo2.getName());
65 assertEquals(0, foo2.getNumber());
66 Bean bar2 = (Bean) listProvider2.getMap().get("bar");
67 assertEquals("bar", bar2.getName());
68 assertEquals(3, bar2.getNumber());
69 }
70
71 public static class MapProvider<K, V> {
72 private Map<K, V> map = new HashMap<K, V>();
73
74 public Map<K, V> getMap() {
75 return map;
76 }
77
78 public void setMap(Map<K, V> map) {
79 this.map = map;
80 }
81
82 @SuppressWarnings("rawtypes")
83 @Override
84 public boolean equals(Object obj) {
85 if (obj instanceof MapProvider) {
86 return map.equals(((MapProvider) obj).getMap());
87 } else {
88 return false;
89 }
90 }
91
92 @Override
93 public int hashCode() {
94 return map.hashCode();
95 }
96 }
97
98 public static class Bean {
99 private String name;
100 private int number;
101
102 public String getName() {
103 return name;
104 }
105
106 public void setName(String name) {
107 this.name = name;
108 }
109
110 public int getNumber() {
111 return number;
112 }
113
114 public void setNumber(int number) {
115 this.number = number;
116 }
117 }
118 }