From c69157d3a91140cffcf76bf4ff6b3e4ecd393e17 Mon Sep 17 00:00:00 2001 From: Claude Warren Date: Mon, 15 Jan 2024 07:40:42 +0100 Subject: [PATCH 1/2] Added gating if statements before regex in SPDX and Copyright matchers --- .../analysis/matchers/CopyrightMatcher.java | 23 +++++++++++-------- .../analysis/matchers/SPDXMatcherFactory.java | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/CopyrightMatcher.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/CopyrightMatcher.java index 43e960e9c..a03798b4d 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/CopyrightMatcher.java +++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/CopyrightMatcher.java @@ -106,16 +106,19 @@ public CopyrightMatcher(String id, String start, String stop, String owner) { @Override protected boolean doMatch(String line) { - Matcher matcher = COPYRIGHT_PATTERN.matcher(line); - if (matcher.find()) { - String buffer = line.substring(matcher.end()); - matcher = dateOwnerPattern.matcher(buffer); - if (matcher.find() && matcher.start() == 0) { - return true; - } - if (ownerDatePattern != null) { - matcher = ownerDatePattern.matcher(buffer); - return matcher.find() && matcher.start() == 0; + String lowerLine = line.toLowerCase(); + if (lowerLine.contains("copyright") || lowerLine.contains("(c)") || line.contains("©")) { + Matcher matcher = COPYRIGHT_PATTERN.matcher(line); + if (matcher.find()) { + String buffer = line.substring(matcher.end()); + matcher = dateOwnerPattern.matcher(buffer); + if (matcher.find() && matcher.start() == 0) { + return true; + } + if (ownerDatePattern != null) { + matcher = ownerDatePattern.matcher(buffer); + return matcher.find() && matcher.start() == 0; + } } } return false; diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java index 8ba5fadc2..e1adbeabc 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java +++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java @@ -96,7 +96,7 @@ private boolean check(String line, Match caller) { // if the line has not been seen yet see if we can extract the SPDX id from the line. // if so then see if that name has been registered. If so then we have a match and set // lastMatch. - if (lastLine == null || !lastLine.equals(line)) { + if ((lastLine == null || !lastLine.equals(line)) && line.contains("SPDX-License-Identifier")) { Matcher matcher = groupSelector.matcher(line); if (matcher.find()) { lastMatch = matchers.get(matcher.group(1)); From 78e58eca8cd2a0295e9e80666f23bca83338740d Mon Sep 17 00:00:00 2001 From: Claude Warren Date: Tue, 16 Jan 2024 17:02:01 +0100 Subject: [PATCH 2/2] Fixed RAT-325 and added some logging --- .../src/main/java/org/apache/rat/Report.java | 13 ++++--- .../org/apache/rat/ReportConfiguration.java | 2 +- .../rat/analysis/DefaultAnalyserFactory.java | 15 +++++--- .../rat/analysis/DocumentHeaderAnalyser.java | 10 ++++-- .../rat/analysis/LicenseCollection.java | 3 +- .../analysis/matchers/SPDXMatcherFactory.java | 7 ++++ .../annotation/AbstractLicenseAppender.java | 14 ++++++-- .../annotation/ApacheV2LicenseAppender.java | 10 +++--- .../java/org/apache/rat/api/MetaData.java | 1 + .../impl/xml/SimpleXmlClaimReporter.java | 1 + .../claim/util/LicenseAddingReport.java | 5 +-- .../rat/report/xml/XmlReportFactory.java | 4 +-- .../java/org/apache/rat/utils/DefaultLog.java | 35 +++++++++++-------- .../main/java/org/apache/rat/utils/Log.java | 31 +++++++++++++--- .../apache/rat/ReportConfigurationTest.java | 1 - .../test/java/org/apache/rat/ReportTest.java | 27 ++++++++------ .../java/org/apache/rat/ReporterTest.java | 6 +++- .../rat/analysis/AnalyserFactoryTest.java | 3 +- .../analysis/matchers/SPDXMatcherTest.java | 11 ++++++ .../rat/annotation/TestLicenseAppender.java | 7 ++-- .../rat/report/xml/XmlReportFactoryTest.java | 2 -- .../apache/rat/report/xml/XmlReportTest.java | 3 +- 22 files changed, 146 insertions(+), 65 deletions(-) diff --git a/apache-rat-core/src/main/java/org/apache/rat/Report.java b/apache-rat-core/src/main/java/org/apache/rat/Report.java index fbb69f2d7..73f516557 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/Report.java +++ b/apache-rat-core/src/main/java/org/apache/rat/Report.java @@ -126,13 +126,12 @@ public class Report { */ public static void main(String[] args) throws Exception { Options opts = buildOptions(); - CommandLine cl; try { cl = new DefaultParser().parse(opts, args); } catch (ParseException e) { - System.err.println(e.getMessage()); - System.err.println("Please use the \"--help\" option to see a list of valid commands and options"); + DefaultLog.INSTANCE.error(e.getMessage()); + DefaultLog.INSTANCE.error("Please use the \"--help\" option to see a list of valid commands and options"); System.exit(1); return; // dummy return (won't be reached) to avoid Eclipse complaint about possible NPE // for "cl" @@ -147,7 +146,7 @@ public static void main(String[] args) throws Exception { printUsage(opts); } else { ReportConfiguration configuration = createConfiguration(args[0], cl); - configuration.validate(System.err::println); + configuration.validate(DefaultLog.INSTANCE::error); boolean dryRun = false; @@ -210,7 +209,7 @@ static ReportConfiguration createConfiguration(String baseDirectory, CommandLine if (cl.hasOption(STYLESHEET_CLI)) { String[] style = cl.getOptionValues(STYLESHEET_CLI); if (style.length != 1) { - System.err.println("Please specify a single stylesheet"); + DefaultLog.INSTANCE.error("Please specify a single stylesheet"); System.exit(1); } configuration.setStyleSheet(() -> Files.newInputStream(Paths.get(style[0]))); @@ -256,10 +255,10 @@ static FilenameFilter parseExclusions(List excludes) { orFilter.addFileFilter(new NameFileFilter(exclusion)); orFilter.addFileFilter(WildcardFileFilter.builder().setWildcards(exclusion).get()); } catch (PatternSyntaxException e) { - System.err.println("Will skip given exclusion '" + exclude + "' due to " + e); + DefaultLog.INSTANCE.error("Will skip given exclusion '" + exclude + "' due to " + e); } } - System.err.println("Ignored " + ignoredLines + " lines in your exclusion files as comments or empty lines."); + DefaultLog.INSTANCE.error("Ignored " + ignoredLines + " lines in your exclusion files as comments or empty lines."); return new NotFileFilter(orFilter); } diff --git a/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java b/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java index 91b78c6f9..572a7f5e5 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java +++ b/apache-rat-core/src/main/java/org/apache/rat/ReportConfiguration.java @@ -263,7 +263,7 @@ public void setStyleReport(boolean styleReport) { * closed consider wrapping it in a {@code NoCloseOutputStream} * * @param out The OutputStream supplier that provides the output stream to write - * the report to. (may be null) + * the report to. A null value will use System.out. * @see NoCloseOutputStream */ public void setOut(IOSupplier out) { diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java index b81055e73..06cbe8d3a 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java +++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/DefaultAnalyserFactory.java @@ -29,6 +29,8 @@ import org.apache.rat.document.impl.guesser.BinaryGuesser; import org.apache.rat.document.impl.guesser.NoteGuesser; import org.apache.rat.license.ILicense; +import org.apache.rat.utils.Log; +import org.apache.rat.utils.Log.Level; /** * Creates default analysers. @@ -40,11 +42,13 @@ public class DefaultAnalyserFactory { * @param licenses The licenses to use in the Analyser. * @return A document analyser that uses the provides licenses. */ - public static IDocumentAnalyser createDefaultAnalyser(Collection licenses) { + public static IDocumentAnalyser createDefaultAnalyser(Log log, Collection licenses) { if (licenses.isEmpty()) { throw new ConfigurationException("At least one license must be defined"); } - return new DefaultAnalyser(new LicenseCollection(licenses)); + log.debug("Licenses in Test"); + licenses.forEach(log::debug); + return new DefaultAnalyser(log, new LicenseCollection(licenses)); } /** @@ -56,13 +60,16 @@ private final static class DefaultAnalyser implements IDocumentAnalyser { * The license to analyze */ private final ILicense license; + /** The log to use */ + private final Log log; /** * Constructs a DocumentAnalyser for the specified license. * @param license The license to analyse */ - public DefaultAnalyser(final ILicense license) { + public DefaultAnalyser(final Log log, final ILicense license) { this.license = license; + this.log = log; } @Override @@ -76,7 +83,7 @@ public void analyse(Document document) throws RatDocumentAnalysisException { documentCategory = MetaData.RAT_DOCUMENT_CATEGORY_DATUM_BINARY; } else { documentCategory = MetaData.RAT_DOCUMENT_CATEGORY_DATUM_STANDARD; - final DocumentHeaderAnalyser headerAnalyser = new DocumentHeaderAnalyser(license); + final DocumentHeaderAnalyser headerAnalyser = new DocumentHeaderAnalyser(log, license); headerAnalyser.analyse(document); } document.getMetaData().set(documentCategory); diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java index 944feb39a..b984fbe98 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java +++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/DocumentHeaderAnalyser.java @@ -25,6 +25,9 @@ import org.apache.rat.document.IDocumentAnalyser; import org.apache.rat.document.RatDocumentAnalysisException; import org.apache.rat.license.ILicense; +import org.apache.rat.utils.Log; + +import static java.lang.String.format; /** * A Document analyzer that analyses document headers for a license. @@ -35,21 +38,24 @@ class DocumentHeaderAnalyser implements IDocumentAnalyser { * The license to analyse */ private final ILicense license; + /** the logger to use */ + private final Log log; /** * Constructs the HeaderAnalyser for the specific license. * * @param license The license to analyse */ - public DocumentHeaderAnalyser(final ILicense license) { + public DocumentHeaderAnalyser(final Log log, final ILicense license) { super(); this.license = license; + this.log = log; } @Override public void analyse(Document document) throws RatDocumentAnalysisException { try (Reader reader = document.reader()) { - // TODO: worker function should be moved into this class + log.info(format("Processing: %s", document)); HeaderCheckWorker worker = new HeaderCheckWorker(reader, license, document); worker.read(); } catch (IOException e) { diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/LicenseCollection.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/LicenseCollection.java index 308f06da4..57ee9de3d 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/analysis/LicenseCollection.java +++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/LicenseCollection.java @@ -19,6 +19,7 @@ package org.apache.rat.analysis; import java.util.Collection; +import java.util.Collections; import org.apache.rat.analysis.matchers.AbstractMatcherContainer; import org.apache.rat.license.ILicense; @@ -45,7 +46,7 @@ class LicenseCollection extends AbstractMatcherContainer implements ILicense { */ public LicenseCollection(Collection enclosed) { super(enclosed); - this.enclosed = enclosed; + this.enclosed = Collections.unmodifiableCollection(enclosed); this.matchingLicense = null; this.lastState = State.i; } diff --git a/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java b/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java index e1adbeabc..5766b5257 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java +++ b/apache-rat-core/src/main/java/org/apache/rat/analysis/matchers/SPDXMatcherFactory.java @@ -127,5 +127,12 @@ public class Match extends AbstractSimpleMatcher { protected boolean doMatch(String line) { return SPDXMatcherFactory.this.check(line, this); } + + @Override + public void reset() { + super.reset(); + SPDXMatcherFactory.this.lastMatch = null; + + } } } diff --git a/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java b/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java index e10747be2..6870bcace 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java +++ b/apache-rat-core/src/main/java/org/apache/rat/annotation/AbstractLicenseAppender.java @@ -19,6 +19,7 @@ package org.apache.rat.annotation; import org.apache.commons.io.IOUtils; +import org.apache.rat.utils.Log; import java.io.BufferedReader; import java.io.File; @@ -196,9 +197,16 @@ public abstract class AbstractLicenseAppender { } private boolean isForced; + /** The log to use */ + private final Log log; - public AbstractLicenseAppender() { + /** + * Constructor + * @param log The log to use. + */ + public AbstractLicenseAppender(final Log log) { super(); + this.log = log; } /** @@ -247,11 +255,11 @@ public void append(File document) throws IOException { if (isForced) { boolean deleted = document.delete(); if (!deleted) { - System.err.println("Could not delete original file to prepare renaming."); + log.error("Could not delete original file to prepare renaming."); } boolean renamed = newDocument.renameTo(document.getAbsoluteFile()); if (!renamed) { - System.err.println("Failed to rename new file, original file remains unchanged."); + log.error("Failed to rename new file, original file remains unchanged."); } } } diff --git a/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java b/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java index 64509ccf2..8c4ccf7d0 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java +++ b/apache-rat-core/src/main/java/org/apache/rat/annotation/ApacheV2LicenseAppender.java @@ -20,6 +20,8 @@ import java.io.File; +import org.apache.rat.utils.Log; + /** * Add an Apache License V2 license header to a @@ -35,8 +37,8 @@ public class ApacheV2LicenseAppender extends AbstractLicenseAppender { /** * Create a license appender with the standard ASF license header. */ - public ApacheV2LicenseAppender() { - super(); + public ApacheV2LicenseAppender(final Log log) { + super(log); } /** @@ -45,8 +47,8 @@ public ApacheV2LicenseAppender() { * * @param copyright copyright line. */ - public ApacheV2LicenseAppender(String copyright) { - super(); + public ApacheV2LicenseAppender(final Log log, String copyright) { + super(log); this.copyright = copyright; } diff --git a/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java b/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java index 830722b6a..201f7f783 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java +++ b/apache-rat-core/src/main/java/org/apache/rat/api/MetaData.java @@ -205,6 +205,7 @@ public MetaData() { * @param license the license to add metadata for. */ public void reportOnLicense(ILicense license) { + if (StringUtils.isNotBlank(license.getNotes())) { set(new MetaData.Datum(MetaData.RAT_URL_HEADER_SAMPLE, license.getNotes())); } diff --git a/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java b/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java index e4da2ee98..43185931c 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java +++ b/apache-rat-core/src/main/java/org/apache/rat/report/claim/impl/xml/SimpleXmlClaimReporter.java @@ -24,6 +24,7 @@ import org.apache.rat.api.RatException; import org.apache.rat.report.AbstractReport; import org.apache.rat.report.xml.writer.IXmlWriter; +import org.apache.rat.report.xml.writer.impl.base.XmlWriter; import java.io.IOException; import java.util.Calendar; diff --git a/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java b/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java index 8570c692b..eb0dd83e6 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java +++ b/apache-rat-core/src/main/java/org/apache/rat/report/claim/util/LicenseAddingReport.java @@ -27,13 +27,14 @@ import org.apache.rat.api.MetaData.Datum; import org.apache.rat.api.RatException; import org.apache.rat.report.AbstractReport; +import org.apache.rat.utils.Log; public class LicenseAddingReport extends AbstractReport { private final AbstractLicenseAppender appender; - public LicenseAddingReport(String pCopyrightMsg, boolean pForced) { - appender = pCopyrightMsg == null ? new ApacheV2LicenseAppender() : new ApacheV2LicenseAppender(pCopyrightMsg); + public LicenseAddingReport(final Log log, String pCopyrightMsg, boolean pForced) { + appender = pCopyrightMsg == null ? new ApacheV2LicenseAppender(log) : new ApacheV2LicenseAppender(log,pCopyrightMsg); appender.setForce(pForced); } diff --git a/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java b/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java index 1a9a48d1e..b88dbff60 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java +++ b/apache-rat-core/src/main/java/org/apache/rat/report/xml/XmlReportFactory.java @@ -56,12 +56,12 @@ public static RatReport createStandardReport(IXmlWriter writer, reporters.add(new ClaimAggregator(statistic)); } if (configuration.isAddingLicenses()) { - reporters.add(new LicenseAddingReport(configuration.getCopyrightMessage(), configuration.isAddingLicensesForced())); + reporters.add(new LicenseAddingReport(configuration.getLog(), configuration.getCopyrightMessage(), configuration.isAddingLicensesForced())); } reporters.add(new SimpleXmlClaimReporter(writer)); final IDocumentAnalyser analyser = - DefaultAnalyserFactory.createDefaultAnalyser(configuration.getLicenses(LicenseFilter.all)); + DefaultAnalyserFactory.createDefaultAnalyser(configuration.getLog(), configuration.getLicenses(LicenseFilter.all)); final DefaultPolicy policy = new DefaultPolicy(configuration.getLicenseFamilies(LicenseFilter.approved)); final IDocumentAnalyser[] analysers = {analyser, policy}; diff --git a/apache-rat-core/src/main/java/org/apache/rat/utils/DefaultLog.java b/apache-rat-core/src/main/java/org/apache/rat/utils/DefaultLog.java index 74e0f9f5c..8a0ea6809 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/utils/DefaultLog.java +++ b/apache-rat-core/src/main/java/org/apache/rat/utils/DefaultLog.java @@ -27,25 +27,32 @@ public class DefaultLog implements Log { * The instance of the default log. */ public static final DefaultLog INSTANCE = new DefaultLog(); + + private Level level; private DefaultLog() { + level = Level.INFO; } + public void setLevel(Level level) { + this.level = level; + } @Override public void log(Level level, String msg) { - switch (level) { - case DEBUG: - case INFO: - case WARN: - System.out.format("%s: %s%n", level, msg); - break; - case ERROR: - System.err.format("%s: %s%n", level, msg); - break; - case OFF: - break; - default: - break; - } + if (this.level.ordinal() <= level.ordinal()) + switch (level) { + case DEBUG: + case INFO: + case WARN: + System.out.format("%s: %s%n", level, msg); + break; + case ERROR: + System.err.format("%s: %s%n", level, msg); + break; + case OFF: + break; + default: + break; + } } } \ No newline at end of file diff --git a/apache-rat-core/src/main/java/org/apache/rat/utils/Log.java b/apache-rat-core/src/main/java/org/apache/rat/utils/Log.java index 63db7f1d5..82eb9b8b5 100644 --- a/apache-rat-core/src/main/java/org/apache/rat/utils/Log.java +++ b/apache-rat-core/src/main/java/org/apache/rat/utils/Log.java @@ -27,10 +27,7 @@ public interface Log { * The log levels supported by logging. */ public enum Level { - /** - * Log nothing. - */ - OFF, + // these must be listed in order of decreasing noisiness. /** * Log debug only. */ @@ -46,7 +43,11 @@ public enum Level { /** * Log error only. */ - ERROR }; + ERROR, + /** + * Log nothing. + */ + OFF}; /** * Writes a message at a specific log level. @@ -54,4 +55,24 @@ public enum Level { * @param message the Message to write. */ void log(Level level, String message); + + default void log(Level level, Object message) { + log(level, message == null ? "NULL" : message.toString()); + } + + default void debug(Object message) { + log(Level.DEBUG, message); + } + + default void info(Object message) { + log(Level.INFO, message); + } + + default void warn(Object message) { + log(Level.WARN, message); + } + + default void error(Object message) { + log(Level.ERROR, message); + } } diff --git a/apache-rat-core/src/test/java/org/apache/rat/ReportConfigurationTest.java b/apache-rat-core/src/test/java/org/apache/rat/ReportConfigurationTest.java index 325a1f35d..30acdc4cc 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/ReportConfigurationTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/ReportConfigurationTest.java @@ -541,7 +541,6 @@ public static void validateDefaultLicenses(ReportConfiguration config, String... * @param config The configuration to test. */ public static void validateDefault(ReportConfiguration config) { - //config.validate( System.err::println ); assertThat(config.isAddingLicenses()).isFalse(); assertThat(config.isAddingLicensesForced()).isFalse(); assertThat(config.getCopyrightMessage()).isNull(); diff --git a/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java b/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java index 60d13e0a0..8632e0294 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/ReportTest.java @@ -34,6 +34,7 @@ import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.ParseException; import org.apache.commons.io.FileUtils; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; public class ReportTest { @@ -67,18 +68,22 @@ public void testOutputOption() throws Exception { @Test public void testDefaultOutput() throws Exception { + PrintStream origin = System.out; - File output = new File("target/sysout"); - System.setOut(new PrintStream(output)); - CommandLine cl = new DefaultParser().parse(Report.buildOptions(), new String[]{}); - ReportConfiguration config = Report.createConfiguration("target/test-classes/elements", cl); - Reporter.report(config); - assertTrue(output.exists()); - String content = FileUtils.readFileToString(output, StandardCharsets.UTF_8); - assertTrue(content.contains("2 Unknown Licenses")); - assertTrue(content.contains("target/test-classes/elements/Source.java")); - assertTrue(content.contains("target/test-classes/elements/sub/Empty.txt")); - System.setOut(origin); + try { + File output = new File("target/sysout"); + System.setOut(new PrintStream(output)); + CommandLine cl = new DefaultParser().parse(Report.buildOptions(), new String[]{}); + ReportConfiguration config = Report.createConfiguration("target/test-classes/elements", cl); + Reporter.report(config); + assertTrue(output.exists()); + String content = FileUtils.readFileToString(output, StandardCharsets.UTF_8); + assertTrue(content.contains("2 Unknown Licenses")); + assertTrue(content.contains("target/test-classes/elements/Source.java")); + assertTrue(content.contains("target/test-classes/elements/sub/Empty.txt")); + } finally { + System.setOut(origin); + } } } 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 3d05de02c..d675b6994 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 @@ -35,6 +35,7 @@ import org.apache.rat.testhelpers.XmlUtils; import org.apache.rat.utils.DefaultLog; import org.apache.rat.walker.DirectoryWalker; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.w3c.dom.Document; import org.w3c.dom.NodeList; @@ -57,6 +58,7 @@ public void xmlReportTest() throws Exception { configuration.setOut(() -> out); Reporter.report(configuration); Document doc = XmlUtils.toDom(new ByteArrayInputStream(out.toByteArray())); + XPath xPath = XPathFactory.newInstance().newXPath(); XmlUtils.getNode(doc, xPath, "/rat-report[@timestamp]"); @@ -76,6 +78,7 @@ public void xmlReportTest() throws Exception { NodeList nodeList = (NodeList) xPath.compile("/rat-report/resource").evaluate(doc, XPathConstants.NODESET); assertEquals(12, nodeList.getLength()); + } private static final String NL = System.getProperty("line.separator"); @@ -97,8 +100,9 @@ public void plainReportWithArchivesAndUnapprovedLicenses() throws Exception { configuration.setOut(() -> out); Reporter.report(configuration); + out.flush(); String document = out.toString(); - // System.out.println(document); + assertTrue(document.startsWith(HEADER), "'Generated at' is present in " + document ); // final int generatedAtLineEnd = document.indexOf(NL, HEADER.length()); diff --git a/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java b/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java index 2442cdf3c..3d5f87ec6 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/analysis/AnalyserFactoryTest.java @@ -34,6 +34,7 @@ import org.apache.rat.report.claim.impl.xml.SimpleXmlClaimReporter; import org.apache.rat.report.xml.writer.impl.base.XmlWriter; import org.apache.rat.test.utils.Resources; +import org.apache.rat.utils.DefaultLog; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -57,7 +58,7 @@ public void setUp() throws Exception { out = new StringWriter(); final XmlWriter writer = new XmlWriter(out); reporter = new SimpleXmlClaimReporter(writer); - analyser = DefaultAnalyserFactory.createDefaultAnalyser(Arrays.asList(MATCHES_NOTHING_MATCHER)); + analyser = DefaultAnalyserFactory.createDefaultAnalyser(DefaultLog.INSTANCE, Arrays.asList(MATCHES_NOTHING_MATCHER)); } @Test diff --git a/apache-rat-core/src/test/java/org/apache/rat/analysis/matchers/SPDXMatcherTest.java b/apache-rat-core/src/test/java/org/apache/rat/analysis/matchers/SPDXMatcherTest.java index f0d41e2e4..124ed357b 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/analysis/matchers/SPDXMatcherTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/analysis/matchers/SPDXMatcherTest.java @@ -72,4 +72,15 @@ public void testTrueIsAlwaysTrue() { target.reset(); assertEquals(State.i, target.currentState()); } + + @Test + public void testResetClearsLastMatch() { + + assertEquals(State.i, target.currentState()); + assertEquals(State.t, target.matches("SPDX-License-Identifier: hello")); + assertEquals(State.t, target.currentState()); + target.reset(); + assertEquals(State.i, target.currentState()); + assertEquals(State.i, target.matches("Something weird"));; + } } diff --git a/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java b/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java index c4b263fd7..188ca7949 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java +++ b/apache-rat-core/src/test/java/org/apache/rat/annotation/TestLicenseAppender.java @@ -30,6 +30,7 @@ import org.apache.commons.io.FileUtils; import org.apache.rat.test.utils.Resources; +import org.apache.rat.utils.DefaultLog; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -73,7 +74,7 @@ private void commonTestTemplate(String relativeName, createTestFile(name, creator); ApacheV2LicenseAppender appender = - new ApacheV2LicenseAppender(); + new ApacheV2LicenseAppender(DefaultLog.INSTANCE); appender.append(new File(name)); try (BufferedReader r = new BufferedReader(new FileReader(name + ".new"))){ @@ -107,7 +108,7 @@ public void createFile(Writer writer) File file = new File(filename); file.deleteOnExit(); ApacheV2LicenseAppender appender = - new ApacheV2LicenseAppender(); + new ApacheV2LicenseAppender(DefaultLog.INSTANCE); appender.append(file); File newFile = new File(filename + ".new"); @@ -501,7 +502,7 @@ public void fileWithBOM() throws IOException { File f = Resources.getResourceFile("violations/FilterTest.cs"); ApacheV2LicenseAppender appender = - new ApacheV2LicenseAppender(); + new ApacheV2LicenseAppender(DefaultLog.INSTANCE); appender.append(f); try (BufferedReader r = new BufferedReader(new FileReader(f.getAbsolutePath() diff --git a/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java b/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java index c3d1b4494..0593b3415 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportFactoryTest.java @@ -74,8 +74,6 @@ private void report(DirectoryWalker directory, RatReport report) throws Exceptio public void standardReport() throws Exception { final String elementsPath = Resources.getResourceDirectory("elements/Source.java"); - ILicenseFamily family = ILicenseFamily.builder().setLicenseFamilyCategory("TEST") - .setLicenseFamilyName("Testing family").build(); final TestingLicense testingLicense = new TestingLicense(new TestingMatcher(true), family); diff --git a/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java b/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java index 991628105..2af06f330 100644 --- a/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java +++ b/apache-rat-core/src/test/java/org/apache/rat/report/xml/XmlReportTest.java @@ -50,6 +50,7 @@ import org.apache.rat.test.utils.Resources; import org.apache.rat.testhelpers.TestingLicense; import org.apache.rat.testhelpers.XmlUtils; +import org.apache.rat.utils.DefaultLog; import org.apache.rat.walker.DirectoryWalker; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -76,7 +77,7 @@ public void setUp() throws Exception { final IHeaderMatcher qosMatcher = new CopyrightMatcher("2004", "2011", "QOS.ch"); final ILicense qosLic = new TestingLicense("QOS", qosMatcher); - IDocumentAnalyser analyser = DefaultAnalyserFactory.createDefaultAnalyser(Arrays.asList(asfLic, qosLic)); + IDocumentAnalyser analyser = DefaultAnalyserFactory.createDefaultAnalyser(DefaultLog.INSTANCE,Arrays.asList(asfLic, qosLic)); final List reporters = new ArrayList<>(); reporters.add(reporter); report = new ClaimReporterMultiplexer(analyser, reporters);