/* * * Copyright 2007-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.codehaus.groovy.tools.groovydoc; import groovy.util.GroovySwingTestCase; import org.codehaus.groovy.groovydoc.GroovyClassDoc; import org.codehaus.groovy.groovydoc.GroovyMethodDoc; import org.codehaus.groovy.groovydoc.GroovyRootDoc; import java.util.ArrayList; import java.util.List; import java.util.Properties; /** * @author Jeremy Rayner */ public class GroovyDocToolTest extends GroovySwingTestCase { private static final String MOCK_DIR = "mock/doc"; private static final String TEMPLATES_DIR = "main/org/codehaus/groovy/tools/groovydoc/gstringTemplates"; GroovyDocTool xmlTool; GroovyDocTool xmlToolForTests; GroovyDocTool plainTool; public void setUp() { plainTool = new GroovyDocTool(new String[]{"src/test"}); xmlTool = new GroovyDocTool( new FileSystemResourceManager("src"), // template storage new String[] {"src/main"}, // source file dirs new String[]{TEMPLATES_DIR + "/topLevel/rootDocStructuredData.xml"}, new String[]{TEMPLATES_DIR + "/packageLevel/packageDocStructuredData.xml"}, new String[]{TEMPLATES_DIR + "/classLevel/classDocStructuredData.xml"}, new ArrayList<LinkArgument>(), new Properties() ); xmlToolForTests = new GroovyDocTool( new FileSystemResourceManager("src"), // template storage new String[] {"src/test"}, // source file dirs, // source file dirs new String[]{TEMPLATES_DIR + "/topLevel/rootDocStructuredData.xml"}, new String[]{TEMPLATES_DIR + "/packageLevel/packageDocStructuredData.xml"}, new String[]{TEMPLATES_DIR + "/classLevel/classDocStructuredData.xml"}, new ArrayList<LinkArgument>(), new Properties() ); } public void testPlainGroovyDocTool() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java"); plainTool.add(srcList); GroovyRootDoc root = plainTool.getRootDoc(); // loop through classes in tree GroovyClassDoc[] classDocs = root.classes(); for (int i = 0; i < classDocs.length; i++) { GroovyClassDoc clazz = root.classes()[i]; assertEquals("GroovyDocToolTest", clazz.name()); // loop through methods in class boolean seenThisMethod = false; GroovyMethodDoc[] methodDocs = clazz.methods(); for (int j = 0; j < methodDocs.length; j++) { GroovyMethodDoc method = clazz.methods()[j]; if ("testPlainGroovyDocTool".equals(method.name())) { seenThisMethod = true; } } assertTrue(seenThisMethod); } } public void testGroovyDocTheCategoryMethodClass() throws Exception { if (isHeadless()) { return; } List<String> srcList = new ArrayList<String>(); srcList.add("groovy/util/CliBuilder.groovy"); srcList.add("groovy/lang/GroovyLogTestCase.groovy"); srcList.add("groovy/mock/interceptor/StrictExpectation.groovy"); srcList.add("groovy/ui/Console.groovy"); srcList.add("org/codehaus/groovy/runtime/GroovyCategorySupport.java"); srcList.add("org/codehaus/groovy/runtime/ConvertedMap.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String groovyCategorySupportDocument = output.getText(MOCK_DIR + "/org/codehaus/groovy/runtime/GroovyCategorySupport.html"); assertTrue(groovyCategorySupportDocument != null && groovyCategorySupportDocument.indexOf("<method modifiers=\"public static \" returns=\"boolean\" name=\"hasCategoryInAnyThread\">") > 0); String categoryMethodDocument = output.getText(MOCK_DIR + "/org/codehaus/groovy/runtime/GroovyCategorySupport.CategoryMethodList.html"); assertTrue(categoryMethodDocument != null && categoryMethodDocument.indexOf("<method modifiers=\"public \" returns=\"boolean\" name=\"add\">") > 0); String packageDocument = output.getText(MOCK_DIR + "/org/codehaus/groovy/runtime/packageDocStructuredData.xml"); assertTrue("Failed to find 'packageDocStructuredData.xml' in generated output", packageDocument != null); assertTrue(packageDocument.indexOf("<class name=\"GroovyCategorySupport\" />") > 0); assertTrue(packageDocument.indexOf("<class name=\"GroovyCategorySupport.CategoryMethod\" />") > 0); String rootDocument = output.getText(MOCK_DIR + "/rootDocStructuredData.xml"); assertTrue("Failed to find 'rootDocStructuredData.xml' in generated output", rootDocument != null); assertTrue(rootDocument.indexOf("<package name=\"org/codehaus/groovy/runtime\" />") > 0); assertTrue(rootDocument.indexOf("<class path=\"org/codehaus/groovy/runtime/GroovyCategorySupport\" name=\"GroovyCategorySupport\" />") > 0); assertTrue(rootDocument.indexOf("<class path=\"org/codehaus/groovy/runtime/GroovyCategorySupport.CategoryMethod\" name=\"GroovyCategorySupport.CategoryMethod\" />") > 0); } public void testConstructors() throws Exception { if (isHeadless()) { return; } List<String> srcList = new ArrayList<String>(); srcList.add("groovy/ui/Console.groovy"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String consoleDoc = output.getText(MOCK_DIR + "/groovy/ui/Console.html"); assertTrue(consoleDoc.indexOf("<constructor modifiers=\"public \" name=\"Console\">") > 0); assertTrue(consoleDoc.indexOf("<parameter type=\"java.lang.ClassLoader\" name=\"parent\" />") > 0); } public void testClassComment() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("groovy/xml/DOMBuilder.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String domBuilderDoc = output.getText(MOCK_DIR + "/groovy/xml/DOMBuilder.html"); assertTrue(domBuilderDoc.indexOf("A helper class for creating a W3C DOM tree") > 0); } public void testMethodComment() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("groovy/model/DefaultTableColumn.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String defTabColDoc = output.getText(MOCK_DIR + "/groovy/model/DefaultTableColumn.html"); assertTrue(defTabColDoc.indexOf("Evaluates the value of a cell") > 0); } public void testPackageName() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("groovy/xml/DOMBuilder.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String domBuilderDoc = output.getText(MOCK_DIR + "/groovy/xml/DOMBuilder.html"); assertTrue(domBuilderDoc.indexOf("<containingPackage name=\"groovy/xml\">groovy.xml</containingPackage>") > 0); } public void testExtendsClauseWithoutSuperClassInTree() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("groovy/xml/DOMBuilder.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String domBuilderDoc = output.getText(MOCK_DIR + "/groovy/xml/DOMBuilder.html"); assertTrue(domBuilderDoc.indexOf("<extends>BuilderSupport</extends>") > 0); } public void testExtendsClauseWithSuperClassInTree() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("groovy/xml/DOMBuilder.java"); srcList.add("groovy/util/BuilderSupport.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String domBuilderDoc = output.getText(MOCK_DIR + "/groovy/xml/DOMBuilder.html"); assertTrue(domBuilderDoc.indexOf("<extends>BuilderSupport</extends>") > 0); } public void testInterfaceExtendsClauseWithMultipleInterfaces() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.groovy"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.java"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java"); xmlToolForTests.add(srcList); MockOutputTool output = new MockOutputTool(); xmlToolForTests.renderToOutput(output, MOCK_DIR); String groovyClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.html"); assertTrue(groovyClassDoc.indexOf("<interface>JavaInterface1</interface>") > 0); assertTrue(groovyClassDoc.indexOf("<interface>GroovyInterface1</interface>") > 0); assertTrue(groovyClassDoc.indexOf("<interface>Runnable</interface>") > 0); String javaClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.html"); assertTrue(javaClassDoc.indexOf("<interface>JavaInterface1</interface>") > 0); assertTrue(javaClassDoc.indexOf("<interface>GroovyInterface1</interface>") > 0); assertTrue(javaClassDoc.indexOf("<interface>Runnable</interface>") > 0); } public void testImplementsClauseWithMultipleInterfaces() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.groovy"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.java"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java"); xmlToolForTests.add(srcList); MockOutputTool output = new MockOutputTool(); xmlToolForTests.renderToOutput(output, MOCK_DIR); String groovyClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.html"); assertTrue(groovyClassDoc.indexOf("<interface>JavaInterface1</interface>") > 0); assertTrue(groovyClassDoc.indexOf("<interface>GroovyInterface1</interface>") > 0); assertTrue(groovyClassDoc.indexOf("<interface>Runnable</interface>") > 0); String javaClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.html"); assertTrue(javaClassDoc.indexOf("<interface>JavaInterface1</interface>") > 0); assertTrue(javaClassDoc.indexOf("<interface>GroovyInterface1</interface>") > 0); assertTrue(javaClassDoc.indexOf("<interface>Runnable</interface>") > 0); } public void testFullyQualifiedNamesInImplementsClause() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.groovy"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.java"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy"); srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java"); xmlToolForTests.add(srcList); MockOutputTool output = new MockOutputTool(); xmlToolForTests.renderToOutput(output, MOCK_DIR); String groovyClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.html"); assertTrue(groovyClassDoc.indexOf("<interface>GroovyInterface1</interface>") > 0); assertTrue(groovyClassDoc.indexOf("<interface>Runnable</interface>") > 0); String javaClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.html"); assertTrue(javaClassDoc.indexOf("<interface>JavaInterface1</interface>") > 0); assertTrue(javaClassDoc.indexOf("<interface>Runnable</interface>") > 0); } public void testDefaultPackage() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("UberTestCaseBugs.java"); xmlToolForTests.add(srcList); MockOutputTool output = new MockOutputTool(); xmlToolForTests.renderToOutput(output, MOCK_DIR); String domBuilderDoc = output.getText(MOCK_DIR + "/DefaultPackage/UberTestCaseBugs.html"); assertTrue(domBuilderDoc.indexOf("<extends>TestCase</extends>") > 0); } public void testStaticModifier() throws Exception { if (isHeadless()) { return; } List<String> srcList = new ArrayList<String>(); srcList.add("groovy/swing/binding/AbstractButtonProperties.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String abstractButtonPropertiesDoc = output.getText(MOCK_DIR + "/groovy/swing/binding/AbstractButtonProperties.html"); assertTrue(abstractButtonPropertiesDoc.indexOf("static") > 0); } public void testAnonymousInnerClassMethodsNotIncluded() throws Exception { if (isHeadless()) { return; } List<String> srcList = new ArrayList<String>(); srcList.add("groovy/swing/binding/AbstractButtonProperties.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String abstractButtonPropertiesDoc = output.getText(MOCK_DIR + "/groovy/swing/binding/AbstractButtonProperties.html"); assertTrue(abstractButtonPropertiesDoc.indexOf("createBinding") < 0); } public void testMultipleConstructorError() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("groovy/sql/Sql.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String sqlDoc = output.getText(MOCK_DIR + "/groovy/sql/Sql.html"); assertTrue(sqlDoc.indexOf("<method modifiers=\"public static \" returns=\"groovy.sql.InParameter\" name=\"VARBINARY\">") > 0); // VARBINARY() and other methods in Sql.java were assumed to be Constructors, make sure they aren't anymore... } public void testReturnTypeResolution() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("org/codehaus/groovy/tools/groovydoc/SimpleGroovyRootDoc.java"); srcList.add("org/codehaus/groovy/groovydoc/GroovyClassDoc.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String text = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/SimpleGroovyRootDoc.html"); assertTrue(text.indexOf("org.codehaus.groovy.groovydoc.GroovyClassDoc") > 0); } public void testParameterTypeResolution() throws Exception { List<String> srcList = new ArrayList<String>(); srcList.add("org/codehaus/groovy/tools/groovydoc/SimpleGroovyRootDoc.java"); srcList.add("org/codehaus/groovy/groovydoc/GroovyPackageDoc.java"); xmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); xmlTool.renderToOutput(output, MOCK_DIR); String text = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/SimpleGroovyRootDoc.html"); assertTrue(text.indexOf("<parameter type=\"org.codehaus.groovy.groovydoc.GroovyPackageDoc\"") > 0); } public void testMultipleSourcePaths() throws Exception { GroovyDocTool multipleXmlTool = new GroovyDocTool( new FileSystemResourceManager("src"), // template storage new String[] {"src/main", "src/test"}, // source file dirs, // source file dirs new String[]{TEMPLATES_DIR + "/topLevel/rootDocStructuredData.xml"}, new String[]{TEMPLATES_DIR + "/packageLevel/packageDocStructuredData.xml"}, new String[]{TEMPLATES_DIR + "/classLevel/classDocStructuredData.xml"}, new ArrayList<LinkArgument>(), new Properties() ); List<String> srcList = new ArrayList<String>(); srcList.add("groovy/model/DefaultTableColumn.java"); srcList.add("org/codehaus/groovy/tools/groovydoc/GroovyDocToolTestSampleGroovy.groovy"); multipleXmlTool.add(srcList); MockOutputTool output = new MockOutputTool(); multipleXmlTool.renderToOutput(output, MOCK_DIR); assertTrue(output.getText(MOCK_DIR + "/groovy/model/DefaultTableColumn.html") != null); assertTrue(output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTestSampleGroovy.html") != null); } }