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