Skip to content

Commit

Permalink
Merge bac8af7 into c50220d
Browse files Browse the repository at this point in the history
  • Loading branch information
sjoerdtalsma committed Jun 12, 2020
2 parents c50220d + bac8af7 commit 3be796b
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 1 deletion.
@@ -1,5 +1,5 @@
/*
* Copyright 2016-2019 Talsma ICT
* Copyright 2016-2020 Talsma ICT
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -17,6 +17,7 @@

import jdk.javadoc.doclet.Doclet;
import jdk.javadoc.doclet.Doclet.Option.Kind;
import net.sourceforge.plantuml.OptionFlags;
import nl.talsmasoftware.umldoclet.UMLDoclet;

import java.util.Arrays;
Expand Down Expand Up @@ -91,6 +92,7 @@ private UMLOptions(DocletConfig config, Set<Doclet.Option> standardOptions) {
(args) -> config.failOnCyclicPackageDependencies = asBoolean(args.get(0))));
this.options.add(new Option("--uml-java-bean-properties-as-fields -umlJavaBeanPropertiesAsFields", 0, Kind.STANDARD,
(args) -> config.methodConfig.javaBeanPropertiesAsFields = true));
this.options.add(new Option("--uml-timeout -umlTimeout", 1, Kind.STANDARD, this::setTimeout));
}

Set<Doclet.Option> mergeWith(final Set<Doclet.Option> standardOptions) {
Expand All @@ -116,6 +118,15 @@ private static boolean asBoolean(String value) {
return "true".equalsIgnoreCase(value);
}

private void setTimeout(List<String> timeout) {
try {
int timeoutSeconds = Integer.parseInt(timeout.get(0));
OptionFlags.getInstance().setTimeoutMs(1000L * timeoutSeconds);
} catch (RuntimeException rte) {
throw new IllegalArgumentException("Unrecognized timeout value: seconds expected, received: " + timeout, rte);
}
}

private class Option implements Doclet.Option {
private static final String MISSING_KEY = "<MISSING KEY>";
private final Consumer<List<String>> processor;
Expand Down
Expand Up @@ -39,3 +39,5 @@ doclet.usage.uml-excluded-package-dependencies.parameters=<package>(,<package>)*
doclet.usage.fail-on-cyclic-package-dependencies.description=Fail on cyclic package dependencies (defaults to false)
doclet.usage.fail-on-cyclic-package-dependencies.parameters=(true|false)
doclet.usage.uml-java-bean-properties-as-fields.description=To render JavaBean getters and setters as fields in UML
doclet.usage.uml-timeout.description=Set a timeout for PlantUML diagram rendering (defaults to '900' / 15 minutes)
doclet.usage.uml-timeout.parameters=<seconds>
@@ -0,0 +1,73 @@
/*
* Copyright 2016-2020 Talsma ICT
*
* 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 nl.talsmasoftware.umldoclet.javadoc;

import jdk.javadoc.doclet.Doclet;
import net.sourceforge.plantuml.OptionFlags;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.opentest4j.AssertionFailedError;

import static java.util.Collections.emptySet;
import static java.util.Collections.singletonList;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertThrows;

public class UMLOptionsTest {
private DocletConfig config;
private UMLOptions umlOptions;

@BeforeEach
void setUpUmlOptions() {
config = new DocletConfig();
umlOptions = new UMLOptions(config);
}

private Doclet.Option docletOption(String name) {
return umlOptions.mergeWith(emptySet())
.stream()
.filter(o -> o.getNames().contains(name))
.findFirst()
.orElseThrow(() -> new AssertionFailedError("Doclet option " + name + " not found!"));
}

@Test
void testUmlTimeoutOption() {
// prepare
Doclet.Option umlTimeoutOption = docletOption("--uml-timeout");

// execute
umlTimeoutOption.process("--uml-timeout", singletonList("1800"));

// verify
assertThat(OptionFlags.getInstance().getTimeoutMs(), is(1000L * 1800));
}

@Test
void testIllegalUmlTimeoutOption() {
// prepare
Doclet.Option umlTimeoutOption = docletOption("--uml-timeout");

// execute
IllegalArgumentException expected = assertThrows(IllegalArgumentException.class, () ->
umlTimeoutOption.process("--uml-timeout", singletonList("30 minutes")));

// verify
assertThat(expected.getMessage(), containsString("timeout value"));
}
}

0 comments on commit 3be796b

Please sign in to comment.