/*
* Copyright (C) 2003-2011 eXo Platform SAS.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.wikbook.template.test.freemarker;
import freemarker.template.TemplateModelException;
import org.wikbook.template.freemarker.FreemarkerDataFactory;
import org.wikbook.template.freemarker.caller.AnnotationCallerMethod;
import org.wikbook.template.freemarker.caller.AttributeCallerMethod;
import org.wikbook.template.freemarker.caller.ChildrenCallerMethod;
import org.wikbook.template.freemarker.caller.JavadocCallerMethod;
import org.wikbook.template.freemarker.caller.SiblingCallerMethod;
import org.wikbook.template.test.AbstractFreemarkerTestCase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a>
* @version $Revision$
*/
public class FreemarkerChildrenTestCase extends AbstractFreemarkerTestCase {
private ChildrenCallerMethod childrenCaller;
private AttributeCallerMethod attributeCaller;
private List<Map<String, Object>> data1;
private List<Map<String, Object>> data2;
private JavadocCallerMethod docCaller1;
private JavadocCallerMethod docCaller2;
private SiblingCallerMethod siblingCaller1;
private SiblingCallerMethod siblingCaller2;
private Map<String, Object> siblingData1;
private Map<String, Object> siblingData2;
private Map<String, Object> d;
private Map<String, Object> f;
private Map<String, Object> g;
public FreemarkerChildrenTestCase() throws IOException, ClassNotFoundException, TemplateModelException {
d = buildModel("D", "src");
f = buildModel("F", "src");
g = buildModel("G", "src");
childrenCaller = (ChildrenCallerMethod) ((Map<String, Object>) d.get("@AnnotationA")).get(FreemarkerDataFactory.CHILDREN);
attributeCaller = (AttributeCallerMethod) ((Map<String, Object>) d.get("@AnnotationA")).get(FreemarkerDataFactory.ATTRIBUTE);
data1 = (List<Map<String, Object>>) childrenCaller.exec(Arrays.asList("@AnnotationC"));
data2 = (List<Map<String, Object>>) childrenCaller.exec(Arrays.asList("@AnnotationA"));
docCaller1 = (JavadocCallerMethod) data1.get(0).get(FreemarkerDataFactory.JAVADOC);
docCaller2 = (JavadocCallerMethod) data2.get(0).get(FreemarkerDataFactory.JAVADOC);
siblingCaller1 = (SiblingCallerMethod) data1.get(0).get(FreemarkerDataFactory.SIBLING);
siblingCaller2 = (SiblingCallerMethod) data2.get(0).get(FreemarkerDataFactory.SIBLING);
siblingData2 = (Map<String, Object>) siblingCaller1.exec(Arrays.asList("@AnnotationA"));
siblingData1 = (Map<String, Object>) siblingCaller1.exec(Arrays.asList("@AnnotationC"));
}
public void testExists() throws Exception {
assertNotNull(childrenCaller.exec(Arrays.asList("@AnnotationC")));
assertNotNull(childrenCaller.exec(Arrays.asList("@AnnotationA")));
}
public void testElementName() throws Exception {
assertEquals("m", data1.get(0).get(FreemarkerDataFactory.ELEMENT_NAME));
assertEquals("m", data2.get(0).get(FreemarkerDataFactory.ELEMENT_NAME));
}
public void testAnnotationName() throws Exception {
assertEquals("AnnotationC", data1.get(0).get(FreemarkerDataFactory.NAME));
assertEquals("AnnotationA", data2.get(0).get(FreemarkerDataFactory.NAME));
}
public void testTypeName() throws Exception {
ChildrenCallerMethod dChildrenCaller = (ChildrenCallerMethod) ((Map<String, Object>) f.get("@AnnotationA")).get(FreemarkerDataFactory.CHILDREN);
List<Map<String, Object>> dGets = (List<Map<String, Object>>) dChildrenCaller.exec(Arrays.asList("@AnnotationD"));
List<Map<String, Object>> dPaths = (List<Map<String, Object>>) dChildrenCaller.exec(Arrays.asList("@AnnotationA"));
assertEquals("String", ((Map<String, Object>) dGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("String", ((Map<String, Object>) dPaths.get(1).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("java.lang.String", ((Map<String, Object>) dGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("java.lang.String", ((Map<String, Object>) dPaths.get(1).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("false", ((Map<String, Object>) dGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals("false", ((Map<String, Object>) dPaths.get(1).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
ChildrenCallerMethod gChildrenCaller = (ChildrenCallerMethod) ((Map<String, Object>) g.get("@AnnotationA")).get(FreemarkerDataFactory.CHILDREN);
List<Map<String, Object>> gGets = (List<Map<String, Object>>) gChildrenCaller.exec(Arrays.asList("@AnnotationC"));
List<Map<String, Object>> gPaths = (List<Map<String, Object>>) gChildrenCaller.exec(Arrays.asList("@AnnotationA"));
assertEquals("String", ((Map<String, Object>) gGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("String", ((Map<String, Object>) gPaths.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("java.lang.String", ((Map<String, Object>) gGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("java.lang.String", ((Map<String, Object>) gPaths.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("true", ((Map<String, Object>) gGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals("true", ((Map<String, Object>) gPaths.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals(0, ((List) ((Map<String, Object>) gGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.PARAMETER)).size());
assertEquals(0, ((List) ((Map<String, Object>) gPaths.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.PARAMETER)).size());
assertEquals(1, ((List) ((Map<String, Object>) gGets.get(1).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.PARAMETER)).size());
assertEquals(1, ((List) ((Map<String, Object>) gPaths.get(1).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.PARAMETER)).size());
assertEquals(2, ((List) ((Map<String, Object>) gGets.get(2).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.PARAMETER)).size());
assertEquals(2, ((List) ((Map<String, Object>) gPaths.get(2).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.PARAMETER)).size());
AnnotationCallerMethod annotationCallerMethod = (AnnotationCallerMethod) ((Map<String, Object>) gPaths.get(3).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.ANNOTATION);
AttributeCallerMethod attributeCallerMethod = (AttributeCallerMethod) ((Map<String, Object>) annotationCallerMethod.exec(Arrays.asList("@AnnotationA"))).get("attribute");
assertEquals("Existing", ((Map<String, Object>) gGets.get(3).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("org.wikbook.template.existing.Existing", ((Map<String, Object>) gGets.get(3).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("foo", attributeCallerMethod.exec(Arrays.asList("value")).toString());
}
public void testTypeNotIsArray() throws Exception {
ChildrenCallerMethod fChildrenCaller = (ChildrenCallerMethod) ((Map<String, Object>) f.get("@AnnotationA")).get(FreemarkerDataFactory.CHILDREN);
List<Map<String, Object>> fGets = (List<Map<String, Object>>) fChildrenCaller.exec(Arrays.asList("@AnnotationD"));
List<Map<String, Object>> fPaths = (List<Map<String, Object>>) fChildrenCaller.exec(Arrays.asList("@AnnotationA"));
assertEquals("false", ((Map<String, Object>) fGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals("false", ((Map<String, Object>) fPaths.get(1).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
}
public void testTypeIsArray() throws Exception {
ChildrenCallerMethod gChildrenCaller = (ChildrenCallerMethod) ((Map<String, Object>) g.get("@AnnotationA")).get(FreemarkerDataFactory.CHILDREN);
List<Map<String, Object>> gGets = (List<Map<String, Object>>) gChildrenCaller.exec(Arrays.asList("@AnnotationC"));
List<Map<String, Object>> gPaths = (List<Map<String, Object>>) gChildrenCaller.exec(Arrays.asList("@AnnotationA"));
assertEquals("true", ((Map<String, Object>) gGets.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals("true", ((Map<String, Object>) gPaths.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
}
public void testTypeVoidName() throws Exception {
assertEquals("", ((Map<String, Object>) data1.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("", ((Map<String, Object>) data2.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals("", ((Map<String, Object>) data1.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("", ((Map<String, Object>) data2.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals("false", ((Map<String, Object>) data1.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals("false", ((Map<String, Object>) data2.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
}
public void testJavadocGeneralComment() throws Exception {
assertEquals("General comment.", docCaller1.exec(new ArrayList()).toString());
assertEquals("General comment.", docCaller2.exec(new ArrayList()).toString());
}
public void testJavadocSingleValue() throws Exception {
assertEquals("[1.0]", docCaller1.exec(Arrays.asList("since")).toString());
assertEquals("[1.0]", docCaller2.exec(Arrays.asList("since")).toString());
}
public void testJavadocMultipleValue() throws Exception {
assertEquals("[foo, bar]", docCaller1.exec(Arrays.asList("author")).toString());
assertEquals("[foo, bar]", docCaller2.exec(Arrays.asList("author")).toString());
}
public void testJavadocNoValue() throws Exception {
assertEquals("[deprecated]", docCaller1.exec(Arrays.asList("deprecated")).toString());
assertEquals("[deprecated]", docCaller2.exec(Arrays.asList("deprecated")).toString());
}
public void testJavadocDoesntExist() throws Exception {
assertEquals("", docCaller1.exec(Arrays.asList("foo")).toString());
assertEquals("", docCaller2.exec(Arrays.asList("foo")).toString());
}
public void testJavadocSingleListValue() throws Exception {
assertEquals("[1.0]", docCaller1.exec(Arrays.asList("list:since")).toString());
assertEquals("[1.0]", docCaller2.exec(Arrays.asList("list:since")).toString());
}
public void testJavadocMultipleListValue() throws Exception {
assertEquals("[foo, bar]", docCaller1.exec(Arrays.asList("list:author")).toString());
assertEquals("[foo, bar]", docCaller2.exec(Arrays.asList("list:author")).toString());
}
public void testJavadocListNoValue() throws Exception {
assertEquals("[deprecated]", docCaller1.exec(Arrays.asList("list:deprecated")).toString());
assertEquals("[deprecated]", docCaller2.exec(Arrays.asList("list:deprecated")).toString());
}
public void testJavadocListDoesntExist() throws Exception {
assertEquals("[]", docCaller1.exec(Arrays.asList("list:foo")).toString());
assertEquals("[]", docCaller2.exec(Arrays.asList("list:foo")).toString());
}
public void testJavadocSingleFlatValue() throws Exception {
assertEquals("1.0", docCaller1.exec(Arrays.asList("flat:since")).toString());
assertEquals("1.0", docCaller2.exec(Arrays.asList("flat:since")).toString());
}
public void testJavadocMultipleFlatValue() throws Exception {
assertEquals("foo, bar", docCaller1.exec(Arrays.asList("flat:author")).toString());
assertEquals("foo, bar", docCaller2.exec(Arrays.asList("flat:author")).toString());
}
public void testJavadocFlatNoValue() throws Exception {
assertEquals("deprecated", docCaller1.exec(Arrays.asList("flat:deprecated")).toString());
assertEquals("deprecated", docCaller2.exec(Arrays.asList("flat:deprecated")).toString());
}
public void testJavadocFlatDoesntExist() throws Exception {
assertEquals("", docCaller1.exec(Arrays.asList("flat:foo")).toString());
assertEquals("", docCaller2.exec(Arrays.asList("flat:foo")).toString());
}
public void testSiblingName() throws Exception {
assertEquals(data2.get(0).get(FreemarkerDataFactory.NAME), siblingData2.get(FreemarkerDataFactory.NAME));
assertEquals(data1.get(0).get(FreemarkerDataFactory.NAME), siblingData1.get(FreemarkerDataFactory.NAME));
}
public void testSiblingElementName() throws Exception {
assertEquals(data2.get(0).get(FreemarkerDataFactory.ELEMENT_NAME), siblingData2.get(FreemarkerDataFactory.ELEMENT_NAME));
assertEquals(data1.get(0).get(FreemarkerDataFactory.ELEMENT_NAME), siblingData1.get(FreemarkerDataFactory.ELEMENT_NAME));
}
public void testSiblingTypeName() throws Exception {
assertEquals(
((Map<String, String>) data2.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME),
((Map<String, String>) siblingData2.get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
assertEquals(
((Map<String, String>) data1.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME),
((Map<String, String>) siblingData2.get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.NAME));
}
public void testSiblingTypeFullName() throws Exception {
assertEquals(
((Map<String, String>) data2.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN),
((Map<String, String>) siblingData2.get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
assertEquals(
((Map<String, String>) data1.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN),
((Map<String, String>) siblingData2.get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.FQN));
}
public void testSiblingTypeIsArray() throws Exception {
assertEquals(
((Map<String, String>) data2.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY),
((Map<String, String>) siblingData2.get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
assertEquals(
((Map<String, String>) data1.get(0).get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY),
((Map<String, String>) siblingData2.get(FreemarkerDataFactory.TYPE)).get(FreemarkerDataFactory.IS_ARRAY));
}
public void testSiblingDoc() throws Exception {
assertEquals(
docCaller2.exec(Arrays.asList("since")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("since")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("since")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("since")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("author")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("author")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("author")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("author")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("deprecated")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("deprecated")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("deprecated")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("deprecated")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("foo")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("foo")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("foo")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("foo")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("list:since")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:since")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("list:since")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:since")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("list:author")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:author")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("list:author")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:author")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("list:deprecated")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:deprecated")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("list:deprecated")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:deprecated")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("list:foo")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:foo")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("list:foo")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("list:foo")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("flat:since")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:since")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("flat:since")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:since")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("flat:author")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:author")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("flat:author")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:author")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("flat:deprecated")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:deprecated")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("flat:deprecated")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:deprecated")).toString());
assertEquals(
docCaller2.exec(Arrays.asList("flat:foo")).toString(),
((JavadocCallerMethod) siblingData2.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:foo")).toString());
assertEquals(
docCaller1.exec(Arrays.asList("flat:foo")).toString(),
((JavadocCallerMethod) siblingData1.get(FreemarkerDataFactory.JAVADOC)).exec(Arrays.asList("flat:foo")).toString());
}
public void testSiblingAttribute() throws Exception {
assertEquals(
((AttributeCallerMethod) data2.get(0).get(FreemarkerDataFactory.ATTRIBUTE)).exec(Arrays.asList("value")).toString(),
((AttributeCallerMethod) siblingData2.get(FreemarkerDataFactory.ATTRIBUTE)).exec(Arrays.asList("value")).toString()
);
}
}