This is an automated email from the ASF dual-hosted git repository. claude pushed a commit to branch feature/restructure in repository https://gitbox.apache.org/repos/asf/creadur-rat.git
commit 6e3b2365dd1940e6f181f64d293f92b51028dfb0 Author: Claude Warren <[email protected]> AuthorDate: Sun Jan 18 17:48:48 2026 +0000 updated cli tests --- .../main/java/org/apache/rat/cli/CLIOption.java | 21 ++---------- .../org/apache/rat/cli/CLIOptionCollection.java | 38 +++++++++++++++++++++- .../main/java/org/apache/rat/cli/CLIProvider.java | 5 ++- .../src/main/java/org/apache/rat/cli/Help.java | 6 ++-- .../src/main/java/org/apache/rat/cli/Report.java | 21 +++++++----- .../src/test/java/org/apache/rat/cli/HelpTest.java | 10 +++--- .../java/org/apache/rat/cli/ReportOptionsTest.java | 11 +++---- .../test/java/org/apache/rat/cli/ReportTest.java | 17 ++++++---- .../src/test/java/org/apache/rat/ReporterTest.java | 1 + .../testhelpers/data/OptionTestDataProvider.java | 4 ++- .../testhelpers/data/ReportTestDataProvider.java | 3 +- pom.xml | 8 +++-- spotbugs-ignore.xml | 1 + 13 files changed, 89 insertions(+), 57 deletions(-) diff --git a/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOption.java b/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOption.java index b59f1dbf..9e420a76 100644 --- a/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOption.java +++ b/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOption.java @@ -19,7 +19,6 @@ package org.apache.rat.cli; import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; import org.apache.commons.lang3.StringUtils; import org.apache.rat.ui.AbstractOption; import org.apache.rat.ui.ArgumentTracker; @@ -27,19 +26,10 @@ import org.apache.rat.ui.ArgumentTracker; /** * The CLI option definition. */ -public class CLIOption extends AbstractOption<CLIOption> { +public final class CLIOption extends AbstractOption<CLIOption> { - /** The Help option */ - static final Option HELP = new Option("?", "help", false, "Print help for the RAT command line interface and exit."); - /** The additional options */ - static final Options ADDITIONAL_OPTIONS = new Options(); - - static { - ADDITIONAL_OPTIONS.addOption(HELP); - } - - public CLIOption(final Option option) { - super(option, ArgumentTracker.extractKey(option)); + public CLIOption(final CLIOptionCollection collection, final Option option) { + super(collection, option, ArgumentTracker.extractKey(option)); } @Override @@ -61,11 +51,6 @@ public class CLIOption extends AbstractOption<CLIOption> { return ArgumentTracker.extractKey(option); } - @Override - public Options getAdditionalOptions() { - return ADDITIONAL_OPTIONS; - } - @Override public String getExample() { StringBuilder sb = new StringBuilder("-"); diff --git a/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOptionCollection.java b/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOptionCollection.java index b2e14c60..4c8b1160 100644 --- a/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOptionCollection.java +++ b/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIOptionCollection.java @@ -1,4 +1,40 @@ package org.apache.rat.cli; -public class CLIOptionCollection { +import java.util.Collections; +import java.util.Map; +import java.util.function.Function; + +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.rat.ui.AbstractOptionCollection; + +public class CLIOptionCollection extends AbstractOptionCollection<CLIOption> { + /** The Help option */ + static final Option HELP = new Option("?", "help", false, "Print help for the RAT command line interface and exit."); + /** The additional options */ + static final Options ADDITIONAL_OPTIONS = new Options(); + + static { + ADDITIONAL_OPTIONS.addOption(HELP); + } + + CLIOptionCollection() { + super(Collections.emptyList(), ADDITIONAL_OPTIONS); + } + + @Override + public Function<Option, CLIOption> getMapper() { + return option -> new CLIOption(this, option); + } + + @Override + protected Map<Option, String> defaultOverrides() { + return Collections.emptyMap(); + } + + + @Override + public void addOverride(final Option option, final String value) { + throw new UnsupportedOperationException(); + } } diff --git a/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIProvider.java b/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIProvider.java index 298ccc76..f82f6acb 100644 --- a/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIProvider.java +++ b/apache-rat-cli/src/main/java/org/apache/rat/cli/CLIProvider.java @@ -18,7 +18,6 @@ */ package org.apache.rat.cli; -import org.apache.rat.ui.OptionFactory; import org.apache.rat.ui.UI; import org.apache.rat.ui.spi.UIProvider; @@ -36,8 +35,8 @@ public class CLIProvider implements UIProvider { } @Override - public OptionFactory.Config<CLIOption> getFactoryConfig() { - return new OptionFactory.Config<>(null, CLIOption::new, CLIOption.ADDITIONAL_OPTIONS); + public CLIOptionCollection getOptionCollection() { + return new CLIOptionCollection(); } } } diff --git a/apache-rat-cli/src/main/java/org/apache/rat/cli/Help.java b/apache-rat-cli/src/main/java/org/apache/rat/cli/Help.java index 00da957f..1c3735f9 100644 --- a/apache-rat-cli/src/main/java/org/apache/rat/cli/Help.java +++ b/apache-rat-cli/src/main/java/org/apache/rat/cli/Help.java @@ -24,7 +24,7 @@ import java.util.Collections; import java.util.List; import org.apache.commons.cli.Options; -import org.apache.rat.OptionCollection; +import org.apache.rat.OptionCollectionParser; import org.apache.rat.config.exclusion.StandardCollection; import org.apache.rat.help.AbstractHelp; @@ -98,8 +98,8 @@ public class Help extends AbstractHelp { public String printArgumentTypes() { String argumentPadding = createPadding(helpFormatter.getLeftPadding() + HELP_PADDING); - for (OptionCollection.ArgumentType argType : OptionCollection.ArgumentType.values()) { - if (argType != OptionCollection.ArgumentType.NONE) { + for (OptionCollectionParser.ArgumentType argType : OptionCollectionParser.ArgumentType.values()) { + if (argType != OptionCollectionParser.ArgumentType.NONE) { writer.format("%n<%s>%n", argType.getDisplayName()); helpFormatter.printWrapped(writer, helpFormatter.getWidth(), helpFormatter.getLeftPadding() + HELP_PADDING + HELP_PADDING, argumentPadding + argType.description().get()); diff --git a/apache-rat-cli/src/main/java/org/apache/rat/cli/Report.java b/apache-rat-cli/src/main/java/org/apache/rat/cli/Report.java index 3a7e5609..2a8fed9e 100644 --- a/apache-rat-cli/src/main/java/org/apache/rat/cli/Report.java +++ b/apache-rat-cli/src/main/java/org/apache/rat/cli/Report.java @@ -23,8 +23,9 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import org.apache.commons.cli.Options; import org.apache.commons.io.function.IOSupplier; -import org.apache.rat.OptionCollection; +import org.apache.rat.OptionCollectionParser; import org.apache.rat.ReportConfiguration; import org.apache.rat.Reporter; import org.apache.rat.VersionInfo; @@ -49,6 +50,7 @@ public final class Report { */ public static void main(final String[] args) throws Exception { VersionInfo versionInfo = new VersionInfo(Report.class); + CLIOptionCollection optionCollection = new CLIOptionCollection(); DefaultLog.getInstance().info(String.format("%s %s on %s %s (%s)", versionInfo.getTitle(), versionInfo.getVersion(), versionInfo.getSpecTitle(), versionInfo.getSpecVersion(), versionInfo.getSpecVendor())); @@ -59,7 +61,7 @@ public final class Report { System.exit(0); } - Reporter.Output result = generateReport(new File("."), args); + Reporter.Output result = generateReport(optionCollection, new File("."), args); if (result != null) { result.writeSummary(DefaultLog.getInstance().asWriter()); @@ -76,10 +78,10 @@ public final class Report { * Prints the usage message on the specified output stream. * @param out The OutputStream supplier */ - private static void printUsage(final IOSupplier<OutputStream> out) { + private static void printUsage(final Options options, final IOSupplier<OutputStream> out) { try (OutputStream stream = out.get(); PrintWriter writer = new PrintWriter(stream)) { - new Help(writer).printUsage(OptionCollection.buildOptions(CLIOption.ADDITIONAL_OPTIONS)); + new Help(writer).printUsage(options); } catch (IOException e) { throw new RuntimeException(e); } @@ -92,17 +94,18 @@ public final class Report { * @return The Client output. * @throws Exception on error. */ - static Reporter.Output generateReport(final File workingDirectory, final String[] args) throws Exception { + static Reporter.Output generateReport(final CLIOptionCollection optionCollection, final File workingDirectory, final String[] args) throws Exception { Reporter.Output output = null; - ArgumentContext argumentContext = OptionCollection.parseCommands(workingDirectory, args, CLIOption.ADDITIONAL_OPTIONS); + OptionCollectionParser optionParser = new OptionCollectionParser(optionCollection); + ArgumentContext argumentContext = optionParser.parseCommands(workingDirectory, args); ReportConfiguration configuration = argumentContext.getConfiguration(); if (configuration != null) { - if (argumentContext.getCommandLine().hasOption(CLIOption.HELP)) { - printUsage(argumentContext.getConfiguration().getOutput()); + if (argumentContext.getCommandLine().hasOption(CLIOptionCollection.HELP)) { + printUsage(optionCollection.getOptions(), argumentContext.getConfiguration().getOutput()); } else if (!configuration.hasSource()) { String msg = "No directories or files specified for scanning. Did you forget to close a multi-argument option?"; DefaultLog.getInstance().error(msg); - printUsage(argumentContext.getConfiguration().getOutput()); + printUsage(optionCollection.getOptions(), argumentContext.getConfiguration().getOutput()); } else { configuration.validate(); Reporter reporter = new Reporter(configuration); diff --git a/apache-rat-cli/src/test/java/org/apache/rat/cli/HelpTest.java b/apache-rat-cli/src/test/java/org/apache/rat/cli/HelpTest.java index 7c90a381..7e111a22 100644 --- a/apache-rat-cli/src/test/java/org/apache/rat/cli/HelpTest.java +++ b/apache-rat-cli/src/test/java/org/apache/rat/cli/HelpTest.java @@ -24,7 +24,7 @@ import java.util.Set; import java.util.stream.Collectors; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; -import org.apache.rat.OptionCollection; +import org.apache.rat.OptionCollectionParser; import org.apache.rat.testhelpers.TextUtils; import org.junit.jupiter.api.Test; @@ -33,9 +33,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue; public class HelpTest { + private CLIOptionCollection cliCollection = new CLIOptionCollection(); + @Test public void verifyAllOptionsListed() { - Options opts = OptionCollection.buildOptions(CLIOption.ADDITIONAL_OPTIONS); + Options opts = cliCollection.getOptions(); StringWriter out = new StringWriter(); new Help(out).printUsage(opts); @@ -55,8 +57,8 @@ public class HelpTest { @Test public void verifyArgumentsListed() { - Options opts = OptionCollection.buildOptions(CLIOption.ADDITIONAL_OPTIONS); - Set<String> argTypes = Arrays.stream(OptionCollection.ArgumentType.values()).map(OptionCollection.ArgumentType::getDisplayName).collect(Collectors.toSet()); + Options opts = cliCollection.getOptions(); + Set<String> argTypes = Arrays.stream(OptionCollectionParser.ArgumentType.values()).map(OptionCollectionParser.ArgumentType::getDisplayName).collect(Collectors.toSet()); StringWriter out = new StringWriter(); new Help(out).printUsage(opts); String result = out.toString(); diff --git a/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportOptionsTest.java b/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportOptionsTest.java index f445cd78..9c88510a 100644 --- a/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportOptionsTest.java +++ b/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportOptionsTest.java @@ -22,8 +22,7 @@ import java.nio.file.Path; import java.util.stream.Stream; import org.apache.rat.Reporter; -import org.apache.rat.api.RatException; -import org.apache.rat.testhelpers.FileUtils; +import org.apache.rat.utils.FileUtils; import org.apache.rat.testhelpers.data.OptionTestDataProvider; import org.apache.rat.testhelpers.data.TestData; @@ -37,7 +36,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -59,7 +57,7 @@ public class ReportOptionsTest { static Stream<Arguments> getTestData() { - return optionTestDataProvider.getUITestMap().values().stream().map(testData -> + return optionTestDataProvider.getUITestMap(new CLIOptionCollection()).values().stream().map(testData -> Arguments.of(testData.getTestName(), testData)); // TODO add help test } @@ -72,13 +70,14 @@ public class ReportOptionsTest { @MethodSource("getTestData") void testOptionsUpdateConfig(String name, TestData test) throws Exception { Path basePath = testPath.resolve(test.getTestName()); + CLIOptionCollection optionCollection = new CLIOptionCollection(); FileUtils.mkDir(basePath.toFile()); test.setupFiles(basePath); if (test.getExpectedException() != null) { - assertThatThrownBy(() -> Report.generateReport(basePath.toFile(), test.getCommandLine(basePath.toString())) + assertThatThrownBy(() -> Report.generateReport(optionCollection, basePath.toFile(), test.getCommandLine(basePath.toString())) ).hasMessageContaining(test.getExpectedException().getMessage()); } else { - Reporter.Output result = Report.generateReport(basePath.toFile(), test.getCommandLine(basePath.toString())); + Reporter.Output result = Report.generateReport(optionCollection, basePath.toFile(), test.getCommandLine(basePath.toString())); ValidatorData data = new ValidatorData(result, basePath.toString()); test.getValidator().accept(data); } diff --git a/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportTest.java b/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportTest.java index 891fb46e..f22051d7 100644 --- a/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportTest.java +++ b/apache-rat-cli/src/test/java/org/apache/rat/cli/ReportTest.java @@ -25,10 +25,10 @@ import java.util.Map; import java.util.stream.Stream; import org.apache.commons.cli.Option; import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.rat.OptionCollection; +import org.apache.rat.OptionCollectionParser; import org.apache.rat.Reporter; import org.apache.rat.commandline.Arg; -import org.apache.rat.testhelpers.FileUtils; +import org.apache.rat.utils.FileUtils; import org.apache.rat.testhelpers.TextUtils; import org.apache.rat.testhelpers.data.DataUtils; import org.apache.rat.testhelpers.data.ReportTestDataProvider; @@ -53,6 +53,8 @@ public class ReportTest { private static final ReportTestDataProvider reportTestDataProvider = new ReportTestDataProvider(); + private static final CLIOptionCollection cliCollection = new CLIOptionCollection(); + /** * This method is a known workaround for * {@link <a href="https://github.com/junit-team/junit5/issues/2811">junit 5 issue #2811</a> }. @@ -65,14 +67,14 @@ public class ReportTest { static Stream<Arguments> getTestData() { - Map<String, TestData> tests = reportTestDataProvider.getOptionTestMap(Collections.emptyList()); - TestData test = new TestData("", Arrays.asList(ImmutablePair.of(CLIOption.HELP, new String[]{}), + Map<String, TestData> tests = reportTestDataProvider.getOptionTestMap(cliCollection); + TestData test = new TestData("", Arrays.asList(ImmutablePair.of(CLIOptionCollection.HELP, new String[]{}), ImmutablePair.of(Arg.OUTPUT_FILE.option(), new String[]{"helpText"})), DataUtils.NO_SETUP, validatorData -> { try { String result = TextUtils.readFile(validatorData.getBaseDir().resolve("helpText").toFile()); - for (Option option : OptionCollection.buildOptions(CLIOption.ADDITIONAL_OPTIONS).getOptions()) { + for (Option option : cliCollection.getOptions().getOptions()) { if (option.getOpt() != null) { TextUtils.assertContains("-" + option.getOpt() + (option.getLongOpt() == null ? " " : ","), result); } @@ -99,14 +101,15 @@ public class ReportTest { @ParameterizedTest( name = "{index} {0}") @MethodSource("getTestData") void testOptionsUpdateConfig(String name, TestData test) throws Exception { + CLIOptionCollection optionCollection = new CLIOptionCollection(); Path basePath = testPath.resolve(test.getTestName()); FileUtils.mkDir(basePath.toFile()); test.setupFiles(basePath); if (test.getExpectedException() != null) { - assertThatThrownBy(() -> Report.generateReport(basePath.toFile(), test.getCommandLine(basePath.toString())) + assertThatThrownBy(() -> Report.generateReport(optionCollection, basePath.toFile(), test.getCommandLine(basePath.toString())) ).hasMessageContaining(test.getExpectedException().getMessage()); } else { - Reporter.Output result = Report.generateReport(basePath.toFile(), test.getCommandLine(basePath.toString())); + Reporter.Output result = Report.generateReport(optionCollection, basePath.toFile(), test.getCommandLine(basePath.toString())); ValidatorData data = new ValidatorData(result, basePath.toString()); test.getValidator().accept(data); } diff --git a/apache-rat-core/src/test/java/org/apache/rat/ReporterTest.java b/apache-rat-core/src/test/java/org/apache/rat/ReporterTest.java index d1da47cb..e057c81c 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/ReporterTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/ReporterTest.java @@ -534,6 +534,7 @@ public class ReporterTest { Reporter.Output output = ctxt.getConfiguration() != null ? new Reporter(ctxt.getConfiguration()).execute() : Reporter.Output.builder().build(); ValidatorData data = new ValidatorData(output, basePath.toString()); + data.getOutput().format(data.getConfiguration()); test.getValidator().accept(data); } } diff --git a/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/OptionTestDataProvider.java b/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/OptionTestDataProvider.java index af44bab7..8c0144dd 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/OptionTestDataProvider.java +++ b/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/OptionTestDataProvider.java @@ -80,7 +80,9 @@ public class OptionTestDataProvider extends AbstractTestDataProvider { public Map<String, TestData> getUITestMap(final AbstractOptionCollection<?> optionCollection) { final ConfigurationException noLicenses = new ConfigurationException("At least one license must be defined"); Map<String, TestData> result = getOptionTestMap(optionCollection); - result.get("configuration-no-defaults").setException(noLicenses); + for (Option option : Arg.CONFIGURATION_NO_DEFAULTS.group().getOptions()) { + result.get(option.getLongOpt()).setException(noLicenses); + } result.get("licenses-approved/withoutDefaults").setException(noLicenses); result.get("licenses-approved-file/withoutDefaults").setException(noLicenses); result.get("license-families-approved/withoutDefaults").setException(noLicenses); diff --git a/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/ReportTestDataProvider.java b/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/ReportTestDataProvider.java index 3249f6c2..bd2e88ae 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/ReportTestDataProvider.java +++ b/apache-rat-core/src/test/java/org/apache/rat/testhelpers/data/ReportTestDataProvider.java @@ -985,11 +985,10 @@ public class ReportTestDataProvider extends AbstractTestDataProvider { File outFile = validatorData.getBaseDir().resolve("outexample").toFile(); try { - validatorData.getOutput().format(validatorData.getConfiguration()); String actualText = TextUtils.readFile(outFile); TextUtils.assertContainsExactly(1, "Apache License 2.0: 1 ", actualText); TextUtils.assertContainsExactly(1, "STANDARD: 1 ", actualText); - } catch (IOException | RatException e) { + } catch (IOException e) { throw new RuntimeException(e); } }) diff --git a/pom.xml b/pom.xml index 54f9cf6b..a597619b 100644 --- a/pom.xml +++ b/pom.xml @@ -503,7 +503,6 @@ agnostic home for software distribution comprehension and audit tools. <!-- we only want to see our own problems in all subpackages --> <onlyAnalyze>org.apache.rat.-</onlyAnalyze> <!-- in order to have a global spotbugs configuration an exclusion file needs to exist in all submodules --> - <excludeFilterFile>${project.basedir}/spotbugs-ignore.xml</excludeFilterFile> <plugins> <plugin> <groupId>com.h3xstream.findsecbugs</groupId> @@ -713,6 +712,9 @@ agnostic home for software distribution comprehension and audit tools. <plugin> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-maven-plugin</artifactId> + <configuration> + <excludeFilterFile>spotbugs-ignore.xml</excludeFilterFile> + </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> @@ -988,8 +990,8 @@ agnostic home for software distribution comprehension and audit tools. <module>apache-rat-core-tests</module> <module>apache-rat-cli</module> <module>apache-rat-maven-parent</module> - <module>apache-rat-ant-parent</module> - <module>apache-rat</module> +<!-- <module>apache-rat-ant-parent</module>--> +<!-- <module>apache-rat</module>--> </modules> <licenses> <license> diff --git a/spotbugs-ignore.xml b/spotbugs-ignore.xml index 39e672f5..7e66dc7a 100644 --- a/spotbugs-ignore.xml +++ b/spotbugs-ignore.xml @@ -17,4 +17,5 @@ --> <FindBugsFilter> + </FindBugsFilter>
