• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2008, http://www.snakeyaml.org
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
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  * Test MapBean->Map<Enum, Developer> developers <br/>
29  * Developer class must be properly recognised
30  */
31 public class TypeSafeMap2Test extends TestCase {
testDumpMap()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         // System.out.println(output);
45         String etalon = Util.getLocalResource("examples/map-bean-12.yaml");
46         assertEquals(etalon, output);
47     }
48 
testMap2()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         // System.out.println(output);
64         String etalon = Util.getLocalResource("examples/map-bean-13.yaml");
65         assertEquals(etalon, output);
66         // load
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 
testLoadMap()80     public void testLoadMap() {
81         String output = Util.getLocalResource("examples/map-bean-12.yaml");
82         // System.out.println(output);
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 
MapBean2()122         public MapBean2() {
123             name = "Bean123";
124         }
125 
getName()126         public String getName() {
127             return name;
128         }
129 
setName(String name)130         public void setName(String name) {
131             this.name = name;
132         }
133 
getDevelopers()134         public Map<Color, Developer2> getDevelopers() {
135             return developers;
136         }
137 
setDevelopers(Map<Color, Developer2> developers)138         public void setDevelopers(Map<Color, Developer2> developers) {
139             this.developers = developers;
140         }
141 
getData()142         public Map<Developer2, Color> getData() {
143             return data;
144         }
145 
setData(Map<Developer2, Color> data)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 
Developer2()156         public Developer2() {
157         }
158 
Developer2(String name, String role)159         private Developer2(String name, String role) {
160             this.name = name;
161             this.role = role;
162         }
163 
getName()164         public String getName() {
165             return name;
166         }
167 
setName(String name)168         public void setName(String name) {
169             this.name = name;
170         }
171 
getRole()172         public String getRole() {
173             return role;
174         }
175 
setRole(String role)176         public void setRole(String role) {
177             this.role = role;
178         }
179 
compareTo(Developer2 o)180         public int compareTo(Developer2 o) {
181             return name.compareTo(o.name);
182         }
183 
184         @Override
equals(Object obj)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
hashCode()194         public int hashCode() {
195             return toString().hashCode();
196         }
197 
198         @Override
toString()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 
SuperMan()208         public SuperMan() {
209             super();
210         }
211 
SuperMan(String name, String role, boolean smart)212         private SuperMan(String name, String role, boolean smart) {
213             super(name, role);
214             this.smart = smart;
215         }
216 
isSmart()217         public boolean isSmart() {
218             return smart;
219         }
220 
setSmart(boolean smart)221         public void setSmart(boolean smart) {
222             this.smart = smart;
223         }
224 
225         @Override
toString()226         public String toString() {
227             return "Super" + super.toString();
228         }
229     }
230 }
231