/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.meta; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.File; import junit.framework.JUnit4TestAdapter; import org.beanfabrics.model.AbstractPM; import org.beanfabrics.model.IntegerPM; import org.beanfabrics.model.ListPM; import org.beanfabrics.model.MapPM; import org.beanfabrics.model.TextPM; import org.beanfabrics.support.Property; import org.junit.Before; import org.junit.Test; /** * @author Michael Karneim */ public class MetadataRegistryTest { public static junit.framework.Test suite() { return new JUnit4TestAdapter(MetadataRegistryTest.class); } private MetadataRegistry metadata; @Before public void createMetadata() { this.metadata = new MetadataRegistry(); } private static class ListOfFilePM extends ListPM<FilePM> { public ListOfFilePM() { super(); } } private static class FilePM extends AbstractPM { @Property TextPM path = new TextPM(); } private static class FlatFilePM extends FilePM { @Property IntegerPM size = new IntegerPM(); } private static class DirectoryPM extends FilePM { @Property DirectoryPM parent; @Property ListPM<FilePM> files = new ListPM<FilePM>(); } private static class AnotherDirectoryPM extends FilePM { @Property ListOfFilePM listOfFiles = new ListOfFilePM(); } private static class ThirdDirectoryPM extends FilePM { @Property DirectoryPM parent; @Property MapPM<File, FilePM> files = new MapPM<File, FilePM>(); } @Test public void describeTextPM() { Class cls = TextPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getProperties().size()", 0, info.getProperties().size()); assertEquals("info.getJavaType()", cls, info.getJavaType()); TypeInfo info2 = this.metadata.getTypeInfo(cls); assertEquals("info2", info, info2); } @Test public void describeListPM() { Class cls = ListPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getProperties().size()", 0, info.getProperties().size()); assertEquals("info.getJavaType()", cls, info.getJavaType()); } @Test public void describeListOfFilePM() { Class cls = ListOfFilePM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getProperties().size()", 0, info.getProperties().size()); assertEquals("info.getJavaType()", cls, info.getJavaType()); } @Test public void describeFilePM() { Class cls = FilePM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getJavaType()", cls, info.getJavaType()); assertEquals("info.getProperties().size()", 1, info.getProperties().size()); PropertyInfo pdesc = info.getProperties().iterator().next(); assertEquals("pdesc.getName()", "path", pdesc.getName()); TypeInfo typeInfo = pdesc.getTypeInfo(); assertEquals("textCellInfo", this.metadata.getTypeInfo(TextPM.class), typeInfo); } @Test public void describeDirectoryPM() { // this test shows how to find out the actual type argument of a property of type IListPM. Class cls = DirectoryPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getJavaType()", cls, info.getJavaType()); assertEquals("info.getProperties().size()", 3, info.getProperties().size()); PropertyInfo pInfo = info.getProperty("parent"); assertNotNull("pInfo", pInfo); // otherwise see test 'describeAnotherDirectoryCell' } @Test public void describeAnotherDirectoryPM() { // this test shows how to find out the actual type argument of a property of type IListPM. Class cls = AnotherDirectoryPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getJavaType()", cls, info.getJavaType()); assertEquals("info.getProperties().size()", 2, info.getProperties().size()); } @Test public void describeAnotherDirectoryPM2() { Class cls = AnotherDirectoryPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getJavaType()", cls, info.getJavaType()); PropertyInfo pInfo = info.getProperty("listOfFiles"); } @Test public void describeDirectoryPM2() { Class cls = DirectoryPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getJavaType()", cls, info.getJavaType()); PropertyInfo pInfo = info.getProperty("files"); } @Test public void describeThirdDirectoryPM() { Class cls = ThirdDirectoryPM.class; TypeInfo info = this.metadata.getTypeInfo(cls); assertEquals("info.getJavaType()", cls, info.getJavaType()); PropertyInfo pInfo = info.getProperty("files"); } }