Home | History | Annotate | Download | only in issue61
      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 org.yaml.snakeyaml.issues.issue61;
     17 
     18 import java.util.ArrayList;
     19 import java.util.List;
     20 
     21 import junit.framework.TestCase;
     22 
     23 import org.yaml.snakeyaml.Util;
     24 import org.yaml.snakeyaml.Yaml;
     25 
     26 public class GenericListBeanTest extends TestCase {
     27     @SuppressWarnings("unchecked")
     28     public void testGenericList() {
     29         Yaml yaml = new Yaml();
     30         ListProvider<String> listProvider = new ListProvider<String>();
     31         listProvider.getList().add("foo");
     32         listProvider.getList().add("bar");
     33         String s = yaml.dumpAsMap(listProvider);
     34         // System.out.println(s);
     35         assertEquals("list:\n- foo\n- bar\n", s);
     36         // parse
     37         Yaml loader = new Yaml();
     38         ListProvider<String> listProvider2 = loader.loadAs(s, ListProvider.class);
     39         assertEquals("foo", listProvider2.getList().get(0));
     40         assertEquals("bar", listProvider2.getList().get(1));
     41         assertEquals(listProvider, listProvider2);
     42     }
     43 
     44     @SuppressWarnings("rawtypes")
     45     public void testGenericBean() {
     46         Yaml yaml = new Yaml();
     47         ListProvider<Bean> listProvider = new ListProvider<Bean>();
     48         Bean foo = new Bean();
     49         foo.setName("foo");
     50         listProvider.getList().add(foo);
     51         Bean bar = new Bean();
     52         bar.setName("bar");
     53         bar.setNumber(3);
     54         listProvider.getList().add(bar);
     55         String s = yaml.dumpAsMap(listProvider);
     56         // System.out.println(s);
     57         String etalon = Util.getLocalResource("issues/issue61-1.yaml");
     58         assertEquals(etalon, s);
     59         // parse
     60         Yaml loader = new Yaml();
     61         ListProvider listProvider2 = loader.loadAs(s, ListProvider.class);
     62         Bean foo2 = (Bean) listProvider2.getList().get(0);
     63         assertEquals("foo", foo2.getName());
     64         assertEquals(0, foo2.getNumber());
     65         Bean bar2 = (Bean) listProvider2.getList().get(1);
     66         assertEquals("bar", bar2.getName());
     67         assertEquals(3, bar2.getNumber());
     68     }
     69 
     70     public static class ListProvider<T> {
     71         private List<T> list = new ArrayList<T>();
     72 
     73         public List<T> getList() {
     74             return list;
     75         }
     76 
     77         public void setList(List<T> list) {
     78             this.list = list;
     79         }
     80 
     81         @SuppressWarnings("rawtypes")
     82         @Override
     83         public boolean equals(Object obj) {
     84             if (obj instanceof ListProvider) {
     85                 return list.equals(((ListProvider) obj).getList());
     86             } else {
     87                 return false;
     88             }
     89         }
     90 
     91         @Override
     92         public int hashCode() {
     93             return list.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 }
    118