package org.tldgen.factory;
import com.sun.tools.javadoc.Main;
import org.junit.Before;
import org.junit.Test;
import org.tldgen.TldDoclet;
import org.tldgen.annotations.BodyContent;
import org.tldgen.model.Attribute;
import org.tldgen.model.Function;
import org.tldgen.model.FunctionParameter;
import org.tldgen.model.Library;
import org.tldgen.model.Listener;
import org.tldgen.model.Tag;
import org.tldgen.tags.DummyTei;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
* Test the Parser class by launching javadoc and retrieving the parse results
* @author icoloma
*
*/
public class LibraryFactoryTest {
public static String OUTPUT_FOLDER = "build/test/";
private Library library;
@Before
public void setup() {
int result = Main.execute(new String[] {
"-private", "-doclet", TldDoclet.class.getName(), "-sourcepath", "src/test/java", "org.tldgen.tags", "-tldFolder", OUTPUT_FOLDER + "LibraryFactoryTest-output",
"-displayName", "Loom Core Tag Library", "-name", "loom", "-uri", "http://loom.extrema-sistemas.org/loom-core.tld", "-htmlFolder", OUTPUT_FOLDER + "LibraryFactoryTest-output",
"-indentSpaces", "4", "-license", "APACHE", "-version", "2.1"
});
assertEquals("The javadoc command did not exit successfully. Check the system log for details", 0, result);
library = TldDoclet.library;
assertNotNull(library);
}
@Test
public void testTagAttributes() throws Exception {
Tag tag = library.getTag("dummy");
assertNotNull(tag);
// check tag annotation
assertEquals(BodyContent.SCRIPTLESS, tag.getBodyContent());
assertEquals("foo", tag.getIcon());
assertTrue(tag.isDynamicAttributes());
assertEquals("Tag example", tag.getExample());
assertEquals("Dummy display name", tag.getDisplayName());
assertEquals(DummyTei.class.getName(), tag.getTeiClass());
// check tag attributes
Attribute foo = getAttribute(tag, "foo");
assertNotNull(foo);
assertTrue(foo.isDeprecated());
assertFalse(foo.isRtexprvalue());
assertTrue(foo.isRequired());
// method attributes
assertNotNull(getAttribute(tag, "property"));
assertNotNull(getAttribute(tag, "overwritten"));
}
@Test
public void testParentTag() throws Exception {
// check that abstract classes are ignored
assertNull(library.getTag("parent"));
// check inheritance
Tag tag = library.getTag("overriden-tag");
// check empty tag annotation
assertEquals(BodyContent.SCRIPTLESS, tag.getBodyContent());
assertNull(tag.getIcon());
assertFalse(tag.isDynamicAttributes());
assertNull(tag.getExample());
assertNull(tag.getDisplayName());
assertNull(getAttribute(tag, "parent1"));
assertNull(getAttribute(tag, "parent2"));
assertNotNull(getAttribute(tag, "overriden1"));
assertNotNull(getAttribute(tag, "overriden2"));
assertNotNull(getAttribute(tag, "child1"));
assertNotNull(getAttribute(tag, "child2"));
// "required" attributes go before the rest
assertEquals("child2", tag.getAttributes().iterator().next().getName());
}
@Test
public void testFunctions() throws Exception {
// check functions
Function bar = library.getFunction("bar");
assertNotNull(bar);
assertEquals("foo", bar.getIcon());
assertEquals("Function example", bar.getExample());
assertEquals("bar display name", bar.getDisplayName());
// check function with parameters
Function baz = library.getFunction("baz");
assertNotNull(baz);
assertEquals("Dubbity doo", baz.getReturnDescription());
FunctionParameter[] parameters = baz.getParameters();
assertEquals(3, parameters.length);
assertEquals("int", parameters[0].getType());
assertEquals("primitive", parameters[0].getName());
assertEquals(0, parameters[0].getDescription().length());
assertEquals("java.lang.String", parameters[1].getType());
assertEquals("Argument description", parameters[1].getDescription());
assertEquals("java.lang.Integer baz(int, java.lang.String, org.tldgen.tags.DummyFunction)", baz.getSignature());
// check empty function
Function baz2 = library.getFunction("baz2");
assertNull(baz2.getReturnDescription());
assertNotNull(baz2);
assertNull(baz2.getIcon());
assertNull(baz2.getExample());
assertNull(baz2.getDisplayName());
assertEquals("java.lang.Integer baz2(int, java.lang.String, org.tldgen.tags.DummyFunction)", baz2.getSignature());
// check annotated private function
assertNull(library.getFunction("hidden"));
}
@Test
public void testListeners() {
Listener dummy = library.getListener("org.tldgen.tags.DummyListener");
assertNotNull(dummy);
assertNotNull(dummy.getListenerClass());
assertEquals("org.tldgen.tags.DummyListener", dummy.getListenerClass());
assertEquals(1, library.getListeners().size());
}
private Attribute getAttribute(Tag tag, String name) {
for (Attribute attribute : tag.getAttributes()) {
if (attribute.getName().equals(name)) {
return attribute;
}
}
return null;
}
}