diff --git a/src/main/java/rife/bld/extension/dokka/DokkaOperation.java b/src/main/java/rife/bld/extension/dokka/DokkaOperation.java index 28c4b53..17723d8 100644 --- a/src/main/java/rife/bld/extension/dokka/DokkaOperation.java +++ b/src/main/java/rife/bld/extension/dokka/DokkaOperation.java @@ -32,6 +32,7 @@ import java.util.logging.Logger; * @author Erik C. Thauvin * @since 1.0 */ +@SuppressWarnings("PMD.AvoidThrowingRawExceptionTypes") public class DokkaOperation extends AbstractProcessOperation { private final Logger LOGGER = Logger.getLogger(DokkaOperation.class.getName()); private final Map globalLinks_ = new ConcurrentHashMap<>(); @@ -107,10 +108,8 @@ public class DokkaOperation extends AbstractProcessOperation { // -outputDir if (outputDir_ != null) { - if (!outputDir_.exists()) { - if (!outputDir_.mkdirs()) { - throw new RuntimeException("Could not create: " + outputDir_.getAbsolutePath()); - } + if (!outputDir_.exists() && !outputDir_.mkdirs()) { + throw new RuntimeException("Could not create: " + outputDir_.getAbsolutePath()); } args.add("-outputDir"); @@ -244,10 +243,8 @@ public class DokkaOperation extends AbstractProcessOperation { var files = directory.listFiles(); if (files != null) { for (var f : files) { - if (!f.getName().contains("-sources")) { - if (f.getName().matches(regex)) { - jars.add(f.getAbsolutePath()); - } + if (!f.getName().contains("-sources") && f.getName().matches(regex)) { + jars.add(f.getAbsolutePath()); } } } diff --git a/src/main/java/rife/bld/extension/dokka/SourceSet.java b/src/main/java/rife/bld/extension/dokka/SourceSet.java index 89bc443..6340602 100644 --- a/src/main/java/rife/bld/extension/dokka/SourceSet.java +++ b/src/main/java/rife/bld/extension/dokka/SourceSet.java @@ -203,7 +203,7 @@ public class SourceSet { // -sourceSetName if (sourceSetName_ != null) { - args.add("sourceSetName"); + args.add("-sourceSetName"); args.add(sourceSetName_); } @@ -325,7 +325,7 @@ public class SourceSet { * @param files the list of files * @return this operation instance */ - public SourceSet includss(Collection files) { + public SourceSet includes(Collection files) { includes_.addAll(files); return this; } diff --git a/src/test/java/rife/bld/extension/dokka/DokkaOperationTest.java b/src/test/java/rife/bld/extension/dokka/DokkaOperationTest.java new file mode 100644 index 0000000..09c0b18 --- /dev/null +++ b/src/test/java/rife/bld/extension/dokka/DokkaOperationTest.java @@ -0,0 +1,86 @@ +/* + * Copyright 2023 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 + * + * https://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 rife.bld.extension.dokka; + +import org.junit.jupiter.api.Test; +import rife.bld.blueprints.BaseProjectBlueprint; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; + +class DokkaOperationTest { + @Test + @SuppressWarnings({"ExtractMethodRecommender", "PMD.AvoidDuplicateLiterals"}) + void executeConstructProcessCommandListTest() { + var examples = new File("examples"); + var args = new DokkaOperation() + .fromProject(new BaseProjectBlueprint(examples, "com.example", "Example")) + .globalLinks("s", "link") + .globalLinks(Map.of("s2", "link2")) + .globalPackageOptions("option1", "option2") + .globalPackageOptions(List.of("option3", "option4")) + .globalSrcLink("link1", "link2") + .globalSrcLink(List.of("link3", "link4")) + .includes("file1", "file2") + .pluginConfiguration("name", "\"json\"") + .pluginConfiguration(Map.of("\"name2\"", "json2")) + .pluginClassPath("path1", "path2") + .pluginClassPath(List.of("path3", "path4")) + .delayTemplateSubstitution(true) + .failOnWarning(true) + .loggingLevel(LoggingLevel.DEBUG) + .moduleName("name") + .moduleVersion("1.0") + .noSuppressObviousFunctions(true) + .offlineMode(true) + .outputDir(new File(examples, "build")) + .suppressInheritedMembers(true) + .executeConstructProcessCommandList(); + + var path = examples.getAbsolutePath(); + var matches = List.of("java", + "-jar", path + "/lib/bld/dokka-cli-1.9.10.jar", + "-pluginsClasspath", path + "/lib/bld/dokka-base-1.9.10.jar;" + + path + "/lib/bld/analysis-kotlin-descriptors-1.9.10.jar;" + + path + "/lib/bld/korte-jvm-2.7.0.jar;" + + path + "/lib/bld/javadoc-plugin-1.9.10.jar;" + + path + "/lib/bld/kotlin-as-java-plugin-1.9.10.jar;path1;path2;path3;path4", + "-sourceSet", "-src " + path + "/src/main/kotlin", + "-outputDir", path + "/build", + "-delayTemplateSubstitution", "true", + "-failOnWarning", "true", + "-globalLinks", "{s}^{link}^^{s2}^{link2}", + "-globalPackageOptions", "option1;option2;option3;option4", + "-globalSrcLinks_", "link1;link2;link3;link4", + "-includes", "file1;file2", + "-loggingLevel", "debug", + "-moduleName", "name", + "-moduleVersion", "1.0", + "-noSuppressObviousFunctions", "true", + "-offlineMode", "true", + "-pluginConfiguration", "{name}={\\\"json\\\"}^^{\\\"name2\\\"}={json2}", + "-suppressInheritedMembers", "true"); + + assertThat(args).hasSize(matches.size()); + + IntStream.range(0, args.size()).forEach(i -> assertThat(args.get(i)).isEqualTo(matches.get(i))); + } +} diff --git a/src/test/java/rife/bld/extension/dokka/SourceSetTest.java b/src/test/java/rife/bld/extension/dokka/SourceSetTest.java new file mode 100644 index 0000000..bed76ec --- /dev/null +++ b/src/test/java/rife/bld/extension/dokka/SourceSetTest.java @@ -0,0 +1,109 @@ +/* + * Copyright 2023 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 + * + * https://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 rife.bld.extension.dokka; + +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; + +class SourceSetTest { + @Test + void sourceSetCollectionsTest() { + var args = new SourceSet() + .classpath(List.of("path1", "path2")) + .dependentSourceSets(Map.of("set1", "set2", "set3", "set4")) + .externalDocumentationLinks(Map.of("link1", "link2", "link3", "link4")) + .perPackageOptions(List.of("option1", "option2")) + .samples(List.of("samples1", "samples1")) + .suppressedFiles(List.of("sup1", "sup2")) + .args(); + + var matches = List.of( + "-classpath", "path1;path2", + "-dependentSourceSets", "set1/set2;set3/set4", + "-externalDocumentationLinks", "{link3}^{link4}^^{link1}^{link2}", + "-perPackageOptions", "option1;option2", + "-samples", "samples1;samples1", + "-suppressedFiles", "sup1;sup2" + ); + + assertThat(args).hasSize(matches.size()); + + IntStream.range(0, args.size()).forEach(i -> assertThat(args.get(i)).isEqualTo(matches.get(i))); + } + + @Test + @SuppressWarnings("PMD.AvoidDuplicateLiterals") + void sourceSetTest() { + var args = new SourceSet() + .classpath("classpath1", "classpath2") + .dependentSourceSets("moduleName", "sourceSetName") + .documentedVisibilities(DocumentedVisibility.PACKAGE, DocumentedVisibility.PRIVATE) + .externalDocumentationLinks("url1", "packageListUrl1") + .externalDocumentationLinks("url2", "packageListUrl2") + .includes("includes1", "includes2") + .perPackageOptions("options1", "options2") + .samples("samples1", "sample2") + .srcLinks("path1", "remote1", "suffix1") + .srcLinks("path2", "remote2", "suffix2") + .src("src1", "src2") + .suppressedFiles("sup1", "sup2") + .analysisPlatform(AnalysisPlatform.JVM) + .apiVersion("1.0") + .displayName("name") + .jdkVersion(18) + .languageVersion("2.0") + .noJdkLink(true) + .noSkipEmptyPackages(true) + .noStdlibLink(true) + .reportUndocumented(true) + .skipDeprecated(true) + .sourceSetName("setName") + .args(); + + var matches = List.of( + "-analysisPlatform", "jvm", + "-apiVersion", "1.0", + "-classpath", "classpath1;classpath2", + "-dependentSourceSets", "moduleName/sourceSetName", + "-displayName", "name", + "-documentedVisibilities", "package;private", + "-externalDocumentationLinks", "{url1}^{packageListUrl1}^^{url2}^{packageListUrl2}", + "-jdkVersion", "18", + "-includes", "includes1;includes2", + "-languageVersion", "2.0", + "-noJdkLink", "true", + "-noSkipEmptyPackages", "true", + "-noStdlibLink", "true", + "-reportUndocumented", "true", + "-perPackageOptions", "options1;options2", + "-samples", "samples1;sample2", + "-skipDeprecated", "true", + "-src", "src1;src2", + "-srcLinks", "{path1}={remote1#suffix1};{path2}={remote2#suffix2}", + "-sourceSetName", "setName", + "-suppressedFiles", "sup1;sup2"); + + assertThat(args).hasSize(matches.size()); + + IntStream.range(0, args.size()).forEach(i -> assertThat(args.get(i)).isEqualTo(matches.get(i))); + } +}