/** * Copyright (c) 2008-2011, http://www.snakeyaml.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package examples.collections; import java.util.List; import junit.framework.TestCase; import org.yaml.snakeyaml.JavaBeanLoader; import org.yaml.snakeyaml.TypeDescription; import org.yaml.snakeyaml.Util; /** * Test ListBean->List<Human> developers <br/> * Human is an interface and the global tags are required */ public class TypeSafePriorityTest extends TestCase { /** * explicit TypeDescription is more important then runtime class (which may * be an interface) */ public void testLoadList2() { String output = Util.getLocalResource("examples/list-bean-3.yaml"); // System.out.println(output); TypeDescription descr = new TypeDescription(ListBean.class); descr.putListPropertyType("developers", Developer.class); JavaBeanLoader<ListBean> beanLoader = new JavaBeanLoader<ListBean>(descr); ListBean parsed = beanLoader.load(output); assertNotNull(parsed); List<Human> developers = parsed.getDevelopers(); assertEquals(2, developers.size()); assertEquals("Committer must be recognised.", Developer.class, developers.get(0).getClass()); Developer fred = (Developer) developers.get(0); assertEquals("Fred", fred.getName()); assertEquals("creator", fred.getRole()); Developer john = (Developer) developers.get(1); assertEquals("John", john.getName()); assertEquals("committer", john.getRole()); } public static class ListBean { private String name; private List<Human> developers; public ListBean() { name = "Bean123"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Human> getDevelopers() { return developers; } public void setDevelopers(List<Human> developers) { this.developers = developers; } } public static interface Human { public String getName(); public void setName(String name); } public static class Developer implements Human { private String name; private String role; public Developer() { } public Developer(String name, String role) { this.name = name; this.role = role; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } } }