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"));
+	}
+}