Home | History | Annotate | Download | only in collections
      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.LinkedHashMap;
     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 /**
     27  * Test MapBean->Map<String, Developer> developers <br/>
     28  * Developer class must be properly recognised
     29  */
     30 public class TypeSafeMapTest extends TestCase {
     31     public void testDumpMap() {
     32         MapBean bean = new MapBean();
     33         Map<String, Integer> data = new LinkedHashMap<String, Integer>();
     34         data.put("aaa", 1);
     35         data.put("bbb", 2);
     36         data.put("zzz", 3);
     37         bean.setData(data);
     38         Map<String, Developer2> developers = new LinkedHashMap<String, Developer2>();
     39         developers.put("team1", new Developer2("Fred", "creator"));
     40         developers.put("team2", 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-10.yaml");
     46         assertEquals(etalon, output);
     47     }
     48 
     49     public void testDumpMap2() {
     50         MapBean bean = new MapBean();
     51         Map<String, Integer> data = new LinkedHashMap<String, Integer>();
     52         data.put("aaa", 1);
     53         data.put("bbb", 2);
     54         bean.setData(data);
     55         Map<String, Developer2> developers = new LinkedHashMap<String, Developer2>();
     56         developers.put("team1", new Developer2("Fred", "creator"));
     57         developers.put("team2", new Developer2("John", "committer"));
     58         developers.put("team3", new Developer222("Bill", "head"));
     59         bean.setDevelopers(developers);
     60         Yaml yaml = new Yaml();
     61         String output = yaml.dumpAsMap(bean);
     62         // System.out.println(output);
     63         String etalon = Util.getLocalResource("examples/map-bean-11.yaml");
     64         assertEquals(etalon, output);
     65     }
     66 
     67     public void testLoadMap() {
     68         String output = Util.getLocalResource("examples/map-bean-10.yaml");
     69         // System.out.println(output);
     70         Yaml beanLoader = new Yaml();
     71         MapBean parsed = beanLoader.loadAs(output, MapBean.class);
     72         assertNotNull(parsed);
     73         Map<String, Integer> data = parsed.getData();
     74         assertEquals(3, data.size());
     75         assertEquals(new Integer(1), data.get("aaa"));
     76         assertEquals(new Integer(2), data.get("bbb"));
     77         assertEquals(new Integer(3), data.get("zzz"));
     78         Map<String, Developer2> developers = parsed.getDevelopers();
     79         assertEquals(2, developers.size());
     80         assertEquals("Developer must be recognised.", Developer2.class, developers.get("team1")
     81                 .getClass());
     82         Developer2 fred = developers.get("team1");
     83         assertEquals("Fred", fred.getName());
     84         assertEquals("creator", fred.getRole());
     85     }
     86 
     87     public static class MapBean {
     88         private Map<String, Integer> data;
     89         private String name;
     90         private Map<String, Developer2> developers;
     91 
     92         public MapBean() {
     93             name = "Bean123";
     94         }
     95 
     96         public Map<String, Integer> getData() {
     97             return data;
     98         }
     99 
    100         public void setData(Map<String, Integer> data) {
    101             this.data = data;
    102         }
    103 
    104         public String getName() {
    105             return name;
    106         }
    107 
    108         public void setName(String name) {
    109             this.name = name;
    110         }
    111 
    112         public Map<String, Developer2> getDevelopers() {
    113             return developers;
    114         }
    115 
    116         public void setDevelopers(Map<String, Developer2> developers) {
    117             this.developers = developers;
    118         }
    119     }
    120 
    121     public static class Developer2 {
    122         private String name;
    123         private String role;
    124 
    125         public Developer2() {
    126         }
    127 
    128         public Developer2(String name, String role) {
    129             this.name = name;
    130             this.role = role;
    131         }
    132 
    133         public String getName() {
    134             return name;
    135         }
    136 
    137         public void setName(String name) {
    138             this.name = name;
    139         }
    140 
    141         public String getRole() {
    142             return role;
    143         }
    144 
    145         public void setRole(String role) {
    146             this.role = role;
    147         }
    148     }
    149 
    150     public static class Developer222 extends Developer2 {
    151         public Developer222() {
    152             super();
    153         }
    154 
    155         public Developer222(String name, String role) {
    156             super(name, role);
    157         }
    158     }
    159 
    160     /*
    161      * No generic collection
    162      */
    163     @SuppressWarnings({ "unchecked", "rawtypes" })
    164     public void testLoadMapWithObject() {
    165         String output = Util.getLocalResource("examples/map-bean-10.yaml");
    166         // System.out.println(output);
    167         Yaml beanLoader = new Yaml();
    168         MapBeanNoGenerics parsed = beanLoader.loadAs(output, MapBeanNoGenerics.class);
    169         assertNotNull(parsed);
    170         Map<String, Integer> data = parsed.getData();
    171         assertEquals(3, data.size());
    172         assertEquals(new Integer(1), data.get("aaa"));
    173         assertEquals(new Integer(2), data.get("bbb"));
    174         assertEquals(new Integer(3), data.get("zzz"));
    175         Map developers = parsed.getDevelopers();
    176         assertNotNull(developers);
    177         assertEquals(2, developers.size());
    178         Object o1 = developers.get("team1");
    179         // because of erasure we get simply Map
    180         Map<String, String> developer = (Map<String, String>) o1;
    181         assertEquals("Fred", developer.get("name"));
    182         assertEquals("creator", developer.get("role"));
    183     }
    184 
    185     @SuppressWarnings("rawtypes")
    186     public static class MapBeanNoGenerics {
    187         private Map data;
    188         private String name;
    189         private Map developers;
    190 
    191         public MapBeanNoGenerics() {
    192             name = "Bean123";
    193         }
    194 
    195         public Map getData() {
    196             return data;
    197         }
    198 
    199         public void setData(Map data) {
    200             this.data = data;
    201         }
    202 
    203         public String getName() {
    204             return name;
    205         }
    206 
    207         public void setName(String name) {
    208             this.name = name;
    209         }
    210 
    211         public Map getDevelopers() {
    212             return developers;
    213         }
    214 
    215         public void setDevelopers(Map developers) {
    216             this.developers = developers;
    217         }
    218     }
    219 }
    220