package org.jsondoc.core.doc; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.jsondoc.core.annotation.ApiObject; import org.jsondoc.core.annotation.ApiObjectField; import org.jsondoc.core.annotation.ApiVersion; import org.jsondoc.core.pojo.ApiObjectDoc; import org.jsondoc.core.pojo.ApiObjectFieldDoc; import org.jsondoc.core.pojo.ApiStage; import org.jsondoc.core.pojo.ApiVisibility; import org.jsondoc.core.scanner.DefaultJSONDocScanner; import org.jsondoc.core.scanner.JSONDocScanner; import org.junit.Assert; import org.junit.Test; public class ApiObjectDocTest { private JSONDocScanner jsondocScanner = new DefaultJSONDocScanner(); @ApiObject(name="test-object", visibility = ApiVisibility.PUBLIC, stage = ApiStage.PRE_ALPHA) @ApiVersion(since = "1.0", until = "2.12") private class TestObject { @ApiObjectField(description="the test name", required = true) private String name; @ApiObjectField(description="the test age", required = false) private Integer age; @ApiObjectField(description="the test avg") private Long avg; @ApiObjectField(description="the test map") private Map<String, Integer> map; @SuppressWarnings("rawtypes") @ApiObjectField(description="an unparametrized list to test https://github.com/fabiomaffioletti/jsondoc/issues/5") private List unparametrizedList; @ApiObjectField(description="a parametrized list") private List<String> parametrizedList; @ApiObjectField(description="a wildcard parametrized list to test https://github.com/fabiomaffioletti/jsondoc/issues/5") private List<?> wildcardParametrized; @ApiObjectField(description="a Long array to test https://github.com/fabiomaffioletti/jsondoc/issues/27") private Long[] LongArray; @ApiObjectField(description="a long array to test https://github.com/fabiomaffioletti/jsondoc/issues/27") private long[] longArray; @ApiObjectField(name = "foo_bar", description="a property to test https://github.com/fabiomaffioletti/jsondoc/pull/31", required = true) private String fooBar; @ApiObjectField(name = "version", description="a property to test version since and until", required = true) @ApiVersion(since = "1.0", until = "2.12") private String version; @ApiObjectField(name = "test-enum", description = "a test enum") private TestEnum testEnum; @ApiObjectField(name = "test-enum-with-allowed-values", description = "a test enum with allowed values", allowedvalues = { "A", "B", "C" }) private TestEnum testEnumWithAllowedValues; @ApiObjectField(name = "orderedProperty", order = 1) private String orderedProperty; } @ApiObject(name = "test-enum") private enum TestEnum { TESTENUM1, TESTENUM2, TESTENUM3; } @ApiObject private class NoNameApiObject { @ApiObjectField private Long id; } @ApiObject private class TemplateApiObject { @ApiObjectField private Long id; @ApiObjectField private String name; } @ApiObject private class UndefinedVisibilityAndStage { } @Test public void testUndefinedVisibilityAndStageDoc() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(UndefinedVisibilityAndStage.class); ApiObjectDoc apiObjectDoc = jsondocScanner.getApiObjectDocs(classes).iterator().next(); Assert.assertEquals("undefinedvisibilityandstage", apiObjectDoc.getName()); Assert.assertEquals(ApiVisibility.UNDEFINED, apiObjectDoc.getVisibility()); Assert.assertEquals(ApiStage.UNDEFINED, apiObjectDoc.getStage()); } @Test public void testTemplateApiObjectDoc() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(TemplateApiObject.class); ApiObjectDoc apiObjectDoc = jsondocScanner.getApiObjectDocs(classes).iterator().next(); Assert.assertEquals("templateapiobject", apiObjectDoc.getName()); Iterator<ApiObjectFieldDoc> iterator = apiObjectDoc.getFields().iterator(); Assert.assertEquals("id", iterator.next().getName()); Assert.assertEquals("name", iterator.next().getName()); } @Test public void testNoNameApiObjectDoc() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(NoNameApiObject.class); ApiObjectDoc apiObjectDoc = jsondocScanner.getApiObjectDocs(classes).iterator().next(); Assert.assertEquals("nonameapiobject", apiObjectDoc.getName()); Assert.assertEquals("id", apiObjectDoc.getFields().iterator().next().getName()); Assert.assertEquals(1, apiObjectDoc.getJsondochints().size()); } @Test public void testEnumObjectDoc() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(TestEnum.class); ApiObjectDoc childDoc = jsondocScanner.getApiObjectDocs(classes).iterator().next(); Assert.assertEquals("test-enum", childDoc.getName()); Assert.assertEquals(0, childDoc.getFields().size()); Assert.assertEquals(TestEnum.TESTENUM1.name(), childDoc.getAllowedvalues()[0]); Assert.assertEquals(TestEnum.TESTENUM2.name(), childDoc.getAllowedvalues()[1]); Assert.assertEquals(TestEnum.TESTENUM3.name(), childDoc.getAllowedvalues()[2]); } @Test public void testApiObjectDoc() { Set<Class<?>> classes = new HashSet<Class<?>>(); classes.add(TestObject.class); ApiObjectDoc childDoc = jsondocScanner.getApiObjectDocs(classes).iterator().next(); Assert.assertEquals("test-object", childDoc.getName()); Assert.assertEquals(14, childDoc.getFields().size()); Assert.assertEquals("1.0", childDoc.getSupportedversions().getSince()); Assert.assertEquals("2.12", childDoc.getSupportedversions().getUntil()); Assert.assertEquals(ApiVisibility.PUBLIC, childDoc.getVisibility()); Assert.assertEquals(ApiStage.PRE_ALPHA, childDoc.getStage()); for (ApiObjectFieldDoc fieldDoc : childDoc.getFields()) { if(fieldDoc.getName().equals("wildcardParametrized")) { Assert.assertEquals("list", fieldDoc.getJsondocType().getType().get(0)); } if(fieldDoc.getName().equals("unparametrizedList")) { Assert.assertEquals("list", fieldDoc.getJsondocType().getType().get(0)); } if(fieldDoc.getName().equals("parametrizedList")) { Assert.assertEquals("list of string", fieldDoc.getJsondocType().getOneLineText()); } if(fieldDoc.getName().equals("name")) { Assert.assertEquals("string", fieldDoc.getJsondocType().getType().get(0)); Assert.assertEquals("name", fieldDoc.getName()); Assert.assertEquals("true", fieldDoc.getRequired()); } if(fieldDoc.getName().equals("age")) { Assert.assertEquals("integer", fieldDoc.getJsondocType().getType().get(0)); Assert.assertEquals("age", fieldDoc.getName()); Assert.assertEquals("false", fieldDoc.getRequired()); } if(fieldDoc.getName().equals("avg")) { Assert.assertEquals("long", fieldDoc.getJsondocType().getType().get(0)); Assert.assertEquals("avg", fieldDoc.getName()); Assert.assertEquals("false", fieldDoc.getRequired()); } if(fieldDoc.getName().equals("map")) { Assert.assertEquals("map", fieldDoc.getJsondocType().getType().get(0)); Assert.assertEquals("string", fieldDoc.getJsondocType().getMapKey().getType().get(0)); Assert.assertEquals("integer", fieldDoc.getJsondocType().getMapValue().getType().get(0)); } if(fieldDoc.getName().equals("LongArray")) { Assert.assertEquals("array of long", fieldDoc.getJsondocType().getOneLineText()); Assert.assertEquals("LongArray", fieldDoc.getName()); Assert.assertEquals("false", fieldDoc.getRequired()); } if(fieldDoc.getName().equals("longArray")) { Assert.assertEquals("array of long", fieldDoc.getJsondocType().getOneLineText()); Assert.assertEquals("longArray", fieldDoc.getName()); Assert.assertEquals("false", fieldDoc.getRequired()); } if(fieldDoc.getName().equals("fooBar")) { Assert.assertEquals("string", fieldDoc.getJsondocType().getOneLineText()); Assert.assertEquals("foo_bar", fieldDoc.getName()); Assert.assertEquals("false", fieldDoc.getRequired()); } if(fieldDoc.getName().equals("version")) { Assert.assertEquals("string", fieldDoc.getJsondocType().getOneLineText()); Assert.assertEquals("1.0", fieldDoc.getSupportedversions().getSince()); Assert.assertEquals("2.12", fieldDoc.getSupportedversions().getUntil()); } if(fieldDoc.getName().equals("test-enum")) { Assert.assertEquals("test-enum", fieldDoc.getName()); Assert.assertEquals(TestEnum.TESTENUM1.name(), fieldDoc.getAllowedvalues()[0]); Assert.assertEquals(TestEnum.TESTENUM2.name(), fieldDoc.getAllowedvalues()[1]); Assert.assertEquals(TestEnum.TESTENUM3.name(), fieldDoc.getAllowedvalues()[2]); } if(fieldDoc.getName().equals("test-enum-with-allowed-values")) { Assert.assertEquals("A", fieldDoc.getAllowedvalues()[0]); Assert.assertEquals("B", fieldDoc.getAllowedvalues()[1]); Assert.assertEquals("C", fieldDoc.getAllowedvalues()[2]); } if(fieldDoc.getName().equals("orderedProperty")) { Assert.assertEquals("orderedProperty", fieldDoc.getName()); Assert.assertEquals(1, fieldDoc.getOrder().intValue()); } else { Assert.assertEquals(Integer.MAX_VALUE, fieldDoc.getOrder().intValue()); } } } }