Bug 553534: [Doclet] needs some unit tests
add some integration tests to see that module builder works
Change-Id: I26befc0940fb8d3d654b2ba9b51478f78a661dec
diff --git a/developers/org.eclipse.ease.helpgenerator/.classpath b/developers/org.eclipse.ease.helpgenerator/.classpath
index d171cd4..ebfd4f6 100644
--- a/developers/org.eclipse.ease.helpgenerator/.classpath
+++ b/developers/org.eclipse.ease.helpgenerator/.classpath
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
+ <classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/developers/org.eclipse.ease.helpgenerator/pom.xml b/developers/org.eclipse.ease.helpgenerator/pom.xml
index b466e72..ca632b4 100644
--- a/developers/org.eclipse.ease.helpgenerator/pom.xml
+++ b/developers/org.eclipse.ease.helpgenerator/pom.xml
@@ -1,4 +1,5 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>org.eclipse.ease.helpgenerator</artifactId>
@@ -12,9 +13,30 @@
<build>
<sourceDirectory>src</sourceDirectory>
- <finalName>ease.module.doclet</finalName>
+ <testSourceDirectory>test</testSourceDirectory>
+ <finalName>ease.module.doclet</finalName>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.22.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit4</artifactId>
+ <version>2.22.0</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <includes>
+ <include>**/*.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+ </plugins>
</build>
-
+
<dependencies>
<dependency>
<groupId>com.sun</groupId>
@@ -23,5 +45,12 @@
<version>1.0</version>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.12</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/.project b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/.project
new file mode 100644
index 0000000..822dab3
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.ease.helpgenerator.testproject</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/META-INF/MANIFEST.MF b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ce9ba55
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.eclipse.ease.helpgenerator.testproject
+Bundle-SymbolicName: org.eclipse.ease.helpgenerator.testproject;singleton:=true
+Bundle-Name: Test Project for Help Generator Unit Tests
+Bundle-Version: 1.0.0.qualifier
+Require-Bundle: org.eclipse.ease
+Bundle-ManifestVersion: 2
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-Vendor: Eclipse.org
+
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/build.properties b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/build.properties
new file mode 100644
index 0000000..a5605b3
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/build.properties
@@ -0,0 +1,5 @@
+#
+#Wed Nov 27 12:56:11 CET 2019
+bin.includes=help/,META-INF/,.,plugin.xml
+output..=bin/
+source..=src/
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/plugin.xml b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/plugin.xml
new file mode 100644
index 0000000..2484799
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/plugin.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ease.modules">
+ <module
+ class="org.eclipse.ease.helpgenerator.testproject.valid.ValidModule"
+ id="org.eclipse.ease.helpgenerator.testproject.module1"
+ name="Valid Test Module"
+ visible="true">
+ </module>
+ <module
+ class="org.eclipse.ease.helpgenerator.testproject.invalidxml.InvalidXmlModule"
+ id="org.eclipse.ease.helpgenerator.testproject.module2"
+ name="Invalid XML Module"
+ visible="true">
+ </module>
+ <module
+ class="org.eclipse.ease.helpgenerator.testproject.missingdocs.MissingDocsModule"
+ id="org.eclipse.ease.helpgenerator.testproject.module3"
+ name="Missing Documentation Module"
+ visible="true">
+ </module>
+ </extension>
+
+</plugin>
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/invalidxml/InvalidXmlModule.java b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/invalidxml/InvalidXmlModule.java
new file mode 100644
index 0000000..d05e7f0
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/invalidxml/InvalidXmlModule.java
@@ -0,0 +1,16 @@
+package org.eclipse.ease.helpgenerator.testproject.invalidxml;
+
+import org.eclipse.ease.modules.WrapToScript;
+
+/**
+ * This module contains <some> invalid patterns.
+ */
+public class InvalidXmlModule {
+
+ /**
+ * The XML code contains <i> some unnclosed tags.
+ */
+ @WrapToScript
+ public void simple() {
+ }
+}
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/missingdocs/MissingDocsModule.java b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/missingdocs/MissingDocsModule.java
new file mode 100644
index 0000000..bf93cdb
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/missingdocs/MissingDocsModule.java
@@ -0,0 +1,43 @@
+package org.eclipse.ease.helpgenerator.testproject.missingdocs;
+
+import java.io.IOException;
+
+import org.eclipse.ease.modules.WrapToScript;
+
+public class MissingDocsModule {
+
+ @WrapToScript
+ public static final int UNIVERSAL_TRUTH = 42;
+
+ @WrapToScript
+ public void simple() {
+ }
+
+ /**
+ * Method with parameters.
+ *
+ * @param a
+ * integer parameter
+ * @return always 0
+ */
+ @WrapToScript
+ public int baseParameters(int a, long b, String data) {
+ return 0;
+ }
+
+ /**
+ * Method with method name alias.
+ */
+ @WrapToScript(alias = "shortName")
+ public String thisIsAMethodWithALongName() {
+ return null;
+ }
+
+ /**
+ * Method that always throws.
+ */
+ @WrapToScript
+ public void pleaseThrow() throws IOException {
+ throw new IOException("Bad thing happened");
+ }
+}
diff --git a/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/valid/ValidModule.java b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/valid/ValidModule.java
new file mode 100644
index 0000000..6cd4578
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/resources/org.eclipse.ease.helpgenerator.testproject/src/org/eclipse/ease/helpgenerator/testproject/valid/ValidModule.java
@@ -0,0 +1,57 @@
+package org.eclipse.ease.helpgenerator.testproject.valid;
+
+import java.io.IOException;
+
+import org.eclipse.ease.modules.WrapToScript;
+
+/**
+ * This is a test module.
+ */
+public class ValidModule {
+
+ /** The answer to all your questions. */
+ @WrapToScript
+ public static final int UNIVERSAL_TRUTH = 42;
+
+ /**
+ * Simple method documentation.
+ */
+ @WrapToScript
+ public void simple() {
+ }
+
+ /**
+ * Method with parameters.
+ *
+ * @param a
+ * integer parameter
+ * @param b
+ * parameter of type long
+ * @param data
+ * java string
+ * @return always 0
+ */
+ @WrapToScript
+ public int baseParameters(int a, long b, String data) {
+ return 0;
+ }
+
+ /**
+ * Method with method name alias.
+ *
+ * @return always <code>null</code>
+ */
+ @WrapToScript(alias = "shortName")
+ public String thisIsAMethodWithALongName() {
+ return null;
+ }
+
+ /**
+ * Method that always throws.
+ * @throws IOException in any case
+ */
+ @WrapToScript
+ public void pleaseThrow() throws IOException {
+ throw new IOException("Bad thing happened");
+ }
+}
diff --git a/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ContentException.java b/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ContentException.java
new file mode 100644
index 0000000..41d3114
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ContentException.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Christian Pontesegger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * Contributors:
+ * Christian Pontesegger - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ease.helpgenerator;
+
+public class ContentException extends Exception {
+
+ public ContentException() {
+ super();
+ }
+
+ public ContentException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+
+ public ContentException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ContentException(String message) {
+ super(message);
+ }
+
+ public ContentException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ModuleDoclet.java b/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ModuleDoclet.java
index cc5804b..d1d3233 100644
--- a/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ModuleDoclet.java
+++ b/developers/org.eclipse.ease.helpgenerator/src/org/eclipse/ease/helpgenerator/ModuleDoclet.java
@@ -229,6 +229,10 @@
// update build.properties
updateBuildProperties(fRootFolder);
}
+
+ } catch (final ContentException e) {
+ return false;
+
} catch (final Exception e) {
e.printStackTrace();
return false;
@@ -449,10 +453,12 @@
*
* @param classes
* @return <code>true</code> when at least 1 HTML file was created
+ * @throws ContentException
+ * on error within the java comments
* @throws Exception
* on file creation errors
*/
- private boolean createHTMLFiles(final ClassDoc[] classes) throws IOException {
+ private boolean createHTMLFiles(final ClassDoc[] classes) throws IOException, ContentException {
boolean createdFiles = false;
boolean documentationErrors = false;
boolean invalidFileContent = false;
@@ -494,10 +500,10 @@
}
if ((fFailOnMissingDocs) && (documentationErrors))
- throw new IOException("Documentation is not complete");
+ throw new ContentException("Documentation is not complete");
if ((fFailOnHTMLErrors) && (invalidFileContent))
- throw new IOException("Documentation invalid");
+ throw new ContentException("Documentation invalid");
return createdFiles;
}
diff --git a/developers/org.eclipse.ease.helpgenerator/test/org/eclipse/ease/helpgenerator/IntegrationTest.java b/developers/org.eclipse.ease.helpgenerator/test/org/eclipse/ease/helpgenerator/IntegrationTest.java
new file mode 100644
index 0000000..ae7ea81
--- /dev/null
+++ b/developers/org.eclipse.ease.helpgenerator/test/org/eclipse/ease/helpgenerator/IntegrationTest.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Christian Pontesegger and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * Contributors:
+ * Christian Pontesegger - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ease.helpgenerator;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+
+import org.junit.Test;
+
+public class IntegrationTest {
+
+ private static int buildDocs(boolean failOnHtmlError, boolean failOnMissingDocs, String packageName) {
+ // @formatter:off
+ return com.sun.tools.javadoc.Main.execute(new String[] {
+ "-sourcepath", new File("./resources/org.eclipse.ease.helpgenerator.testproject/src").getAbsolutePath(),
+ "-root", new File("./resources/org.eclipse.ease.helpgenerator.testproject").getAbsolutePath(),
+ "-doclet", ModuleDoclet.class.getName(),
+ "-docletpath", new File("./target/classes").getAbsolutePath(),
+
+ "-failOnHTMLError", Boolean.toString(failOnHtmlError),
+ "-failOnMissingDocs", Boolean.toString(failOnMissingDocs),
+
+ "-link", "https://docs.oracle.com/javase/8/docs/api/",
+
+ packageName
+ });
+ // @formatter:on
+ }
+
+ @Test
+ public void validModule() {
+ assertEquals(0, buildDocs(true, true, "org.eclipse.ease.helpgenerator.testproject.valid"));
+ }
+
+ @Test
+ public void invalidXMLIgnoreErrors() {
+ assertEquals(0, buildDocs(false, false, "org.eclipse.ease.helpgenerator.testproject.invalidxml"));
+ }
+
+ @Test
+ public void invalidXMLShouldFail() {
+ assertEquals(1, buildDocs(true, false, "org.eclipse.ease.helpgenerator.testproject.invalidxml"));
+ }
+
+ @Test
+ public void missingDocsIgnoreErrors() {
+ assertEquals(0, buildDocs(false, false, "org.eclipse.ease.helpgenerator.testproject.missingdocs"));
+ }
+
+ @Test
+ public void missingDocsShouldFail() {
+ assertEquals(1, buildDocs(false, true, "org.eclipse.ease.helpgenerator.testproject.missingdocs"));
+ }
+}