package cz.habarta.typescript.generator; import com.fasterxml.jackson.core.type.TypeReference; import cz.habarta.typescript.generator.parser.*; import java.lang.reflect.Type; import java.util.*; import org.junit.*; public class ModelParserTest { @Test public void testClassDiscovery1() { final Model model = parseModel(RootClass1.class); Assert.assertEquals(2, model.getBeans().size()); } @Test public void testClassDiscovery2() { final Model model = parseModel(RootClass2.class); Assert.assertEquals(2, model.getBeans().size()); } @Test public void testClassDiscovery3() { final Model model = parseModel(RootClass3.class); Assert.assertEquals(3, model.getBeans().size()); } @Test public void testClassDiscoveryExcludeNodeClassA() { final Model model = parseModel(RootClass1.class, NodeClassA.class.getName()); Assert.assertEquals(1, model.getBeans().size()); } @Test public void testClassDiscoveryExcludeTag() { final Model model = parseModel(RootClass3.class, Tag.class.getName()); Assert.assertEquals(2, model.getBeans().size()); } @Test public void testClassDiscoveryExcludeNodeClassB() { final Model model = parseModel(RootClass3.class, NodeClassB.class.getName()); Assert.assertEquals(1, model.getBeans().size()); } @Test public void testExcludedInputDirectly() { final Model model = parseModel(RootClass3.class, RootClass3.class.getName()); Assert.assertEquals(0, model.getBeans().size()); } @Test public void testExcludedInputInList() { final Model model = parseModel(new TypeReference<List<RootClass3>>() {}.getType(), RootClass3.class.getName()); Assert.assertEquals(0, model.getBeans().size()); } private Model parseModel(Type type, String... excludedClassNames) { final Settings settings = new Settings(); settings.setExcludeFilter(Arrays.asList(excludedClassNames), null); final ModelParser parser = new Jackson2Parser(settings, new TypeProcessor.Chain( new ExcludingTypeProcessor(settings.getExcludeFilter()), new DefaultTypeProcessor() )); final Model model = parser.parseModel(type); return model; } } class RootClass1 { public NodeClassA node; } class RootClass2 { public List<NodeClassA> nodes; } class NodeClassA { public String name; } class RootClass3 { public Map<String, NodeClassB> nodes; } class NodeClassB { public String name; public NodeClassB leftNode; public NodeClassB rightNode; public Tag[] tags; } class Tag { }