diff --git a/pom.xml b/pom.xml index 0809acc..de67338 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,12 @@ 3.25.3 test + + org.mockito + mockito-core + 5.11.0 + test + diff --git a/src/main/java/org/asciidoctor/asciidoclet/AsciiDocTrees.java b/src/main/java/org/asciidoctor/asciidoclet/AsciiDocTrees.java index 9ac8ec2..dbd0f69 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/AsciiDocTrees.java +++ b/src/main/java/org/asciidoctor/asciidoclet/AsciiDocTrees.java @@ -98,12 +98,11 @@ private Tokens.Comment convertToAsciidoctor(Tokens.Comment comment) { AsciidocComment result = new AsciidocComment(asciidoc, comment); return result; } - + private String convertJavadocStringToAsciidoctorString(String javadocString) { - return converter.convert(javadocString); + return converter.convert(javadocString); } - - + @Override public DocCommentTree getDocCommentTree(Element e) { TreePath path = getPath(e); @@ -154,19 +153,19 @@ public DocTreePath getDocTreePath(FileObject fileObject, PackageElement packageE public Element getElement(DocTreePath path) { return docTrees.getElement(path); } - + // Not giving @Override in order to make this class compilable under all of JDK 11, 17, 21. public TypeMirror getType(DocTreePath path) { // In order to make this method compilable with JDK11, which doesn't define DocTrees#getType method, // and make this method work with JDK 17 and later, invoke the DocTrees#getType(DocTreePath) method reflectively. // Once we decide to stop supporting JDK 11, just call getType directly. - try { - return (TypeMirror) DocTrees.class.getMethod("getType", DocTreePath.class).invoke(docTrees, path); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - throw new RuntimeException(e); - } + try { + return (TypeMirror) DocTrees.class.getMethod("getType", DocTreePath.class).invoke(docTrees, path); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } } - + @Override public List getFirstSentence(List list) { return docTrees.getFirstSentence(list); diff --git a/src/main/java/org/asciidoctor/asciidoclet/Asciidoclet.java b/src/main/java/org/asciidoctor/asciidoclet/Asciidoclet.java index 3012da6..ef2e80a 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/Asciidoclet.java +++ b/src/main/java/org/asciidoctor/asciidoclet/Asciidoclet.java @@ -21,8 +21,6 @@ import jdk.javadoc.doclet.StandardDoclet; import javax.lang.model.SourceVersion; -import java.io.IOException; -import java.io.UncheckedIOException; import java.util.Arrays; import java.util.HashSet; import java.util.Locale; @@ -213,13 +211,11 @@ public SourceVersion getSupportedSourceVersion() { @Override public boolean run(DocletEnvironment environment) { - docletOptions.validateOptions(); + docletOptions.validate(); AsciidoctorConverter converter = new AsciidoctorConverter(docletOptions, reporter); boolean result; try (AsciidoctorFilteredEnvironment env = new AsciidoctorFilteredEnvironment(environment, converter)) { result = standardDoclet.run(env); - } catch (IOException e) { - throw new UncheckedIOException(e); } return result && postProcess(environment); } diff --git a/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorConverter.java b/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorConverter.java index bddd244..c95e862 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorConverter.java +++ b/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorConverter.java @@ -17,17 +17,9 @@ import jdk.javadoc.doclet.Reporter; import org.asciidoctor.Asciidoctor; -import org.asciidoctor.Attributes; -import org.asciidoctor.AttributesBuilder; import org.asciidoctor.Options; -import org.asciidoctor.OptionsBuilder; -import org.asciidoctor.SafeMode; -import org.asciidoctor.extension.RubyExtensionRegistry; import org.asciidoctor.jruby.AsciidoctorJRuby; -import java.io.IOException; -import java.util.List; -import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -40,36 +32,20 @@ class AsciidoctorConverter { static final String MARKER = " \t \t"; - private static AttributesBuilder defaultAttributes() { - return Attributes.builder() - .attribute("at", "@") - .attribute("slash", "/") - .attribute("icons", null) - .attribute("idprefix", "") - .attribute("idseparator", "-") - .attribute("javadoc", "") - .attribute("showtitle", true) - .attribute("source-highlighter", "coderay") - .attribute("coderay-css", "class") - .attribute("env-asciidoclet") - .attribute("env", "asciidoclet"); - } - - private static OptionsBuilder defaultOptions() { - return Options.builder() - .safe(SafeMode.SAFE) - .backend("html5"); - } - private static final Pattern TYPE_PARAM = Pattern.compile("\\s*<(\\w+)>(.*)"); private static final String INLINE_DOCTYPE = "inline"; + private final DocletOptions docletOptions; + private final Reporter reporter; + private final Asciidoctor asciidoctor; - private final Optional templates; - private final Options options; + private final OutputTemplates templates; AsciidoctorConverter(DocletOptions docletOptions, Reporter reporter) { - this(docletOptions, reporter, OutputTemplates.create(reporter), createAsciidoctorInstance(docletOptions.gemPath())); + this.asciidoctor = createAsciidoctorInstance(docletOptions.gemPath()); + this.reporter = reporter; + this.templates = OutputTemplates.create(reporter); + this.docletOptions = docletOptions; } private static Asciidoctor createAsciidoctorInstance(String gemPath) { @@ -79,37 +55,6 @@ private static Asciidoctor createAsciidoctorInstance(String gemPath) { return Asciidoctor.Factory.create(); } - /** - * Constructor used directly for testing purposes only. - */ - AsciidoctorConverter(DocletOptions docletOptions, Reporter errorReporter, Optional templates, Asciidoctor asciidoctor) { - this.asciidoctor = asciidoctor; - this.templates = templates; - this.options = buildOptions(docletOptions, errorReporter); - } - - private Options buildOptions(DocletOptions docletOptions, Reporter errorReporter) { - final OptionsBuilder opts = defaultOptions(); - if (docletOptions.baseDir().isPresent()) { - opts.baseDir(docletOptions.baseDir().get()); - } - templates.ifPresent(outputTemplates -> opts.templateDir(outputTemplates.templateDir().toFile())); - opts.attributes(buildAttributes(docletOptions, errorReporter)); - if (docletOptions.requires().size() > 0) { - RubyExtensionRegistry rubyExtensionRegistry = asciidoctor.rubyExtensionRegistry(); - for (String require : docletOptions.requires()) { - rubyExtensionRegistry.requireLibrary(require); - } - } - return opts.get(); - } - - private Attributes buildAttributes(DocletOptions docletOptions, Reporter errorReporter) { - return defaultAttributes() - .attributes(new AttributesLoader(asciidoctor, docletOptions, errorReporter).load()) - .get(); - } - /** * Converts a generic document (class, field, method, etc.). * @@ -132,12 +77,6 @@ String convert(String doc) { return buffer.toString(); } - void cleanup() throws IOException { - if (templates.isPresent()) { - templates.get().delete(); - } - } - /** * Renders a document tag in the standard way. * @@ -181,21 +120,17 @@ private String convert(String input, boolean inline) { if (input.trim().isEmpty()) { return ""; } + Options options = new AsciidoctorOptionsFactory(asciidoctor, reporter) + .create(docletOptions, templates); // Setting doctype to null results in an NPE from asciidoctor. // the default value from the command line is "article". // https://docs.asciidoctor.org/asciidoctor/latest/cli/man1/asciidoctor/#options - // In general, in order to respect original doctype, we should do the following. - // options.setDocType(inline ? - // INLINE_DOCTYPE : - // options.map().containsKey(Options.DOCTYPE) ? - // (String)options.map().get(Options.DOCTYPE) : - // "article"); - // However, this fix breaks AsciidoctorConverterTest#testParameterWithoutTypeTag. - // For now, I simply set it to "article", always. options.setDocType(inline ? - INLINE_DOCTYPE : - "article"); // upstream sets this to "". - + INLINE_DOCTYPE : + options.map().containsKey(Options.DOCTYPE) ? + (String) options.map().get(Options.DOCTYPE) : + "article"); + return asciidoctor.convert(cleanJavadocInput(input), options); } diff --git a/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorFilteredEnvironment.java b/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorFilteredEnvironment.java index 7adbbb8..150de16 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorFilteredEnvironment.java +++ b/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorFilteredEnvironment.java @@ -21,7 +21,6 @@ import javax.tools.JavaFileManager; import javax.tools.StandardJavaFileManager; -import java.io.IOException; /** * An operating environment defined for AsciiDoclet. @@ -30,13 +29,11 @@ public class AsciidoctorFilteredEnvironment extends DocEnvImpl implements DocletEnvironment, AutoCloseable { - private final AsciidoctorConverter converter; private final StandardJavaFileManager fileManager; private final AsciiDocTrees asciiDocTrees; AsciidoctorFilteredEnvironment(DocletEnvironment environment, AsciidoctorConverter converter) { super(((DocEnvImpl) environment).toolEnv, ((DocEnvImpl) environment).etable); - this.converter = converter; this.fileManager = new AsciidoctorFileManager(converter, (StandardJavaFileManager) environment.getJavaFileManager()); this.asciiDocTrees = new AsciiDocTrees(converter, fileManager, environment.getDocTrees()); } @@ -52,7 +49,6 @@ public DocTrees getDocTrees() { } @Override - public void close() throws IOException { - converter.cleanup(); + public void close() { } } diff --git a/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorOptionsFactory.java b/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorOptionsFactory.java new file mode 100644 index 0000000..9137153 --- /dev/null +++ b/src/main/java/org/asciidoctor/asciidoclet/AsciidoctorOptionsFactory.java @@ -0,0 +1,70 @@ +package org.asciidoctor.asciidoclet; + +import jdk.javadoc.doclet.Reporter; +import org.asciidoctor.Asciidoctor; +import org.asciidoctor.Attributes; +import org.asciidoctor.AttributesBuilder; +import org.asciidoctor.Options; +import org.asciidoctor.OptionsBuilder; +import org.asciidoctor.SafeMode; +import org.asciidoctor.extension.RubyExtensionRegistry; + +class AsciidoctorOptionsFactory { + + private static final String DEFAULT_BACKEND = "html5"; + + private final Asciidoctor asciidoctor; + private final Reporter reporter; + + AsciidoctorOptionsFactory(Asciidoctor asciidoctor, Reporter reporter) { + this.asciidoctor = asciidoctor; + this.reporter = reporter; + } + + Options create(DocletOptions docletOptions, OutputTemplates templates) { + final OptionsBuilder opts = defaultOptions(); + if (docletOptions.baseDir().isPresent()) { + opts.baseDir(docletOptions.baseDir().get()); + } + if (templates != null) { + opts.templateDir(templates.templateDir().toFile()); + } + + opts.attributes(buildAttributes(docletOptions)); + if (docletOptions.requires().size() > 0) { + RubyExtensionRegistry rubyExtensionRegistry = asciidoctor.rubyExtensionRegistry(); + for (String require : docletOptions.requires()) { + rubyExtensionRegistry.requireLibrary(require); + } + } + return opts.get(); + } + + private Attributes buildAttributes(DocletOptions docletOptions) { + return defaultAttributes() + .attributes(new AttributesLoader(asciidoctor, docletOptions, reporter).load()) + .get(); + } + + private static OptionsBuilder defaultOptions() { + return Options.builder() + .safe(SafeMode.SAFE) + .backend(DEFAULT_BACKEND); + } + + private static AttributesBuilder defaultAttributes() { + return org.asciidoctor.Attributes.builder() + .attribute("at", "@") + .attribute("slash", "/") + .attribute("icons", null) + .attribute("idprefix", "") + .attribute("idseparator", "-") + .attribute("javadoc", "") + .attribute("showtitle", true) + .attribute("source-highlighter", "coderay") + .attribute("coderay-css", "class") + .attribute("env-asciidoclet") + .attribute("env", "asciidoclet"); + } + +} diff --git a/src/main/java/org/asciidoctor/asciidoclet/AttributesLoader.java b/src/main/java/org/asciidoctor/asciidoclet/AttributesLoader.java index 8f5ec10..5be9358 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/AttributesLoader.java +++ b/src/main/java/org/asciidoctor/asciidoclet/AttributesLoader.java @@ -21,15 +21,11 @@ import org.asciidoctor.Options; import org.asciidoctor.OptionsBuilder; import org.asciidoctor.SafeMode; -import org.asciidoctor.jruby.internal.IOUtils; import javax.tools.Diagnostic; import java.io.File; -import java.io.IOException; import java.io.Reader; -import java.io.StringReader; import java.nio.file.Files; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -41,12 +37,12 @@ class AttributesLoader { private final Asciidoctor asciidoctor; private final DocletOptions docletOptions; - private final Reporter errorReporter; + private final Reporter reporter; - AttributesLoader(Asciidoctor asciidoctor, DocletOptions docletOptions, Reporter errorReporter) { + AttributesLoader(Asciidoctor asciidoctor, DocletOptions docletOptions, Reporter reporter) { this.asciidoctor = asciidoctor; this.docletOptions = docletOptions; - this.errorReporter = errorReporter; + this.reporter = reporter; } Map load() { @@ -80,7 +76,7 @@ private Map parseAttributesFile(Optional attrsFile, Map parseAttributes(Reader in, Map exist options.baseDir(docletOptions.baseDir().get()); } - final String content = read(in); - final Map parsed = asciidoctor.load(content, options.build()).getAttributes(); - return parsed; + return asciidoctor.load(read(in), options.build()).getAttributes(); } public static String read(Reader reader) { - try (Scanner scanner = new Scanner(reader).useDelimiter("\\A")){ + try (Scanner scanner = new Scanner(reader).useDelimiter("\\A")) { return scanner.next(); } } diff --git a/src/main/java/org/asciidoctor/asciidoclet/DocletOptions.java b/src/main/java/org/asciidoctor/asciidoclet/DocletOptions.java index 85d1601..b6c4f26 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/DocletOptions.java +++ b/src/main/java/org/asciidoctor/asciidoclet/DocletOptions.java @@ -89,7 +89,7 @@ private Stream splitTrimStream(List list) { .filter(s -> !s.isEmpty()); } - void validateOptions() { + void validate() { if (baseDir().isEmpty()) { printWarning(AsciidocletOptions.BASEDIR + " must be present for includes or file reference features to work properly"); } diff --git a/src/main/java/org/asciidoctor/asciidoclet/OutputTemplates.java b/src/main/java/org/asciidoctor/asciidoclet/OutputTemplates.java index 4f5d85a..8441e7a 100644 --- a/src/main/java/org/asciidoctor/asciidoclet/OutputTemplates.java +++ b/src/main/java/org/asciidoctor/asciidoclet/OutputTemplates.java @@ -24,7 +24,6 @@ import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Optional; /** * Sets up a temporary directory containing output templates for use by Asciidoctor. @@ -39,32 +38,32 @@ private OutputTemplates(Path templateDir) { this.templateDir = templateDir; } - static Optional create(Reporter errorReporter) { - Path dir = prepareTemplateDir(errorReporter); - return Optional.ofNullable(dir).map(OutputTemplates::new); + static OutputTemplates create(Reporter reporter) { + final Path dir = prepareTemplateDir(reporter); + return dir != null ? new OutputTemplates(dir) : null; } Path templateDir() { return templateDir; } - void delete() throws IOException { - for (String templateName : TEMPLATE_NAMES) { - Files.deleteIfExists(templateDir.resolve(templateName)); - } - Files.delete(templateDir); - } - - private static Path prepareTemplateDir(Reporter errorReporter) { + /** + * Creates and returns a directory in OS's temps path holding Asciidoctor + * templates during conversion. + * + * @param reporter doclet {@link Reporter}. + * @return Path to templates, or null if it could not be created. + */ + private static Path prepareTemplateDir(Reporter reporter) { // copy our template resources to the templateDir so Asciidoctor can use them. try { - Path templateDir = Files.createTempDirectory("asciidoclet"); + final Path templateDir = Files.createTempDirectory("asciidoclet"); for (String templateName : TEMPLATE_NAMES) { prepareTemplate(templateDir, templateName); } return templateDir; } catch (IOException e) { - errorReporter.print(Diagnostic.Kind.WARNING, "Failed to prepare templates: " + e.getLocalizedMessage()); + reporter.print(Diagnostic.Kind.WARNING, "Failed to prepare templates: " + e.getLocalizedMessage()); return null; } } @@ -80,14 +79,15 @@ private static Path prepareTemplateDir(Reporter errorReporter) { */ private static void prepareTemplate(Path templateDir, String template) throws IOException { final String templatePath = "templates/" + template; - InputStream input = ModuleLayer.boot().findModule("asciidoclet") + final InputStream input = ModuleLayer.boot() + .findModule("asciidoclet") .map(module -> getResourceAsStream(module, templatePath)) .orElseGet(() -> OutputTemplates.class.getClassLoader().getResourceAsStream(templatePath)); if (input == null) { throw new IOException("Could not find template " + template); } - Path path = templateDir.resolve(template); + final Path path = templateDir.resolve(template); try (OutputStream output = Files.newOutputStream(path)) { input.transferTo(output); } finally { diff --git a/src/test/java/org/asciidoctor/asciidoclet/AsciidoctorOptionsFactoryTest.java b/src/test/java/org/asciidoctor/asciidoclet/AsciidoctorOptionsFactoryTest.java new file mode 100644 index 0000000..cdfdbc7 --- /dev/null +++ b/src/test/java/org/asciidoctor/asciidoclet/AsciidoctorOptionsFactoryTest.java @@ -0,0 +1,134 @@ +package org.asciidoctor.asciidoclet; + +import org.asciidoctor.Asciidoctor; +import org.asciidoctor.Options; +import org.asciidoctor.SafeMode; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +import java.io.File; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +class AsciidoctorOptionsFactoryTest { + + private Asciidoctor asciidoctor = Asciidoctor.Factory.create(); + private StubReporter reporter = new StubReporter(); + + private AsciidoctorOptionsFactory optionsFactory; + + @BeforeEach + void setup() { + optionsFactory = new AsciidoctorOptionsFactory(asciidoctor, reporter); + } + + @Test + void createsDefaultOptions() { + DocletOptions docletOptions = new DocletOptions(reporter); + + Options options = optionsFactory.create(docletOptions, null); + + Map optionsMap = options.map(); + assertContainsDefaultOptions(optionsMap, 3); + + Map attributes = (Map) optionsMap.get("attributes"); + assertContainsDefaultAttributes(attributes, 11); + } + + @Test + void withCustomAttributes() { + DocletOptions docletOptions = Mockito.mock(DocletOptions.class); + Mockito.when(docletOptions.attributes()).thenReturn(List.of("my-attribute=my-value", "another=42")); + + Options options = optionsFactory.create(docletOptions, null); + + Map optionsMap = options.map(); + assertContainsDefaultOptions(optionsMap, 3); + assertThat(optionsMap).hasSize(3); + + Map attributes = (Map) optionsMap.get("attributes"); + assertContainsDefaultAttributes(attributes, 13); + assertThat(attributes) + .containsEntry("my-attribute", "my-value") + .containsEntry("another", "42"); + } + + @Test + void withCustomBaseDir() { + DocletOptions docletOptions = Mockito.mock(DocletOptions.class); + File baseDir = new File("some/path"); + Mockito.when(docletOptions.baseDir()).thenReturn(Optional.of(baseDir)); + + Options options = optionsFactory.create(docletOptions, null); + + Map optionsMap = options.map(); + assertContainsDefaultOptions(optionsMap, 4); + assertThat(optionsMap) + .containsEntry("base_dir", baseDir.getAbsolutePath()); + + Map attributes = (Map) optionsMap.get("attributes"); + assertContainsDefaultAttributes(attributes, 11); + } + + @Test + void withTemplateDir() { + DocletOptions docletOptions = new DocletOptions(reporter); + OutputTemplates outputTemplates = OutputTemplates.create(reporter); + assertThat(outputTemplates.templateDir()).isNotEmptyDirectory(); + + Options options = optionsFactory.create(docletOptions, outputTemplates); + + Map optionsMap = options.map(); + assertContainsDefaultOptions(optionsMap, 4); + assertThat(optionsMap) + .containsEntry("template_dirs", List.of(outputTemplates.templateDir().toString())); + + Map attributes = (Map) optionsMap.get("attributes"); + assertContainsDefaultAttributes(attributes, 11); + } + + @Test + void withRequires() { + DocletOptions mock = Mockito.mock(DocletOptions.class); + // Use gems available in the classpath to avoid errors + Mockito.when(mock.requires()).thenReturn(List.of("asciidoctor", "coderay")); + + Options options = optionsFactory.create(mock, null); + + Map optionsMap = options.map(); + assertContainsDefaultOptions(optionsMap, 3); + assertThat(optionsMap).hasSize(3); + + Map attributes = (Map) optionsMap.get("attributes"); + assertContainsDefaultAttributes(attributes, 11); + } + + private static void assertContainsDefaultOptions(Map options, int size) { + assertThat(options) + .containsEntry("backend", "html5") + .containsEntry("safe", SafeMode.SAFE.getLevel()) + .containsKey("attributes"); + assertThat(options).hasSize(size); + } + + private static void assertContainsDefaultAttributes(Map attributes, int size) { + assertThat(attributes) + .containsEntry("at", "@") + .containsEntry("slash", "/") + .containsEntry("icons", null) + .containsEntry("idprefix", "") + .containsEntry("idseparator", "-") + .containsEntry("javadoc", "") + .containsEntry("showtitle", true) + .containsEntry("source-highlighter", "coderay") + .containsEntry("coderay-css", "class") + .containsEntry("env-asciidoclet", "") + .containsEntry("env", "asciidoclet"); + assertThat(attributes).hasSize(size); + } + +} diff --git a/src/test/java/org/asciidoctor/asciidoclet/DocletOptionsTest.java b/src/test/java/org/asciidoctor/asciidoclet/DocletOptionsTest.java index e521e74..c3ec080 100644 --- a/src/test/java/org/asciidoctor/asciidoclet/DocletOptionsTest.java +++ b/src/test/java/org/asciidoctor/asciidoclet/DocletOptionsTest.java @@ -44,7 +44,7 @@ void testGetBaseDir() { DocletOptions options = new DocletOptions(reporter); options.collect(AsciidocletOptions.BASEDIR, List.of("test")); - options.validateOptions(); + options.validate(); assertThat(options.baseDir().get().getName()).isEqualTo("test"); } @@ -56,7 +56,7 @@ void testAttributes() { DocletOptions options = new DocletOptions(reporter); options.collect(AsciidocletOptions.ATTRIBUTE, List.of(attribute)); - options.validateOptions(); + options.validate(); assertThat(options.attributes()).hasSize(1); assertThat(options.attributes()).first().isEqualTo(attribute); @@ -69,7 +69,7 @@ void testAttributesLong() { DocletOptions options = new DocletOptions(reporter); options.collect(AsciidocletOptions.ATTRIBUTE_LONG, List.of(attribute)); - options.validateOptions(); + options.validate(); assertThat(options.attributes()).hasSize(1); assertThat(options.attributes()).first().isEqualTo(attribute); @@ -87,7 +87,7 @@ void testDefaultEncoding() { void testEncoding(String encoding, Charset expected) { DocletOptions options = new DocletOptions(reporter); options.collect(AsciidocletOptions.ENCODING, List.of(encoding)); - options.validateOptions(); + options.validate(); assertThat(options.encoding()).isEqualTo(expected); } @@ -105,7 +105,7 @@ void testStylesheetFile() { DocletOptions options = new DocletOptions(reporter); options.collect(AsciidocletOptions.STYLESHEET, List.of("foo.css")); - options.validateOptions(); + options.validate(); assertThat(options.stylesheet().get().getName()).isEqualTo("foo.css"); } @@ -115,14 +115,14 @@ void testRequires() { DocletOptions options = new DocletOptions(reporter); options.collect(AsciidocletOptions.REQUIRE, List.of("foo", "bar")); - options.validateOptions(); + options.validate(); assertThat(options.requires()).containsExactlyInAnyOrder("foo", "bar"); options = new DocletOptions(reporter); options.collect(AsciidocletOptions.REQUIRE, List.of("a", "diagrams/awesome")); options.collect(AsciidocletOptions.REQUIRE_LONG, List.of("bar")); options.collect(AsciidocletOptions.REQUIRE_LONG, List.of("baz,noddy")); - options.validateOptions(); + options.validate(); assertThat(options.requires()).containsExactlyInAnyOrder("a", "diagrams/awesome", "bar", "baz", "noddy"); } }