From 091502710e1ac998032589cb671a6382cbaf71e3 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 3 Jul 2020 04:16:18 +0000 Subject: [PATCH 001/160] Bump jqwik from 1.3.1 to 1.3.2 Bumps [jqwik](https://github.com/jlink/jqwik) from 1.3.1 to 1.3.2. - [Release notes](https://github.com/jlink/jqwik/releases) - [Changelog](https://github.com/jlink/jqwik/blob/master/docs/release-notes.md) - [Commits](https://github.com/jlink/jqwik/compare/1.3.1...1.3.2) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 69fe63660..38195b7bd 100644 --- a/pom.xml +++ b/pom.xml @@ -316,7 +316,7 @@ net.jqwik jqwik - 1.3.1 + 1.3.2 test From 556e97c2cb37778523479696cbe14c1fbc410745 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 3 Jul 2020 14:09:08 +0200 Subject: [PATCH 002/160] Override method to match attribute key --- .../java/de/retest/recheck/review/GlobalIgnoreApplier.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java b/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java index 4f5cf7d46..a4f2ee5be 100644 --- a/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java +++ b/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java @@ -47,6 +47,11 @@ static GlobalIgnoreApplier create( final Counter counter, final RecheckIgnoreLoc return new GlobalIgnoreApplier( counter, Collections.emptyList(), locator ); } + @Override + public boolean matches( final Element element, final String attributeKey ) { + return any( filter -> filter.matches( element, attributeKey ) ); + } + @Override public boolean matches( final Element element, final AttributeDifference difference ) { return any( filter -> filter.matches( element, difference ) ); From fa344b2bf023ccfc5390efab25fed825d5668306 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2020 04:17:34 +0000 Subject: [PATCH 003/160] Bump unirest-java from 3.8.00 to 3.8.06 Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.8.00 to 3.8.06. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.8.00...v3.8.06) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 38195b7bd..7578786ef 100644 --- a/pom.xml +++ b/pom.xml @@ -146,7 +146,7 @@ com.konghq unirest-java - 3.8.00 + 3.8.06 From 9b8e76b0c99bf07acdae49ac972e816a28c69c4c Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Mon, 6 Jul 2020 13:09:22 +0200 Subject: [PATCH 004/160] We don't _need_ a file for every state, thus it's not missing... --- .../java/de/retest/recheck/review/workers/LoadFilterWorker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/retest/recheck/review/workers/LoadFilterWorker.java b/src/main/java/de/retest/recheck/review/workers/LoadFilterWorker.java index 0649ba6a1..bd3ad2957 100644 --- a/src/main/java/de/retest/recheck/review/workers/LoadFilterWorker.java +++ b/src/main/java/de/retest/recheck/review/workers/LoadFilterWorker.java @@ -97,7 +97,7 @@ private Stream getIgnoreFileFilters( final Path ignoreFile ) t log.info( "Reading ignore file from '{}'.", ignoreFile ); return wrap( ignoreFile, Loaders.filter().load( Files.lines( ignoreFile ) ) ); } - log.info( "Ignoring missing ignore file '{}'.", ignoreFile ); + log.info( "No ignore file found at '{}'.", ignoreFile ); return Stream.empty(); } From 8a667c157d9086b1115ca43b39a595df32d5fc36 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 13:34:47 +0200 Subject: [PATCH 005/160] Allow to disable the uploading to rehub on individual tests... --- src/main/java/de/retest/recheck/RecheckOptions.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/de/retest/recheck/RecheckOptions.java b/src/main/java/de/retest/recheck/RecheckOptions.java index f3a294c34..3e032bb5b 100644 --- a/src/main/java/de/retest/recheck/RecheckOptions.java +++ b/src/main/java/de/retest/recheck/RecheckOptions.java @@ -200,6 +200,17 @@ public RecheckOptionsBuilder enableReportUpload() { return this; } + /** + * Disables upload to rehub so that all reports are stored only locally. + * Default: false. + * + * @return self + */ + public RecheckOptionsBuilder disableReportUpload() { + reportUploadEnabled = false; + return this; + } + /** * Overwrites the filter used for filtering the report after a test. The filter cannot be used in conjunction * with {@link #addIgnore(String)}. From 7c48445e912daf594ae735c1fb48d926d110c1fc Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 13:52:38 +0200 Subject: [PATCH 006/160] Adapt CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfe5390b2..2237801c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ Table of Contents ### New Features * Metadata differences are now filterable via the recheck.ignore. A new `metadata.filter` has been added which can be imported with `import: metadata.filter` in `recheck.ignore`. +* Add a `disableReportUpload` method. ### Improvements From 7a218e7b68cdbf1cf00fe81e19d4cef492cb64cf Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Mon, 6 Jul 2020 15:16:50 +0200 Subject: [PATCH 007/160] Make the output much less verbose in terms of whitespace used... --- CHANGELOG.md | 1 + .../printer/AttributeDifferencePrinter.java | 6 ++-- .../printer/MetadataDifferencePrinter.java | 6 +--- .../ActionReplayResultPrinterTest.java | 24 ++++--------- .../printer/ElementDifferencePrinterTest.java | 8 ++--- .../MetadataDifferencePrinterTest.java | 8 ++--- ...should_be_created_accordingly.approved.txt | 36 +++++-------------- ...should_be_created_if_filtered.approved.txt | 16 +++------ ...created_with_deleted_filtered.approved.txt | 36 +++++-------------- ...dle_legacy_spaces_accordingly.approved.txt | 36 +++++-------------- ...uld_handle_spaces_accordingly.approved.txt | 36 +++++-------------- ...nces_if_insertion_or_deletion.approved.txt | 36 +++++-------------- 12 files changed, 65 insertions(+), 184 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2237801c0..788298b09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ Table of Contents ### Improvements +* Have the console output much more compact in terms of whitespace used. Con: makes it harder to spot difference details... -------------------------------------------------------------------------------- diff --git a/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java b/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java index 37a80ae6d..edbb4edbc 100644 --- a/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java +++ b/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java @@ -4,8 +4,8 @@ import java.util.stream.Collectors; import de.retest.recheck.printer.highlighting.DefaultHighlighter; -import de.retest.recheck.printer.highlighting.Highlighter; import de.retest.recheck.printer.highlighting.HighlightType; +import de.retest.recheck.printer.highlighting.Highlighter; import de.retest.recheck.ui.DefaultValueFinder; import de.retest.recheck.ui.descriptors.IdentifyingAttributes; import de.retest.recheck.ui.diff.AttributeDifference; @@ -96,11 +96,9 @@ private String formatWarning( final ElementIdentificationWarning warning ) { } private String getKeyExpectedActualFormat( final String indent ) { - final String expectedItemIndent = indent + " "; - final String actualItemIndent = indent + " "; // tab leads to wrong indent on console final String expected = highlighter.highlight( "expected", HighlightType.EXPECTED ); final String actual = highlighter.highlight( "actual", HighlightType.ACTUAL ); - return "%s:\n" + expectedItemIndent + expected + "=\"%s\",\n" + actualItemIndent + actual + "=\"%s\""; + return "%s: " + expected + "=\"%s\", " + actual + "=\"%s\""; } } diff --git a/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java b/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java index 4f95492fd..365a5fd5b 100644 --- a/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java +++ b/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java @@ -38,11 +38,7 @@ private String printDifferences( final MetadataDifference difference, final Stri } private String print( final MetadataElementDifference difference, final String indent ) { - final String expectedItemIndent = indent + " "; - final String actualItemIndent = indent + " "; // tab leads to wrong indent on console - - final String keyExpectedActualFormat = - "%s:\n" + expectedItemIndent + "expected=\"%s\",\n" + actualItemIndent + "actual=\"%s\""; + final String keyExpectedActualFormat = "%s: expected=\"%s\", actual=\"%s\""; return String.format( keyExpectedActualFormat, difference.getKey(), difference.getExpected(), difference.getActual() ); diff --git a/src/test/java/de/retest/recheck/printer/ActionReplayResultPrinterTest.java b/src/test/java/de/retest/recheck/printer/ActionReplayResultPrinterTest.java index d6996f898..94ecb9939 100644 --- a/src/test/java/de/retest/recheck/printer/ActionReplayResultPrinterTest.java +++ b/src/test/java/de/retest/recheck/printer/ActionReplayResultPrinterTest.java @@ -77,9 +77,7 @@ void toString_should_print_state_differences_if_no_meta_differences() { assertThat( string ).isEqualTo( "foo resulted in:\n" // + "\telement (retestId) at 'path/to/element':\n" // - + "\t\tkey:" // - + "\n\t\t expected=\"expected\"," // - + "\n\t\t actual=\"actual\"" ); + + "\t\tkey: expected=\"expected\", actual=\"actual\"" ); } @Test @@ -100,12 +98,8 @@ void toString_should_print_meta_differences_if_no_state_differences() throws Exc assertThat( cut.toString( actionResult ) ).isEqualTo( "foo resulted in:\n" // + "\tMetadata Differences:\n" // + "\t Please note that these differences do not affect the result and are not included in the difference count.\n" // - + "\t\ta:" // - + "\n\t\t expected=\"b\"," // - + "\n\t\t actual=\"c\"\n" // - + "\t\tb:" // - + "\n\t\t expected=\"c\"," // - + "\n\t\t actual=\"d\"" ); + + "\t\ta: expected=\"b\", actual=\"c\"\n" // + + "\t\tb: expected=\"c\", actual=\"d\"" ); } @Test @@ -147,16 +141,10 @@ void toString_should_print_meta_before_state_differences() throws Exception { assertThat( cut.toString( actionResult ) ).isEqualTo( "foo resulted in:\n" // + "\tMetadata Differences:\n" // + "\t Please note that these differences do not affect the result and are not included in the difference count.\n" // - + "\t\ta:" // - + "\n\t\t expected=\"b\"," // - + "\n\t\t actual=\"c\"\n" // - + "\t\tb:" // - + "\n\t\t expected=\"c\"," // - + "\n\t\t actual=\"d\"\n" // + + "\t\ta: expected=\"b\", actual=\"c\"\n" // + + "\t\tb: expected=\"c\", actual=\"d\"\n" // + "\telement (retestId) at 'path/to/element':\n" // - + "\t\tkey:" // - + "\n\t\t expected=\"expected\"," // - + "\n\t\t actual=\"actual\"" ); + + "\t\tkey: expected=\"expected\", actual=\"actual\"" ); } @Test diff --git a/src/test/java/de/retest/recheck/printer/ElementDifferencePrinterTest.java b/src/test/java/de/retest/recheck/printer/ElementDifferencePrinterTest.java index 6fb8397e7..ca883cdee 100644 --- a/src/test/java/de/retest/recheck/printer/ElementDifferencePrinterTest.java +++ b/src/test/java/de/retest/recheck/printer/ElementDifferencePrinterTest.java @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test; import de.retest.recheck.ui.descriptors.IdentifyingAttributes; +import de.retest.recheck.ui.diff.AttributeDifference; import de.retest.recheck.ui.diff.ElementDifference; class ElementDifferencePrinterTest { @@ -63,13 +64,12 @@ void toString_should_print_each_differences_in_a_new_line() { final IdentifyingAttributes identifyingAttributes = mock( IdentifyingAttributes.class ); when( identifyingAttributes.toString() ).thenReturn( "id" ); - final ElementDifference d1 = mock( ElementDifference.class ); - when( d1.getElementDifferences() ).thenReturn( Collections.emptyList() ); - when( d1.getIdentifyingAttributes() ).thenReturn( identifyingAttributes ); + final AttributeDifference a1 = mock( AttributeDifference.class ); + final AttributeDifference a2 = mock( AttributeDifference.class ); final ElementDifference difference = mock( ElementDifference.class ); when( difference.getIdentifyingAttributes() ).thenReturn( identifyingAttributes ); - when( difference.getElementDifferences() ).thenReturn( Arrays.asList( d1, d1 ) ); + when( difference.getAttributeDifferences() ).thenReturn( Arrays.asList( a1, a2 ) ); final String string = cut.toString( difference ); diff --git a/src/test/java/de/retest/recheck/printer/MetadataDifferencePrinterTest.java b/src/test/java/de/retest/recheck/printer/MetadataDifferencePrinterTest.java index 5ab6bb82a..f04219b35 100644 --- a/src/test/java/de/retest/recheck/printer/MetadataDifferencePrinterTest.java +++ b/src/test/java/de/retest/recheck/printer/MetadataDifferencePrinterTest.java @@ -24,11 +24,7 @@ void toString_should_properly_format_differences() throws Exception { assertThat( cut.toString( differences, "____" ) ).isEqualTo( "____Metadata Differences:\n" // + "____ Please note that these differences do not affect the result and are not included " // + "in the difference count.\n" // - + "____\ta:\n" // - + "____\t expected=\"b\",\n" // - + "____\t actual=\"c\"\n" // - + "____\tb:\n" // - + "____\t expected=\"c\",\n" // - + "____\t actual=\"d\"" ); + + "____\ta: expected=\"b\", actual=\"c\"\n" // + + "____\tb: expected=\"c\", actual=\"d\"" ); } } diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt index 92a9c373e..5d7526432 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt @@ -5,35 +5,17 @@ Test 'no-filter' has 9 difference(s) in 1 state(s): check resulted in: Metadata Differences: Please note that these differences do not affect the result and are not included in the difference count. - os.name: - expected="null", - actual="Linux" - os.version: - expected="null", - actual="4.4.0-101-generic" + os.name: expected="null", actual="Linux" + os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': - foo-1: - expected="bar-1", - actual="bar-3" - foo-3: - expected="bar-3", - actual="bar-1" + foo-1: expected="bar-1", actual="bar-3" + foo-3: expected="bar-3", actual="bar-1" same (same-id) at 'foo[1]/bar[1]/same[1]': - bar-1: - expected="bar-1", - actual="bar-1-change" - bar-2: - expected="bar-2", - actual="null" - bar-3: - expected="bar-3", - actual="(default or absent)" - bar-2-change: - expected="(default or absent)", - actual="bar-2" - bar-3-change: - expected="(default or absent)", - actual="bar-3" + bar-1: expected="bar-1", actual="bar-1-change" + bar-2: expected="bar-2", actual="null" + bar-3: expected="bar-3", actual="(default or absent)" + bar-2-change: expected="(default or absent)", actual="bar-2" + bar-3-change: expected="(default or absent)", actual="bar-3" delete (delete-id) at 'foo[1]/bar[1]/remove[1]/delete[1]': was deleted insert (insert-id) at 'foo[1]/bar[1]/add[1]/insert[1]': diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt index 0dd5b8803..8cf9b1d54 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt @@ -5,19 +5,11 @@ Test 'filter' has 4 difference(s) in 1 state(s): check resulted in: Metadata Differences: Please note that these differences do not affect the result and are not included in the difference count. - os.name: - expected="null", - actual="Linux" - os.version: - expected="null", - actual="4.4.0-101-generic" + os.name: expected="null", actual="Linux" + os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': - foo-1: - expected="bar-1", - actual="bar-3" - foo-3: - expected="bar-3", - actual="bar-1" + foo-1: expected="bar-1", actual="bar-3" + foo-3: expected="bar-3", actual="bar-1" delete (delete-id) at 'foo[1]/bar[1]/remove[1]/delete[1]': was deleted insert (insert-id) at 'foo[1]/bar[1]/add[1]/insert[1]': diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt index 6ff4037f6..06b3d3453 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt @@ -5,34 +5,16 @@ Test 'filter-deleted' has 8 difference(s) in 1 state(s): check resulted in: Metadata Differences: Please note that these differences do not affect the result and are not included in the difference count. - os.name: - expected="null", - actual="Linux" - os.version: - expected="null", - actual="4.4.0-101-generic" + os.name: expected="null", actual="Linux" + os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': - foo-1: - expected="bar-1", - actual="bar-3" - foo-3: - expected="bar-3", - actual="bar-1" + foo-1: expected="bar-1", actual="bar-3" + foo-3: expected="bar-3", actual="bar-1" same (same-id) at 'foo[1]/bar[1]/same[1]': - bar-1: - expected="bar-1", - actual="bar-1-change" - bar-2: - expected="bar-2", - actual="null" - bar-3: - expected="bar-3", - actual="(default or absent)" - bar-2-change: - expected="(default or absent)", - actual="bar-2" - bar-3-change: - expected="(default or absent)", - actual="bar-3" + bar-1: expected="bar-1", actual="bar-1-change" + bar-2: expected="bar-2", actual="null" + bar-3: expected="bar-3", actual="(default or absent)" + bar-2-change: expected="(default or absent)", actual="bar-2" + bar-3-change: expected="(default or absent)", actual="bar-3" insert (insert-id) at 'foo[1]/bar[1]/add[1]/insert[1]': was inserted diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt index 698f27f0b..2733df6cd 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt @@ -5,35 +5,17 @@ Test 'with legacy spaces' has 9 difference(s) in 1 state(s): check resulted in: Metadata Differences: Please note that these differences do not affect the result and are not included in the difference count. - os.name: - expected="null", - actual="Linux" - os.version: - expected="null", - actual="4.4.0-101-generic" + os.name: expected="null", actual="Linux" + os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': - foo-1: - expected="bar-1", - actual="bar-3" - foo-3: - expected="bar-3", - actual="bar-1" + foo-1: expected="bar-1", actual="bar-3" + foo-3: expected="bar-3", actual="bar-1" same (same-id) at 'foo[1]/bar[1]/same[1]': - bar-1: - expected="bar-1", - actual="bar-1-change" - bar-2: - expected="bar-2", - actual="null" - bar-3: - expected="bar-3", - actual="(default or absent)" - bar-2-change: - expected="(default or absent)", - actual="bar-2" - bar-3-change: - expected="(default or absent)", - actual="bar-3" + bar-1: expected="bar-1", actual="bar-1-change" + bar-2: expected="bar-2", actual="null" + bar-3: expected="bar-3", actual="(default or absent)" + bar-2-change: expected="(default or absent)", actual="bar-2" + bar-3-change: expected="(default or absent)", actual="bar-3" delete (delete-id) at 'foo[1]/bar[1]/remove[1]/delete[1]': was deleted insert (insert-id) at 'foo[1]/bar[1]/add[1]/insert[1]': diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt index b021c5d80..6154a824a 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt @@ -5,35 +5,17 @@ Test 'with spaces' has 9 difference(s) in 1 state(s): check resulted in: Metadata Differences: Please note that these differences do not affect the result and are not included in the difference count. - os.name: - expected="null", - actual="Linux" - os.version: - expected="null", - actual="4.4.0-101-generic" + os.name: expected="null", actual="Linux" + os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': - foo-1: - expected="bar-1", - actual="bar-3" - foo-3: - expected="bar-3", - actual="bar-1" + foo-1: expected="bar-1", actual="bar-3" + foo-3: expected="bar-3", actual="bar-1" same (same-id) at 'foo[1]/bar[1]/same[1]': - bar-1: - expected="bar-1", - actual="bar-1-change" - bar-2: - expected="bar-2", - actual="null" - bar-3: - expected="bar-3", - actual="(default or absent)" - bar-2-change: - expected="(default or absent)", - actual="bar-2" - bar-3-change: - expected="(default or absent)", - actual="bar-3" + bar-1: expected="bar-1", actual="bar-1-change" + bar-2: expected="bar-2", actual="null" + bar-3: expected="bar-3", actual="(default or absent)" + bar-2-change: expected="(default or absent)", actual="bar-2" + bar-3-change: expected="(default or absent)", actual="bar-3" delete (delete-id) at 'foo[1]/bar[1]/remove[1]/delete[1]': was deleted insert (insert-id) at 'foo[1]/bar[1]/add[1]/insert[1]': diff --git a/src/test/resources/de/retest/recheck/printer/ActionReplayResultPrinterTest.toString_should_not_print_child_differences_if_insertion_or_deletion.approved.txt b/src/test/resources/de/retest/recheck/printer/ActionReplayResultPrinterTest.toString_should_not_print_child_differences_if_insertion_or_deletion.approved.txt index 22f51af6d..5c878e502 100644 --- a/src/test/resources/de/retest/recheck/printer/ActionReplayResultPrinterTest.toString_should_not_print_child_differences_if_insertion_or_deletion.approved.txt +++ b/src/test/resources/de/retest/recheck/printer/ActionReplayResultPrinterTest.toString_should_not_print_child_differences_if_insertion_or_deletion.approved.txt @@ -1,35 +1,17 @@ Start Sut resulted in: type (retestId) at 'html[1]/body[1]': - foo-1: - expected="bar-1", - actual="bar1" - foo-2: - expected="bar-2", - actual="bar2" - foo-3: - expected="bar-3", - actual="bar3" + foo-1: expected="bar-1", actual="bar1" + foo-2: expected="bar-2", actual="bar2" + foo-3: expected="bar-3", actual="bar3" type (retestId) at 'html[1]/body[1]/div[1]': was deleted type (retestId) at 'html[1]/body[1]/div[2]': - foo-1: - expected="bar-1", - actual="bar1" - foo-2: - expected="bar-2", - actual="bar2" - foo-3: - expected="bar-3", - actual="bar3" + foo-1: expected="bar-1", actual="bar1" + foo-2: expected="bar-2", actual="bar2" + foo-3: expected="bar-3", actual="bar3" type (retestId) at 'html[1]/body[1]/div[2]/div[1]': was deleted type (retestId) at 'html[1]/body[1]/div[2]/div[2]': - foo-1: - expected="bar-1", - actual="bar1" - foo-2: - expected="bar-2", - actual="bar2" - foo-3: - expected="bar-3", - actual="bar3" + foo-1: expected="bar-1", actual="bar1" + foo-2: expected="bar-2", actual="bar2" + foo-3: expected="bar-3", actual="bar3" From e9e8408e038191a74c29c1c391e0b5280eab0bca Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 11:30:00 +0200 Subject: [PATCH 008/160] Remove now superflous method parameter `indent` where obsolete --- .../printer/AttributeDifferencePrinter.java | 26 +++++++++---------- .../printer/MetadataDifferencePrinter.java | 4 +-- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java b/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java index edbb4edbc..9d40a5971 100644 --- a/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java +++ b/src/main/java/de/retest/recheck/printer/AttributeDifferencePrinter.java @@ -36,29 +36,29 @@ public AttributeDifferencePrinter( final IdentifyingAttributes attributes, final @Override public String toString( final AttributeDifference difference, final String indent ) { if ( difference.hasElementIdentificationWarning() ) { - return indent + format( difference, indent ) + printWarning( difference ); + return indent + format( difference ) + printWarning( difference ); } - return indent + format( difference, indent ); + return indent + format( difference ); } - private String format( final AttributeDifference difference, final String indent ) { + private String format( final AttributeDifference difference ) { if ( isExpectedDefault( difference ) ) { // The attribute changed from default to a non-default - return printExpectedDefaultDifference( difference, indent ); + return printExpectedDefaultDifference( difference ); } if ( isActualDefault( difference ) ) { // The attribute changed back to default - return printActualDefaultDifference( difference, indent ); + return printActualDefaultDifference( difference ); } - return printBothDifferences( difference, indent ); + return printBothDifferences( difference ); } private boolean isActualDefault( final AttributeDifference difference ) { return defaultProvider.isDefaultValue( attributes, difference.getKey(), difference.getActual() ); } - private String printActualDefaultDifference( final AttributeDifference difference, final String indent ) { + private String printActualDefaultDifference( final AttributeDifference difference ) { final String key = highlighter.highlight( difference.getKey(), HighlightType.KEY ); final String expected = highlighter.highlight( difference.getExpectedToString(), HighlightType.VALUE_EXPECTED ); - final String keyExpectedActualFormat = getKeyExpectedActualFormat( indent ); + final String keyExpectedActualFormat = getKeyExpectedActualFormat(); return String.format( keyExpectedActualFormat, key, expected, IS_DEFAULT ); } @@ -67,19 +67,19 @@ private boolean isExpectedDefault( final AttributeDifference difference ) { return difference.getExpected() == null; // We do not save defaults, thus this is null } - private String printExpectedDefaultDifference( final AttributeDifference difference, final String indent ) { + private String printExpectedDefaultDifference( final AttributeDifference difference ) { final String key = highlighter.highlight( difference.getKey(), HighlightType.KEY ); final String actual = highlighter.highlight( difference.getActualToString(), HighlightType.VALUE_ACTUAL ); - final String keyExpectedActualFormat = getKeyExpectedActualFormat( indent ); + final String keyExpectedActualFormat = getKeyExpectedActualFormat(); return String.format( keyExpectedActualFormat, key, IS_DEFAULT, actual ); } - private String printBothDifferences( final AttributeDifference difference, final String indent ) { + private String printBothDifferences( final AttributeDifference difference ) { final String key = highlighter.highlight( difference.getKey(), HighlightType.KEY ); final String expected = highlighter.highlight( difference.getExpectedToString(), HighlightType.VALUE_EXPECTED ); final String actual = highlighter.highlight( difference.getActualToString(), HighlightType.VALUE_ACTUAL ); - final String keyExpectedActualFormat = getKeyExpectedActualFormat( indent ); + final String keyExpectedActualFormat = getKeyExpectedActualFormat(); return String.format( keyExpectedActualFormat, key, expected, actual ); } @@ -95,7 +95,7 @@ private String formatWarning( final ElementIdentificationWarning warning ) { return warning.getTestFileName() + ":" + warning.getTestLineNumber(); } - private String getKeyExpectedActualFormat( final String indent ) { + private String getKeyExpectedActualFormat() { final String expected = highlighter.highlight( "expected", HighlightType.EXPECTED ); final String actual = highlighter.highlight( "actual", HighlightType.ACTUAL ); return "%s: " + expected + "=\"%s\", " + actual + "=\"%s\""; diff --git a/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java b/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java index 365a5fd5b..69e28eb72 100644 --- a/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java +++ b/src/main/java/de/retest/recheck/printer/MetadataDifferencePrinter.java @@ -33,11 +33,11 @@ public String toString( final MetadataDifference difference, final String indent private String printDifferences( final MetadataDifference difference, final String indent ) { return difference.getDifferences().stream() // - .map( d -> print( d, indent ) ) // + .map( d -> print( d ) ) // .collect( Collectors.joining( "\n" + indent, "\n" + indent, "" ) ); } - private String print( final MetadataElementDifference difference, final String indent ) { + private String print( final MetadataElementDifference difference ) { final String keyExpectedActualFormat = "%s: expected=\"%s\", actual=\"%s\""; return String.format( keyExpectedActualFormat, difference.getKey(), difference.getExpected(), From dfb920a0a64f7a3593b457ae61eb7b1c524dd715 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Sat, 1 Feb 2020 00:01:09 +0100 Subject: [PATCH 009/160] Remove redundancy by reusing existing code --- .../ignore/ChainableFilterLoaderUtil.java | 7 ++++++- .../recheck/review/ignore/MatcherFilter.java | 17 +++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/retest/recheck/review/ignore/ChainableFilterLoaderUtil.java b/src/main/java/de/retest/recheck/review/ignore/ChainableFilterLoaderUtil.java index 0aef3f854..cd02ed1f4 100644 --- a/src/main/java/de/retest/recheck/review/ignore/ChainableFilterLoaderUtil.java +++ b/src/main/java/de/retest/recheck/review/ignore/ChainableFilterLoaderUtil.java @@ -24,6 +24,11 @@ class ChainableFilterLoaderUtil { ) ); public static Optional load( final MatchResult regex, final Function simpleFilterLoader ) { + return load( regex, simpleFilterLoader, chainableFilter ); + } + + public static Optional load( final MatchResult regex, final Function simpleFilterLoader, + final Loader chainedFilterLoader ) { String match = regex.group( 1 ); if ( !match.contains( "," ) ) { return Optional.of( simpleFilterLoader.apply( match ) ); @@ -31,7 +36,7 @@ public static Optional load( final MatchResult regex, final Function new IllegalArgumentException( "Couldn't find a filter for the expression '" + remainder + "'." ) ); return Optional.of( new AllMatchFilter( simpleFilterLoader.apply( match ), chained ) ); diff --git a/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java b/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java index ace1ca7c3..ea7934e24 100644 --- a/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java +++ b/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java @@ -78,19 +78,12 @@ public String save( final Filter ignore ) { @Override protected Optional load( final MatchResult regex ) { - String match = regex.group( 1 ); - if ( !match.contains( "," ) ) { - return Loaders.elementMatcher().load( match ) // - .map( matcher -> new MatcherFilter( matcher ) ); - } - final String remainder = match.substring( match.indexOf( ',' ) + 1 ).trim(); - match = match.substring( 0, match.indexOf( ',' ) ); // TODO Either no optional as return or no exception below - final Filter chained = chainableFilter.load( remainder ). // - orElseThrow( () -> new IllegalArgumentException( - "Couldn't find a filter for the expression '" + remainder + "'." ) ); - return Loaders.elementMatcher().load( match ) // - .map( matcher -> new AllMatchFilter( new MatcherFilter( matcher ), chained ) ); + return ChainableFilterLoaderUtil.load( regex, + match -> new MatcherFilter( Loaders.elementMatcher().load( match ) + .orElseThrow( () -> new IllegalArgumentException( + "Couldn't find a filter for the expression '" + match + "'." ) ) ), + chainableFilter ); } } } From c1c585582a1f4e8fb6b542ab1929fedf8e84ea66 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 13:02:10 +0200 Subject: [PATCH 010/160] Same result for same behavior... --- .../recheck/review/ignore/MatcherFilterLoaderTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/de/retest/recheck/review/ignore/MatcherFilterLoaderTest.java b/src/test/java/de/retest/recheck/review/ignore/MatcherFilterLoaderTest.java index 1d8e81fe7..3f2155d9a 100644 --- a/src/test/java/de/retest/recheck/review/ignore/MatcherFilterLoaderTest.java +++ b/src/test/java/de/retest/recheck/review/ignore/MatcherFilterLoaderTest.java @@ -1,6 +1,7 @@ package de.retest.recheck.review.ignore; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import java.util.Collection; @@ -95,9 +96,9 @@ void load_chained_with_generic_matcher_should_produce_correct_ignore() { } @Test - void load_with_invalid_matcher_should_not_load_parent() { + void load_with_invalid_matcher_should_throw_exception() { final String line = "matcher: foo:bar"; - assertThat( cut.load( line ) ).isNotPresent(); + assertThrows( IllegalArgumentException.class, () -> cut.load( line ) ); } } From c4e2009e7b02b5454cfa1875748549af78e61bf0 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Mon, 6 Jul 2020 13:09:53 +0200 Subject: [PATCH 011/160] Add metadata for web, that should also be ignored on default... --- src/main/resources/filter/metadata.filter | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/filter/metadata.filter b/src/main/resources/filter/metadata.filter index 90fa001e2..36cb7af67 100644 --- a/src/main/resources/filter/metadata.filter +++ b/src/main/resources/filter/metadata.filter @@ -7,3 +7,11 @@ attribute=time.date attribute=time.time attribute=time.offset attribute=time.zone +# for recheck-web +attribute=browser.name +attribute=browser.version +attribute=check.type +attribute=driver.type +attribute=os.name +attribute=os.version +attribute=url \ No newline at end of file From b57d432edd442cb76d39253a025ae5b7e4714ef1 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 11:57:17 +0200 Subject: [PATCH 012/160] Rename previous `metadata.filter` to `volatile-metadata.filter` and update everything accordingly This allows to have a `metadata.filter` which actually filters _all_ metadata. --- CHANGELOG.md | 2 +- .../de/retest/recheck/ignore/SearchFilterFiles.java | 1 + src/main/resources/default-recheck.ignore | 4 ++-- src/main/resources/filter/metadata.filter | 11 ++--------- src/main/resources/filter/volatile-metadata.filter | 13 +++++++++++++ src/test/java/de/retest/recheck/RecheckImplIT.java | 2 ++ .../recheck/ignore/SearchFilterFilesTest.java | 2 +- ....diff_should_be_created_accordingly.approved.txt | 4 ---- ....diff_should_be_created_if_filtered.approved.txt | 4 ---- ...ld_be_created_with_deleted_filtered.approved.txt | 4 ---- ...ld_handle_legacy_spaces_accordingly.approved.txt | 4 ---- ...ff_should_handle_spaces_accordingly.approved.txt | 4 ---- 12 files changed, 22 insertions(+), 33 deletions(-) create mode 100644 src/main/resources/filter/volatile-metadata.filter diff --git a/CHANGELOG.md b/CHANGELOG.md index 788298b09..2ed897782 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,7 +32,7 @@ Table of Contents ### New Features -* Metadata differences are now filterable via the recheck.ignore. A new `metadata.filter` has been added which can be imported with `import: metadata.filter` in `recheck.ignore`. +* Metadata differences are now filterable via the recheck.ignore. New `volatile-metadata.filter` and `metadata.filter` filters have been added, where the first one filters metadata which is added for diagnosing purposes and too verbose to be displayed upon every change and the latter filters _all_ metadata. They can be imported with `import: volatile-metadata.filter` and `import: metadata.filter` in `recheck.ignore`. * Add a `disableReportUpload` method. ### Improvements diff --git a/src/main/java/de/retest/recheck/ignore/SearchFilterFiles.java b/src/main/java/de/retest/recheck/ignore/SearchFilterFiles.java index 5be3355d6..611dc9cb0 100644 --- a/src/main/java/de/retest/recheck/ignore/SearchFilterFiles.java +++ b/src/main/java/de/retest/recheck/ignore/SearchFilterFiles.java @@ -39,6 +39,7 @@ public class SearchFilterFiles { FilterResource.prefix( WEB_CATEGORY, "positioning.filter" ), // FilterResource.prefix( WEB_CATEGORY, "style-attributes.filter" ), // + FilterResource.absolute( "volatile-metadata.filter" ), // FilterResource.absolute( "metadata.filter" ) // ) // .map( FilterResource::loader ) // diff --git a/src/main/resources/default-recheck.ignore b/src/main/resources/default-recheck.ignore index 42ded844c..d95171c35 100644 --- a/src/main/resources/default-recheck.ignore +++ b/src/main/resources/default-recheck.ignore @@ -21,8 +21,8 @@ # More details and examples can be found here: # https://docs.retest.de/recheck/usage/filter/ -# Ignore metadata differences -import: metadata.filter +# Ignore volatile metadata differences +import: volatile-metadata.filter # These are sensible defaults, delete if they don't apply: attribute=style diff --git a/src/main/resources/filter/metadata.filter b/src/main/resources/filter/metadata.filter index 36cb7af67..8c9400c48 100644 --- a/src/main/resources/filter/metadata.filter +++ b/src/main/resources/filter/metadata.filter @@ -1,12 +1,5 @@ -attribute=machine.name -attribute=os.arch -attribute=vcs.branch -attribute=vcs.commit -attribute=vcs.name -attribute=time.date -attribute=time.time -attribute=time.offset -attribute=time.zone +import: volatile-metadata.filter + # for recheck-web attribute=browser.name attribute=browser.version diff --git a/src/main/resources/filter/volatile-metadata.filter b/src/main/resources/filter/volatile-metadata.filter new file mode 100644 index 000000000..88040bce4 --- /dev/null +++ b/src/main/resources/filter/volatile-metadata.filter @@ -0,0 +1,13 @@ +# These differences should be recorded in the GM for diagnosing, +# but are too verbose and too volatile +# to be spilled out for every change + +attribute=machine.name +attribute=os.arch +attribute=vcs.branch +attribute=vcs.commit +attribute=vcs.name +attribute=time.date +attribute=time.time +attribute=time.offset +attribute=time.zone \ No newline at end of file diff --git a/src/test/java/de/retest/recheck/RecheckImplIT.java b/src/test/java/de/retest/recheck/RecheckImplIT.java index 2d0fd9fc7..270e4b801 100644 --- a/src/test/java/de/retest/recheck/RecheckImplIT.java +++ b/src/test/java/de/retest/recheck/RecheckImplIT.java @@ -53,6 +53,7 @@ void diff_should_handle_legacy_spaces_accordingly() { doReturn( RecheckImplIT.class.getName() + " legacy spaces" ).when( fileNamerStrategy ).getTestClassName(); execute( "with legacy spaces", RecheckOptions.builder() // + .setIgnore( METADATA_FILTER ) // Ignore metadata .fileNamerStrategy( fileNamerStrategy ) // .build() ); } @@ -60,6 +61,7 @@ void diff_should_handle_legacy_spaces_accordingly() { @Test void diff_should_handle_spaces_accordingly() { execute( "with spaces", RecheckOptions.builder() // + .setIgnore( METADATA_FILTER ) // .suiteName( RecheckImplIT.class.getName() + " spaces" ) // .build() ); } diff --git a/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java b/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java index c7acd851d..d37c34256 100644 --- a/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java +++ b/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java @@ -43,7 +43,7 @@ void getDefaultFilterFiles_should_get_all_default_filters() { .map( Pair::getLeft ) // .collect( Collectors.toList() ); assertThat( actualFilterFileNames ).containsExactlyInAnyOrder( "content.filter", "invisible-attributes.filter", - "positioning.filter", "style-attributes.filter", "metadata.filter" ); + "positioning.filter", "style-attributes.filter", "volatile-metadata.filter", "metadata.filter" ); } @Test diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt index 5d7526432..f18210ec1 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_accordingly.approved.txt @@ -3,10 +3,6 @@ A detailed report will be created at '*'. You can review the details by using ou 1 check(s) in 'de.retest.recheck.RecheckImplIT' found the following difference(s): Test 'no-filter' has 9 difference(s) in 1 state(s): check resulted in: - Metadata Differences: - Please note that these differences do not affect the result and are not included in the difference count. - os.name: expected="null", actual="Linux" - os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': foo-1: expected="bar-1", actual="bar-3" foo-3: expected="bar-3", actual="bar-1" diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt index 8cf9b1d54..ed241184b 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_if_filtered.approved.txt @@ -3,10 +3,6 @@ A detailed report will be created at '*'. You can review the details by using ou 1 check(s) in 'de.retest.recheck.RecheckImplIT' found the following difference(s): Test 'filter' has 4 difference(s) in 1 state(s): check resulted in: - Metadata Differences: - Please note that these differences do not affect the result and are not included in the difference count. - os.name: expected="null", actual="Linux" - os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': foo-1: expected="bar-1", actual="bar-3" foo-3: expected="bar-3", actual="bar-1" diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt index 06b3d3453..6497b7c1f 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_be_created_with_deleted_filtered.approved.txt @@ -3,10 +3,6 @@ A detailed report will be created at '*'. You can review the details by using ou 1 check(s) in 'de.retest.recheck.RecheckImplIT' found the following difference(s): Test 'filter-deleted' has 8 difference(s) in 1 state(s): check resulted in: - Metadata Differences: - Please note that these differences do not affect the result and are not included in the difference count. - os.name: expected="null", actual="Linux" - os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': foo-1: expected="bar-1", actual="bar-3" foo-3: expected="bar-3", actual="bar-1" diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt index 2733df6cd..42758a829 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_legacy_spaces_accordingly.approved.txt @@ -3,10 +3,6 @@ A detailed report will be created at '*'. You can review the details by using ou 1 check(s) in 'de.retest.recheck.RecheckImplIT legacy spaces' found the following difference(s): Test 'with legacy spaces' has 9 difference(s) in 1 state(s): check resulted in: - Metadata Differences: - Please note that these differences do not affect the result and are not included in the difference count. - os.name: expected="null", actual="Linux" - os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': foo-1: expected="bar-1", actual="bar-3" foo-3: expected="bar-3", actual="bar-1" diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt index 6154a824a..8f3798da1 100644 --- a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_handle_spaces_accordingly.approved.txt @@ -3,10 +3,6 @@ A detailed report will be created at '*'. You can review the details by using ou 1 check(s) in 'de.retest.recheck.RecheckImplIT spaces' found the following difference(s): Test 'with spaces' has 9 difference(s) in 1 state(s): check resulted in: - Metadata Differences: - Please note that these differences do not affect the result and are not included in the difference count. - os.name: expected="null", actual="Linux" - os.version: expected="null", actual="4.4.0-101-generic" test (title) at 'foo[1]/bar[1]': foo-1: expected="bar-1", actual="bar-3" foo-3: expected="bar-3", actual="bar-1" From 2fbde36d5681d776c44e690b4eb460298417f275 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 15:59:07 +0200 Subject: [PATCH 013/160] Log _why_ an imported filter cannot be loaded... --- .../recheck/review/ignore/io/ImportExternalFilterLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoader.java b/src/main/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoader.java index deb0b1a08..07ae42bd6 100644 --- a/src/main/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoader.java +++ b/src/main/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoader.java @@ -27,7 +27,7 @@ protected Optional load( final MatchResult matcher ) { final Filter loaded = SearchFilterFiles.getFilterByName( reference ); return Optional.of( new ImportedExternalFilter( reference, loaded ) ); } catch ( final Exception e ) { - log.error( "Exception loading referenced filter '{}'.", reference ); + log.error( "Exception loading referenced filter '{}': {}.", reference, e.getMessage() ); return Optional.empty(); } catch ( final StackOverflowError e ) { log.error( "Encountered an infinite loop when loading cascading filters, e.g. see '{}'.", reference ); From 3f513c3d47630ebf8777a588a0188c75fc22a278 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 16:22:14 +0200 Subject: [PATCH 014/160] Adapt test accordingly... --- .../recheck/review/ignore/io/ImportExternalFilterLoaderIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoaderIT.java b/src/test/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoaderIT.java index 1f1add6db..306aed142 100644 --- a/src/test/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoaderIT.java +++ b/src/test/java/de/retest/recheck/review/ignore/io/ImportExternalFilterLoaderIT.java @@ -113,6 +113,6 @@ void import_non_existing_file_should_log_error() { assertThat( filter ).isEmpty(); - warningAndErrorLogs.assertContains( "Exception loading referenced filter 'nonexistent.filter'." ); + warningAndErrorLogs.assertContains( "Exception loading referenced filter 'nonexistent.filter'" ); } } From c12129b68d002b1a13a7eeda38248b63f5b96899 Mon Sep 17 00:00:00 2001 From: diba1013 Date: Wed, 8 Jul 2020 14:04:54 +0200 Subject: [PATCH 015/160] Add bot account for mergify to perform actions --- .mergify.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.mergify.yml b/.mergify.yml index 9511b0193..f55c01861 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -6,7 +6,8 @@ pull_request_rules: - "#changes-requested-reviews-by=0" - "-draft" actions: - rebase: {} + rebase: + bot_account: rebazer - name: "merge non-release PRs with strict rebase" conditions: @@ -19,6 +20,7 @@ pull_request_rules: strict: true strict_method: rebase method: merge + bot_account: rebazer - name: "merge release PRs with strict merge" conditions: @@ -30,6 +32,7 @@ pull_request_rules: merge: strict: true method: merge + bot_account: rebazer - name: "delete PR branches after merge" conditions: From bf2a1ab3993d9f032120dfd0a133317d0cc0c4ec Mon Sep 17 00:00:00 2001 From: diba1013 Date: Thu, 2 Jul 2020 10:52:19 +0200 Subject: [PATCH 016/160] Add exclude filter --- .../recheck/review/ignore/ExcludeFilter.java | 74 ++++++++++ .../review/ignore/ExcludeFilterTest.java | 127 ++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java create mode 100644 src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java diff --git a/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java b/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java new file mode 100644 index 000000000..3914c3680 --- /dev/null +++ b/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java @@ -0,0 +1,74 @@ +package de.retest.recheck.review.ignore; + +import java.util.Optional; +import java.util.function.Function; +import java.util.regex.MatchResult; +import java.util.regex.Pattern; + +import de.retest.recheck.ignore.Filter; +import de.retest.recheck.review.ignore.io.Loader; +import de.retest.recheck.review.ignore.io.RegexLoader; +import de.retest.recheck.ui.descriptors.Element; +import de.retest.recheck.ui.diff.AttributeDifference; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class ExcludeFilter implements Filter { + + @Getter( AccessLevel.PACKAGE ) + private final Filter filter; + + @Override + public boolean matches( final Element element ) { + return !filter.matches( element ); + } + + @Override + public boolean matches( final Element element, final ChangeType change ) { + return !filter.matches( element, change ); + } + + @Override + public boolean matches( final Element element, final String attributeKey ) { + return !filter.matches( element, attributeKey ); + } + + @Override + public boolean matches( final Element element, final AttributeDifference attributeDifference ) { + return !filter.matches( element, attributeDifference ); + } + + @Override + public String toString() { + return String.format( FilterLoader.FORMAT, filter ); + } + + public static class FilterLoader extends RegexLoader { + + private static final String FORMAT = "exclude(%s)"; + + private final Loader delegate; + + public FilterLoader( final Loader delegate ) { + super( Pattern.compile( "exclude\\((.+)\\)" ) ); + this.delegate = delegate; + } + + @Override + protected Optional load( final MatchResult matcher ) { + return delegate.load( matcher.group( 1 ) ) // + .map( ExcludeFilter::new ); + } + + @Override + public String save( final ExcludeFilter filter ) { + return format( filter, delegate::save ); + } + + private static String format( final ExcludeFilter filter, final Function wrapped ) { + return String.format( FORMAT, wrapped.apply( filter.filter ) ); + } + } +} diff --git a/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java b/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java new file mode 100644 index 000000000..05307a0d6 --- /dev/null +++ b/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java @@ -0,0 +1,127 @@ +package de.retest.recheck.review.ignore; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Optional; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import de.retest.recheck.ignore.Filter; +import de.retest.recheck.review.ignore.io.Loader; +import de.retest.recheck.ui.descriptors.Element; +import de.retest.recheck.ui.diff.AttributeDifference; + +class ExcludeFilterTest { + + Filter cut; + + Element trueElement; + Element falseElement; + + @BeforeEach + void setUp() { + trueElement = mock( Element.class ); + falseElement = mock( Element.class ); + + final Filter delegate = mock( Filter.class ); + when( delegate.matches( trueElement ) ).thenReturn( true ); + when( delegate.matches( eq( trueElement ), anyString() ) ).thenReturn( true ); + when( delegate.matches( eq( trueElement ), any( AttributeDifference.class ) ) ).thenReturn( true ); + when( delegate.matches( eq( trueElement ), any( Filter.ChangeType.class ) ) ).thenReturn( true ); + + cut = new ExcludeFilter( delegate ); + } + + @Test + void matches_should_always_be_inverted() { + assertThat( cut.matches( trueElement ) ).isFalse(); + assertThat( cut.matches( falseElement ) ).isTrue(); + + assertThat( cut.matches( trueElement, "a" ) ).isFalse(); + assertThat( cut.matches( falseElement, "a" ) ).isTrue(); + + assertThat( cut.matches( trueElement, mock( AttributeDifference.class ) ) ).isFalse(); + assertThat( cut.matches( falseElement, mock( AttributeDifference.class ) ) ).isTrue(); + + assertThat( cut.matches( trueElement, Filter.ChangeType.CHANGED ) ).isFalse(); + assertThat( cut.matches( falseElement, Filter.ChangeType.CHANGED ) ).isTrue(); + } + + @Nested + class FilterLoaderTest { + + Loader delegate; + Loader cut; + + @BeforeEach + void setUp() { + delegate = mock( Loader.class ); + + cut = new ExcludeFilter.FilterLoader( delegate ); + } + + @Test + void load_should_fail_if_incomplete() { + assertThat( cut.load( "exclude" ) ).isEmpty(); + assertThat( cut.load( "exclude(" ) ).isEmpty(); + } + + @Test + void load_should_fail_if_empty() { + assertThat( cut.load( "exclude()" ) ).isEmpty(); + } + + @Test + void load_should_delegate_if_parsed() { + final Filter wrapped = mock( Filter.class ); + when( delegate.load( "foo" ) ).thenReturn( Optional.of( wrapped ) ); + + assertThat( cut.load( "exclude(foo)" ) ).hasValueSatisfying( filter -> { + assertThat( filter.getFilter() ).isEqualTo( wrapped ); + } ); + } + + @Test + void load_should_forward_spaces_to_delegate() { + final Filter wrapped = mock( Filter.class ); + + when( delegate.load( " foo" ) ).thenReturn( Optional.of( wrapped ) ); + assertThat( cut.load( "exclude( foo)" ) ).isPresent(); + assertThat( cut.load( "exclude( foo )" ) ).isEmpty(); + + when( delegate.load( "foo " ) ).thenReturn( Optional.of( wrapped ) ); + assertThat( cut.load( "exclude(foo )" ) ).isPresent(); + assertThat( cut.load( "exclude( foo )" ) ).isEmpty(); + + when( delegate.load( " foo " ) ).thenReturn( Optional.of( wrapped ) ); + assertThat( cut.load( "exclude( foo )" ) ).isPresent(); + } + + @Test + void load_should_fail_if_delegate_fails_to_load() { + when( delegate.load( anyString() ) ).thenReturn( Optional.empty() ); + + assertThat( cut.load( "exclude(foo)" ) ).isEmpty(); + verify( delegate ).load( "foo" ); + } + + @Test + void save_should_delegate() { + when( delegate.save( any( Filter.class ) ) ).thenReturn( "foo" ); + + final Filter filter = mock( Filter.class ); + final ExcludeFilter negated = new ExcludeFilter( filter ); + + assertThat( cut.save( negated ) ).isEqualTo( "exclude(foo)" ); + verify( delegate ).save( filter ); + } + } +} From 3603483fa192216f188ef221cc0898ea2060eb50 Mon Sep 17 00:00:00 2001 From: diba1013 Date: Fri, 3 Jul 2020 14:52:43 +0200 Subject: [PATCH 017/160] Rewrite ExcludeFilter to be chainable and concatenate each result with inner filter with or: exclude(a), exclude(b) => !a && !b => !(a || b) This is because it is still one single filter to the outside which then can be easily included in others, without exposing the internal array. --- .../recheck/review/ignore/ExcludeFilter.java | 55 +++++++++---- .../review/ignore/ExcludeFilterTest.java | 78 +++++++++++++++++-- 2 files changed, 114 insertions(+), 19 deletions(-) diff --git a/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java b/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java index 3914c3680..85b7f2cb5 100644 --- a/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java +++ b/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java @@ -1,13 +1,15 @@ package de.retest.recheck.review.ignore; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; -import java.util.function.Function; -import java.util.regex.MatchResult; +import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import de.retest.recheck.ignore.CompoundFilter; import de.retest.recheck.ignore.Filter; import de.retest.recheck.review.ignore.io.Loader; -import de.retest.recheck.review.ignore.io.RegexLoader; import de.retest.recheck.ui.descriptors.Element; import de.retest.recheck.ui.diff.AttributeDifference; import lombok.AccessLevel; @@ -45,30 +47,57 @@ public String toString() { return String.format( FilterLoader.FORMAT, filter ); } - public static class FilterLoader extends RegexLoader { + public static class FilterLoader implements Loader { private static final String FORMAT = "exclude(%s)"; + private static final Pattern controlRegex = Pattern.compile( "^exclude\\((.+?)\\)(?:, exclude\\((.+?)\\))*$" ); + // Excludes can be nested, but must then only take the outermost closing parenthesis. + // Therefore a lookahead is necessary for the first and subsequent chunks, as well as the last chunk + private static final Pattern chunkRegex = Pattern.compile( + "(?:^exclude\\((.+?)\\)(?=, ))|(?:, exclude\\((.+?)\\)(?=, ))|(?:(?:, )?exclude\\((.+?)\\)$)" ); private final Loader delegate; public FilterLoader( final Loader delegate ) { - super( Pattern.compile( "exclude\\((.+)\\)" ) ); this.delegate = delegate; } @Override - protected Optional load( final MatchResult matcher ) { - return delegate.load( matcher.group( 1 ) ) // - .map( ExcludeFilter::new ); + public Optional load( final String line ) { + // Variable groups cannot be easily matched with Java Regex (see https://stackoverflow.com/a/6939587) + final Matcher control = controlRegex.matcher( line ); + if ( !control.matches() ) { + return Optional.empty(); + } + final Matcher chunks = chunkRegex.matcher( line ); + final List filters = new ArrayList<>(); + while ( chunks.find() ) { + final String start = chunks.group( 1 ); + final String middle = chunks.group( 2 ); + final String end = chunks.group( 3 ); + // Only one group matches, find out which + final String inner = start != null ? start : middle != null ? middle : end; + final Optional load = delegate.load( inner ); + if ( load.isPresent() ) { + filters.add( load.get() ); + } else { // There was a loading error, abort + return Optional.empty(); + } + } + // Filters should never be empty at this point + return Optional.of( new ExcludeFilter( new CompoundFilter( filters ) ) ); } @Override public String save( final ExcludeFilter filter ) { - return format( filter, delegate::save ); - } - - private static String format( final ExcludeFilter filter, final Function wrapped ) { - return String.format( FORMAT, wrapped.apply( filter.filter ) ); + final Filter inner = filter.getFilter(); + if ( inner instanceof CompoundFilter ) { + final List filters = ((CompoundFilter) inner).getFilters(); + return filters.stream() // + .map( filter1 -> String.format( FORMAT, delegate.save( filter1 ) ) ) // + .collect( Collectors.joining( ", " ) ); + } + return String.format( FORMAT, delegate.save( inner ) ); } } } diff --git a/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java b/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java index 05307a0d6..1d079afbf 100644 --- a/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java +++ b/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterTest.java @@ -5,7 +5,10 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.only; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import java.util.Optional; @@ -14,6 +17,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import de.retest.recheck.ignore.CompoundFilter; import de.retest.recheck.ignore.Filter; import de.retest.recheck.review.ignore.io.Loader; import de.retest.recheck.ui.descriptors.Element; @@ -72,6 +76,8 @@ void setUp() { void load_should_fail_if_incomplete() { assertThat( cut.load( "exclude" ) ).isEmpty(); assertThat( cut.load( "exclude(" ) ).isEmpty(); + assertThat( cut.load( "exclude(abc), exclude(" ) ).isEmpty(); + assertThat( cut.load( "exclude(abc, exclude(cde)" ) ).isEmpty(); } @Test @@ -80,13 +86,44 @@ void load_should_fail_if_empty() { } @Test - void load_should_delegate_if_parsed() { - final Filter wrapped = mock( Filter.class ); - when( delegate.load( "foo" ) ).thenReturn( Optional.of( wrapped ) ); + void load_should_load_single() { + final Filter abc = mock( Filter.class ); + + when( delegate.load( "abc" ) ).thenReturn( Optional.of( abc ) ); + + assertThat( cut.load( "exclude(abc)" ) ).isPresent(); + verify( delegate, only() ).load( "abc" ); + } + + @Test + void load_should_load_double() { + final Filter abc = mock( Filter.class ); + final Filter def = mock( Filter.class ); + + when( delegate.load( "abc" ) ).thenReturn( Optional.of( abc ) ); + when( delegate.load( "def" ) ).thenReturn( Optional.of( def ) ); - assertThat( cut.load( "exclude(foo)" ) ).hasValueSatisfying( filter -> { - assertThat( filter.getFilter() ).isEqualTo( wrapped ); - } ); + assertThat( cut.load( "exclude(abc), exclude(def)" ) ).isPresent(); + verify( delegate ).load( "abc" ); + verify( delegate ).load( "def" ); + verifyNoMoreInteractions( delegate ); + } + + @Test + void load_should_load_triple() { + final Filter abc = mock( Filter.class ); + final Filter def = mock( Filter.class ); + final Filter ghi = mock( Filter.class ); + + when( delegate.load( "abc" ) ).thenReturn( Optional.of( abc ) ); + when( delegate.load( "def" ) ).thenReturn( Optional.of( def ) ); + when( delegate.load( "ghi" ) ).thenReturn( Optional.of( ghi ) ); + + assertThat( cut.load( "exclude(abc), exclude(def), exclude(ghi)" ) ).isPresent(); + verify( delegate ).load( "abc" ); + verify( delegate ).load( "def" ); + verify( delegate ).load( "ghi" ); + verifyNoMoreInteractions( delegate ); } @Test @@ -113,6 +150,24 @@ void load_should_fail_if_delegate_fails_to_load() { verify( delegate ).load( "foo" ); } + @Test + void load_should_parse_nested_excludes() { + when( delegate.load( "abc, exclude(def)" ) ).thenReturn( Optional.of( mock( Filter.class ) ) ); + when( delegate.load( "ghi" ) ).thenReturn( Optional.of( mock( Filter.class ) ) ); + + assertThat( cut.load( "exclude(abc, exclude(def))" ) ).isPresent(); + assertThat( cut.load( "exclude(abc, exclude(def)), exclude(ghi)" ) ).isPresent(); + } + + @Test + void load_should_abort_if_multiple_child_fails() { + final Filter abc = mock( Filter.class ); + when( delegate.load( "abc" ) ).thenReturn( Optional.of( abc ) ); + + assertThat( cut.load( "exclude(abc), exclude(def)" ) ).isEmpty(); + assertThat( cut.load( "exclude(def), exclude(abc)" ) ).isEmpty(); + } + @Test void save_should_delegate() { when( delegate.save( any( Filter.class ) ) ).thenReturn( "foo" ); @@ -123,5 +178,16 @@ void save_should_delegate() { assertThat( cut.save( negated ) ).isEqualTo( "exclude(foo)" ); verify( delegate ).save( filter ); } + + @Test + void save_should_wrap_each_filter() { + when( delegate.save( any( Filter.class ) ) ).thenReturn( "foo" ); + + final Filter filter = mock( Filter.class ); + final ExcludeFilter negated = new ExcludeFilter( new CompoundFilter( filter, filter ) ); + + assertThat( cut.save( negated ) ).isEqualTo( "exclude(foo), exclude(foo)" ); + verify( delegate, times( 2 ) ).save( filter ); + } } } From 785bb4508aaefc5e78175aa14207a6da1a9cb130 Mon Sep 17 00:00:00 2001 From: diba1013 Date: Fri, 3 Jul 2020 16:37:05 +0200 Subject: [PATCH 018/160] Add log output if loading fails for inner filter so that the user can analyze why the loading failed. This is necessary, since the MatcherFilter, which eventually delegates to this filter, only throws an error for the remaining part, without specifying why it failed. --- .../java/de/retest/recheck/review/ignore/ExcludeFilter.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java b/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java index 85b7f2cb5..e29a24ec2 100644 --- a/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java +++ b/src/main/java/de/retest/recheck/review/ignore/ExcludeFilter.java @@ -15,7 +15,9 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +@Slf4j @RequiredArgsConstructor public class ExcludeFilter implements Filter { @@ -81,6 +83,7 @@ public Optional load( final String line ) { if ( load.isPresent() ) { filters.add( load.get() ); } else { // There was a loading error, abort + log.warn( "Could not find loader for inner part '{}'.", inner ); return Optional.empty(); } } From d908b608ad45edae2081e45a7eee26daf94015ec Mon Sep 17 00:00:00 2001 From: diba1013 Date: Fri, 3 Jul 2020 16:38:39 +0200 Subject: [PATCH 019/160] Add integration test to handle multiple excludes --- .../review/ignore/ExcludeFilterIT.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/test/java/de/retest/recheck/review/ignore/ExcludeFilterIT.java diff --git a/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterIT.java b/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterIT.java new file mode 100644 index 000000000..5f0ace807 --- /dev/null +++ b/src/test/java/de/retest/recheck/review/ignore/ExcludeFilterIT.java @@ -0,0 +1,35 @@ +package de.retest.recheck.review.ignore; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import org.junit.jupiter.api.Test; + +import de.retest.recheck.ui.descriptors.Element; +import de.retest.recheck.ui.diff.AttributeDifference; + +class ExcludeFilterIT { + + @Test + void load_should_handle_multiple_entries() { + final Element element = mock( Element.class ); + + final AttributeFilter.AttributeFilterLoader delegate = new AttributeFilter.AttributeFilterLoader(); + final ExcludeFilter.FilterLoader cut = new ExcludeFilter.FilterLoader( delegate ); + + assertThat( cut.load( "exclude(attribute=text), exclude(attribute=font)" ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( element, "class" ) ).isTrue(); + assertThat( filter.matches( element, difference( "class" ) ) ).isTrue(); + + assertThat( filter.matches( element, "font" ) ).isFalse(); + assertThat( filter.matches( element, difference( "font" ) ) ).isFalse(); + + assertThat( filter.matches( element, "text" ) ).isFalse(); + assertThat( filter.matches( element, difference( "text" ) ) ).isFalse(); + } ); + } + + private AttributeDifference difference( final String key ) { + return new AttributeDifference( key, "expected", "actual" ); + } +} From 41f452aa36f7766452bbd8de5812026e22167679 Mon Sep 17 00:00:00 2001 From: diba1013 Date: Fri, 3 Jul 2020 16:39:46 +0200 Subject: [PATCH 020/160] Integrate exclude into MatcherFilter which requires to move the regex above the filter initialization, because of the recursive use of the MatcherFilterLoader. --- CHANGELOG.md | 1 + .../recheck/review/ignore/MatcherFilter.java | 25 +- .../review/ignore/MatcherFilterIT.java | 430 ++++++++++++++++++ 3 files changed, 452 insertions(+), 4 deletions(-) create mode 100644 src/test/java/de/retest/recheck/review/ignore/MatcherFilterIT.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ed897782..60e6892f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ Table of Contents ### New Features * Metadata differences are now filterable via the recheck.ignore. New `volatile-metadata.filter` and `metadata.filter` filters have been added, where the first one filters metadata which is added for diagnosing purposes and too verbose to be displayed upon every change and the latter filters _all_ metadata. They can be imported with `import: volatile-metadata.filter` and `import: metadata.filter` in `recheck.ignore`. +* Add `exclude()` filter expression to allow child elements to be excluded. Ignoring an element `matcher: type=body, exclude(matcher: type=button)` will ignore everything below the `body` element but still capture changes for `button` elements. * Add a `disableReportUpload` method. ### Improvements diff --git a/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java b/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java index ea7934e24..c3838f280 100644 --- a/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java +++ b/src/main/java/de/retest/recheck/review/ignore/MatcherFilter.java @@ -18,6 +18,7 @@ import de.retest.recheck.review.ignore.InsertedFilter.InsertedFilterLoader; import de.retest.recheck.review.ignore.PixelDiffFilter.PixelDiffFilterLoader; import de.retest.recheck.review.ignore.ValueRegexFilter.ValueRegexFilterLoader; +import de.retest.recheck.review.ignore.io.ImportExternalFilterLoader; import de.retest.recheck.review.ignore.io.InheritanceLoader; import de.retest.recheck.review.ignore.io.Loader; import de.retest.recheck.review.ignore.io.Loaders; @@ -49,7 +50,27 @@ public String toString() { public static class MatcherFilterLoader extends RegexLoader { + static final String MATCHER = "matcher: "; + + private static final Pattern REGEX = Pattern.compile( MATCHER + "(.+)" ); + + public static final Loader excludeFilters = new InheritanceLoader<>( Arrays.asList( // + Pair.of( MatcherFilter.class, new MatcherFilterLoader() ), // + + Pair.of( AttributeFilter.class, new AttributeFilterLoader() ), // + Pair.of( AttributeRegexFilter.class, new AttributeRegexFilterLoader() ), // + + Pair.of( PixelDiffFilter.class, new PixelDiffFilterLoader() ), // + Pair.of( ValueRegexFilter.class, new ValueRegexFilterLoader() ), // + Pair.of( InsertedFilter.class, new InsertedFilterLoader() ), // + Pair.of( DeletedFilter.class, new DeletedFilterLoader() ), // + + Pair.of( ImportedExternalFilter.class, new ImportExternalFilterLoader() ) // + ) ); + private static final Loader chainableFilter = new InheritanceLoader<>( Arrays.asList( // + Pair.of( ExcludeFilter.class, new ExcludeFilter.FilterLoader( excludeFilters ) ), // + Pair.of( AttributeFilter.class, new AttributeFilterLoader() ), // Pair.of( AttributeFilter.class, new LegacyAttributeFilterLoader() ), // Pair.of( AttributeRegexFilter.class, new AttributeRegexFilterLoader() ), // @@ -60,10 +81,6 @@ public static class MatcherFilterLoader extends RegexLoader { Pair.of( DeletedFilter.class, new DeletedFilterLoader() ) // ) ); - static final String MATCHER = "matcher: "; - - private static final Pattern REGEX = Pattern.compile( MATCHER + "(.+)" ); - public MatcherFilterLoader() { super( REGEX ); } diff --git a/src/test/java/de/retest/recheck/review/ignore/MatcherFilterIT.java b/src/test/java/de/retest/recheck/review/ignore/MatcherFilterIT.java new file mode 100644 index 000000000..8d9f56d99 --- /dev/null +++ b/src/test/java/de/retest/recheck/review/ignore/MatcherFilterIT.java @@ -0,0 +1,430 @@ +package de.retest.recheck.review.ignore; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import de.retest.recheck.ignore.Filter; +import de.retest.recheck.review.ignore.MatcherFilter.MatcherFilterLoader; +import de.retest.recheck.ui.Path; +import de.retest.recheck.ui.PathElement; +import de.retest.recheck.ui.descriptors.Attributes; +import de.retest.recheck.ui.descriptors.Element; +import de.retest.recheck.ui.descriptors.IdentifyingAttributes; +import de.retest.recheck.ui.descriptors.MutableAttributes; +import de.retest.recheck.ui.descriptors.PathAttribute; +import de.retest.recheck.ui.descriptors.RootElement; +import de.retest.recheck.ui.descriptors.StringAttribute; +import de.retest.recheck.ui.diff.AttributeDifference; + +class MatcherFilterIT { + + Element html; + Element body; + Element subscribe; + Element unsubscribe; + Element div1; + Element form; + Element input; + Element div2; + Element nav; + + MatcherFilterLoader loader; + + @BeforeEach + void setUp() { + loader = new MatcherFilterLoader(); + + html = root( "html", attributes( "lang", "en" ) ); + body = element( html, "body", id( html, "body", 1 ) ); + subscribe = element( body, "button", id( body, "button", 1, "id", "btn-subscribe" ) ); + unsubscribe = element( body, "button", id( body, "button", 2, "id", "btn-unsubscribe" ) ); + div1 = element( body, "div", id( body, "div", 1, "id", "div" ) ); + form = element( div1, "form", id( div1, "form", 1, "id", "form" ) ); + input = element( form, "input", id( form, "input", 1, "id", "input" ) ); + div2 = element( body, "div", id( body, "div", 2 ) ); + nav = element( div2, "nav", id( div2, "nav", 1 ) ); + } + + @Test + void exclude_matcher_should_correctly_apply_to_chained_and_nested_children() { + final String line = + "matcher: type=body, exclude(matcher: id=btn-subscribe), exclude(matcher: xpath=html/body/div, exclude(matcher: id=form))"; + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( html ) ).isFalse(); + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( subscribe ) ).isFalse(); + assertThat( filter.matches( unsubscribe ) ).isTrue(); + assertThat( filter.matches( div1 ) ).isFalse(); + assertThat( filter.matches( form ) ).isTrue(); + assertThat( filter.matches( input ) ).isTrue(); + assertThat( filter.matches( div2 ) ).isTrue(); + assertThat( filter.matches( nav ) ).isTrue(); + } ); + } + + @ParameterizedTest + @ValueSource( strings = { "attribute", "attribute-regex" } ) + void exclude_matcher_with_attribute_should_only_match_changed_for_that_element_and_attribute_value( String key ) { + String line = String.format( "matcher: type=body, exclude(matcher: id=form, %s=text)", key ); + final AttributeDifference text = new AttributeDifference( "text", "foo", "bar" ); + final AttributeDifference content = new AttributeDifference( "content", "foo", "bar" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( body, "content" ) ).isTrue(); + assertThat( filter.matches( body, content ) ).isTrue(); + assertThat( filter.matches( body, "text" ) ).isTrue(); + assertThat( filter.matches( body, text ) ).isTrue(); + + assertThat( filter.matches( form ) ).isTrue(); + assertThat( filter.matches( form, "content" ) ).isTrue(); + assertThat( filter.matches( form, content ) ).isTrue(); + assertThat( filter.matches( form, "text" ) ).isFalse(); + assertThat( filter.matches( form, text ) ).isFalse(); + } ); + } + + @ParameterizedTest + @ValueSource( strings = { "attribute", "attribute-regex" } ) + void exclude_matcher_with_attribute_and_pixel_diff_should_only_match_element_attribute_pixel_differences( + String key ) { + String line = String + .format( "matcher: type=body, exclude(matcher: id=div, %s=border-bottom-width, pixel-diff=5px)", key ); + + AttributeDifference equalBelow = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + AttributeDifference equalEqual = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + AttributeDifference equalAbove = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + AttributeDifference nonEqualBelow = new AttributeDifference( "border-top-width", "1px", "2px" ); + AttributeDifference nonEqualEqual = new AttributeDifference( "border-top-width", "1px", "5px" ); + AttributeDifference nonEqualAbove = new AttributeDifference( "border-top-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( body, "border-bottom-width" ) ).isTrue(); + assertThat( filter.matches( body, "border-top-width" ) ).isTrue(); + assertThat( filter.matches( body, equalBelow ) ).isTrue(); + assertThat( filter.matches( body, equalEqual ) ).isTrue(); + assertThat( filter.matches( body, equalAbove ) ).isTrue(); + assertThat( filter.matches( body, nonEqualBelow ) ).isTrue(); + assertThat( filter.matches( body, nonEqualEqual ) ).isTrue(); + assertThat( filter.matches( body, nonEqualAbove ) ).isTrue(); + + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, "border-bottom-width" ) ).isTrue(); + assertThat( filter.matches( div1, "border-top-width" ) ).isTrue(); + assertThat( filter.matches( div1, equalBelow ) ).isFalse(); + assertThat( filter.matches( div1, equalEqual ) ).isFalse(); + assertThat( filter.matches( div1, equalAbove ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualBelow ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualEqual ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualAbove ) ).isTrue(); + } ); + } + + @ParameterizedTest + @ValueSource( strings = { "attribute", "attribute-regex" } ) + void exclude_matcher_with_attribute_and_value_should_only_match_changed_for_that_element_and_attribute_value( + String key ) { + String line = String + .format( "matcher: type=body, exclude(matcher: id=div, %s=border-bottom-width, value-regex=5px)", key ); + + final AttributeDifference equalBelow = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equalEqual = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference equalAbove = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + final AttributeDifference nonEqualBelow = new AttributeDifference( "border-top-width", "1px", "2px" ); + final AttributeDifference nonEqualEqual = new AttributeDifference( "border-top-width", "1px", "5px" ); + final AttributeDifference nonEqualAbove = new AttributeDifference( "border-top-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( body, "border-bottom-width" ) ).isTrue(); + assertThat( filter.matches( body, "border-top-width" ) ).isTrue(); + assertThat( filter.matches( body, equalBelow ) ).isTrue(); + assertThat( filter.matches( body, equalEqual ) ).isTrue(); + assertThat( filter.matches( body, equalAbove ) ).isTrue(); + assertThat( filter.matches( body, nonEqualBelow ) ).isTrue(); + assertThat( filter.matches( body, nonEqualEqual ) ).isTrue(); + assertThat( filter.matches( body, nonEqualAbove ) ).isTrue(); + + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, "border-bottom-width" ) ).isTrue(); + assertThat( filter.matches( div1, "border-top-width" ) ).isTrue(); + assertThat( filter.matches( div1, equalBelow ) ).isTrue(); + assertThat( filter.matches( div1, equalEqual ) ).isFalse(); + assertThat( filter.matches( div1, equalAbove ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualBelow ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualEqual ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualAbove ) ).isTrue(); + } ); + } + + @Test + void exclude_matcher_with_pixel_diff_should_only_match_pixel_differences() { + String line = "matcher: type=body, exclude(matcher: id=div, pixel-diff=5px)"; + + final AttributeDifference below = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equal = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference above = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( body, below ) ).isTrue(); + assertThat( filter.matches( body, equal ) ).isTrue(); + assertThat( filter.matches( body, above ) ).isTrue(); + + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, below ) ).isFalse(); + assertThat( filter.matches( div1, equal ) ).isFalse(); + assertThat( filter.matches( div1, above ) ).isTrue(); + } ); + } + + @Test + void exclude_matcher_with_value_should_only_match_exact_value() { + String line = "matcher: type=body, exclude(matcher: id=div, value-regex=5px)"; + + final AttributeDifference below = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equal = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference above = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( body, below ) ).isTrue(); + assertThat( filter.matches( body, equal ) ).isTrue(); + assertThat( filter.matches( body, above ) ).isTrue(); + + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, below ) ).isTrue(); + assertThat( filter.matches( div1, equal ) ).isFalse(); + assertThat( filter.matches( div1, above ) ).isTrue(); + } ); + } + + @Test + void exclude_matcher_with_inserted_should_only_match_inserted_differences() { + String line = "matcher: xpath=html/body/div[2], exclude(matcher: type=nav, change=inserted)"; + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( div2 ) ).isTrue(); + assertThat( filter.matches( div2, Filter.ChangeType.DELETED ) ).isTrue(); + assertThat( filter.matches( div2, Filter.ChangeType.INSERTED ) ).isTrue(); + + assertThat( filter.matches( nav ) ).isTrue(); + assertThat( filter.matches( nav, Filter.ChangeType.DELETED ) ).isTrue(); + assertThat( filter.matches( nav, Filter.ChangeType.INSERTED ) ).isFalse(); + } ); + } + + @Test + void exclude_matcher_with_deleted_should_only_match_deleted_differences() { + String line = "matcher: xpath=html/body/div[2], exclude(matcher: type=nav, change=deleted)"; + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( div2 ) ).isTrue(); + assertThat( filter.matches( div2, Filter.ChangeType.INSERTED ) ).isTrue(); + assertThat( filter.matches( div2, Filter.ChangeType.DELETED ) ).isTrue(); + + assertThat( filter.matches( nav ) ).isTrue(); + assertThat( filter.matches( nav, Filter.ChangeType.INSERTED ) ).isTrue(); + assertThat( filter.matches( nav, Filter.ChangeType.DELETED ) ).isFalse(); + } ); + } + + @ParameterizedTest + @ValueSource( strings = { "attribute", "attribute-regex" } ) + void exclude_attribute_should_just_match_changed( String key ) { + String line = String.format( "matcher: type=form, exclude(%s=text)", key ); + final AttributeDifference text = new AttributeDifference( "text", "foo", "bar" ); + final AttributeDifference content = new AttributeDifference( "content", "foo", "bar" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( form ) ).isTrue(); + assertThat( filter.matches( form, "content" ) ).isTrue(); + assertThat( filter.matches( form, content ) ).isTrue(); + assertThat( filter.matches( form, "text" ) ).isFalse(); + assertThat( filter.matches( form, text ) ).isFalse(); + } ); + } + + @ParameterizedTest + @ValueSource( strings = { "attribute", "attribute-regex" } ) + void exclude_attribute_and_pixel_diff_should_match_changed( String key ) { + String line = String.format( "matcher: type=div, exclude(%s=border-bottom-width, pixel-diff=5px)", key ); + + final AttributeDifference equalBelow = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equalEqual = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference equalAbove = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + final AttributeDifference nonEqualBelow = new AttributeDifference( "border-top-width", "1px", "2px" ); + final AttributeDifference nonEqualEqual = new AttributeDifference( "border-top-width", "1px", "5px" ); + final AttributeDifference nonEqualAbove = new AttributeDifference( "border-top-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( form ) ).isTrue(); + + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, "border-bottom-width" ) ).isTrue(); + assertThat( filter.matches( div1, "border-top-width" ) ).isTrue(); + assertThat( filter.matches( div1, equalBelow ) ).isFalse(); + assertThat( filter.matches( div1, equalEqual ) ).isFalse(); + assertThat( filter.matches( div1, equalAbove ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualBelow ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualEqual ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualAbove ) ).isTrue(); + } ); + } + + @ParameterizedTest + @ValueSource( strings = { "attribute", "attribute-regex" } ) + void exclude_attribute_and_value_should_match_changed( String key ) { + String line = String.format( "matcher: type=div, exclude(%s=border-bottom-width, value-regex=5px)", key ); + + final AttributeDifference equalBelow = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equalEqual = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference equalAbove = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + final AttributeDifference nonEqualBelow = new AttributeDifference( "border-top-width", "1px", "2px" ); + final AttributeDifference nonEqualEqual = new AttributeDifference( "border-top-width", "1px", "5px" ); + final AttributeDifference nonEqualAbove = new AttributeDifference( "border-top-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( form ) ).isTrue(); + + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, "border-bottom-width" ) ).isTrue(); + assertThat( filter.matches( div1, "border-top-width" ) ).isTrue(); + assertThat( filter.matches( div1, equalBelow ) ).isTrue(); + assertThat( filter.matches( div1, equalEqual ) ).isFalse(); + assertThat( filter.matches( div1, equalAbove ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualBelow ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualEqual ) ).isTrue(); + assertThat( filter.matches( div1, nonEqualAbove ) ).isTrue(); + } ); + } + + @Test + void exclude_pixel_diff_should_only_match_changed() { + String line = "matcher: id=div, exclude(pixel-diff=5px)"; + + final AttributeDifference below = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equal = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference above = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, below ) ).isFalse(); + assertThat( filter.matches( div1, equal ) ).isFalse(); + assertThat( filter.matches( div1, above ) ).isTrue(); + } ); + } + + @Test + void exclude_value_should_only_match_exact_value() { + String line = "matcher: id=div, exclude(value-regex=5px)"; + + final AttributeDifference below = new AttributeDifference( "border-bottom-width", "1px", "2px" ); + final AttributeDifference equal = new AttributeDifference( "border-bottom-width", "1px", "5px" ); + final AttributeDifference above = new AttributeDifference( "border-bottom-width", "1px", "7px" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( div1 ) ).isTrue(); + assertThat( filter.matches( div1, below ) ).isTrue(); + assertThat( filter.matches( div1, equal ) ).isFalse(); + assertThat( filter.matches( div1, above ) ).isTrue(); + } ); + } + + @Test + void exclude_inserted_should_only_match_inserted_differences() { + String line = "matcher: type=nav, exclude(change=inserted)"; + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( nav ) ).isTrue(); + assertThat( filter.matches( nav, Filter.ChangeType.INSERTED ) ).isFalse(); + assertThat( filter.matches( nav, Filter.ChangeType.DELETED ) ).isTrue(); + } ); + } + + @Test + void exclude_deleted_should_only_match_deleted_differences() { + String line = "matcher: type=nav, exclude(change=deleted)"; + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( nav ) ).isTrue(); + assertThat( filter.matches( nav, Filter.ChangeType.DELETED ) ).isFalse(); + assertThat( filter.matches( nav, Filter.ChangeType.INSERTED ) ).isTrue(); + } ); + } + + @Test + void exclude_import_content_should_match_content() { + String line = "matcher: type=body, exclude(import: content.filter)"; + final AttributeDifference text = new AttributeDifference( "text", "foo", "bar" ); + final AttributeDifference width = new AttributeDifference( "width", "10px", "20px" ); + final AttributeDifference placeholder = new AttributeDifference( "placeholder", "Email", "Username" ); + + assertThat( loader.load( line ) ).hasValueSatisfying( filter -> { + assertThat( filter.matches( body ) ).isTrue(); + assertThat( filter.matches( body, "width" ) ).isTrue(); + assertThat( filter.matches( body, width ) ).isTrue(); + assertThat( filter.matches( body, "title" ) ).isFalse(); + assertThat( filter.matches( body, text ) ).isFalse(); + + assertThat( filter.matches( input ) ).isTrue(); + assertThat( filter.matches( input, "placeholder" ) ).isFalse(); + assertThat( filter.matches( input, placeholder ) ).isFalse(); + } ); + } + + private RootElement root( final String type, final Attributes attributes ) { + return new RootElement( type, id( type, Path.fromString( type ) ), attributes, null, null, 0, null ); + } + + private Element element( final Element parent, final String type, final IdentifyingAttributes id ) { + return element( parent, type, id, attributes() ); + } + + private Element element( final Element parent, final String type, final IdentifyingAttributes id, + final Attributes attributes ) { + final Element element = Element.create( type, parent, id, attributes ); + parent.addChildren( element ); + return element; + } + + private Attributes attributes( final String... attributes ) { + final MutableAttributes builder = new MutableAttributes(); + for ( int i = 0; i < attributes.length; i += 2 ) { + builder.put( attributes[i], attributes[i + 1] ); + } + return builder.immutable(); + } + + private IdentifyingAttributes id( final Element parent, final String type, final int suffix, + final String... attributes ) { + return id( type, Path.path( parent.getIdentifyingAttributes().getPathTyped(), new PathElement( type, suffix ) ), + attributes ); + } + + private IdentifyingAttributes id( final String type, final Path path, final String... attributes ) { + return new IdentifyingAttributes( // + Stream.concat( // + Stream.of( // + new PathAttribute( path ), // + new StringAttribute( IdentifyingAttributes.TYPE_ATTRIBUTE_KEY, type ) // + ), // + IntStream.range( 0, attributes.length / 2 ) // + .mapToObj( i -> new StringAttribute( attributes[i], attributes[i + 1] ) ) // + ).collect( Collectors.toList() ) ); + } +} From 1839597036bdb4f073062f9dc1a2965ceb37f02f Mon Sep 17 00:00:00 2001 From: diba1013 Date: Fri, 3 Jul 2020 16:56:03 +0200 Subject: [PATCH 021/160] Add RecheckImplIT for exclude --- .../java/de/retest/recheck/RecheckImplIT.java | 8 ++ ...attributes_with_change_suffix.approved.txt | 10 ++ .../with_exclude.check.recheck/retest.xml | 132 ++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_ignore_everything_but_include_deleted_and_same_attributes_with_change_suffix.approved.txt create mode 100644 src/test/resources/retest/recheck/de.retest.recheck.RecheckImplIT/with_exclude.check.recheck/retest.xml diff --git a/src/test/java/de/retest/recheck/RecheckImplIT.java b/src/test/java/de/retest/recheck/RecheckImplIT.java index 270e4b801..2d5b70b9f 100644 --- a/src/test/java/de/retest/recheck/RecheckImplIT.java +++ b/src/test/java/de/retest/recheck/RecheckImplIT.java @@ -55,6 +55,7 @@ void diff_should_handle_legacy_spaces_accordingly() { execute( "with legacy spaces", RecheckOptions.builder() // .setIgnore( METADATA_FILTER ) // Ignore metadata .fileNamerStrategy( fileNamerStrategy ) // + .setIgnore( METADATA_FILTER ) // .build() ); } @@ -63,9 +64,16 @@ void diff_should_handle_spaces_accordingly() { execute( "with spaces", RecheckOptions.builder() // .setIgnore( METADATA_FILTER ) // .suiteName( RecheckImplIT.class.getName() + " spaces" ) // + .setIgnore( METADATA_FILTER ) // .build() ); } + @Test + void diff_should_ignore_everything_but_include_deleted_and_same_attributes_with_change_suffix() { + execute( "with_exclude", withIgnore( Filters.parse( + "matcher: type=test, exclude(matcher: type=same, exclude(attribute-regex=bar-\\d)), exclude(matcher: type=delete)" ) ) ); + } + private RecheckOptions withIgnore( final Filter ignore ) { return RecheckOptions.builder() // .setIgnore( new CompoundFilter( ignore, METADATA_FILTER ) ) // Ignore all (even metadata) diff --git a/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_ignore_everything_but_include_deleted_and_same_attributes_with_change_suffix.approved.txt b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_ignore_everything_but_include_deleted_and_same_attributes_with_change_suffix.approved.txt new file mode 100644 index 000000000..0e8e513fa --- /dev/null +++ b/src/test/resources/de/retest/recheck/RecheckImplIT.diff_should_ignore_everything_but_include_deleted_and_same_attributes_with_change_suffix.approved.txt @@ -0,0 +1,10 @@ +A detailed report will be created at '*'. You can review the details by using our CLI (https://github.com/retest/recheck.cli/) or GUI (https://retest.de/review/). + +1 check(s) in 'de.retest.recheck.RecheckImplIT' found the following difference(s): +Test 'with_exclude' has 3 difference(s) in 1 state(s): +check resulted in: + same (same-id) at 'foo[1]/bar[1]/same[1]': + bar-2-change: expected="(default or absent)", actual="bar-2" + bar-3-change: expected="(default or absent)", actual="bar-3" + delete (delete-id) at 'foo[1]/bar[1]/remove[1]/delete[1]': + was deleted diff --git a/src/test/resources/retest/recheck/de.retest.recheck.RecheckImplIT/with_exclude.check.recheck/retest.xml b/src/test/resources/retest/recheck/de.retest.recheck.RecheckImplIT/with_exclude.check.recheck/retest.xml new file mode 100644 index 000000000..5c50780ac --- /dev/null +++ b/src/test/resources/retest/recheck/de.retest.recheck.RecheckImplIT/with_exclude.check.recheck/retest.xml @@ -0,0 +1,132 @@ + + + + + + + test + foo[1]/bar[1] + 1 + test + test + + + + + + foo-1 + bar-1 + + + foo-2 + bar-2 + + + foo-3 + bar-3 + + + + + + + same + foo[1]/bar[1]/same[1] + 1 + same + same + + + + + + bar-1 + bar-1 + + + bar-2 + bar-2 + + + bar-3 + bar-3 + + + + + + + + delete + foo[1]/bar[1]/remove[1]/delete[1] + 1 + delete + delete + + + + + + bar-1 + bar-1 + + + bar-2 + bar-2 + + + bar-3 + bar-3 + + + + + + + + time.time + 16:55:21.113 + + + time.zone + Europe/Berlin + + + time.offset + +02:00 + + + os.arch + amd64 + + + vcs.commit + 79327c351bef2439fde41247598b8cacd5c175f6 + + + os.name + Windows 10 + + + time.date + 2020-07-03 + + + vcs.branch + feature/negate-filters + + + vcs.name + git + + + machine.name + PC-BASTIAN + + + os.version + 10.0 + + + + From 94f0f8ad2888ce015f95f900c921de9a39499a47 Mon Sep 17 00:00:00 2001 From: Jeremias Roessler Date: Tue, 7 Jul 2020 11:23:56 +0200 Subject: [PATCH 022/160] Add example of exclude to the default recheck.ignore file --- src/main/resources/default-recheck.ignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/default-recheck.ignore b/src/main/resources/default-recheck.ignore index d95171c35..d5fe64d44 100644 --- a/src/main/resources/default-recheck.ignore +++ b/src/main/resources/default-recheck.ignore @@ -6,6 +6,9 @@ # Or via absolute XPath: # matcher: xpath=html[1]/body[1]/iframe[1] +# Or if you want to ignore everything, except specific dom-subtrees: +# matcher: type=html, exclude(matcher: xpath=html/body/section[4]) + # To ignore attributes globally, use: # attribute=class From 4440c86921fae19643aead92df2fb6b4d1fca59c Mon Sep 17 00:00:00 2001 From: diba1013 Date: Tue, 14 Jul 2020 17:32:02 +0200 Subject: [PATCH 023/160] Change from primitive boolean to Boolean to allow for null values so that the property can be read instead --- .../de/retest/recheck/RecheckOptions.java | 6 ++- .../de/retest/recheck/RecheckOptionsTest.java | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/retest/recheck/RecheckOptions.java b/src/main/java/de/retest/recheck/RecheckOptions.java index 3e032bb5b..87a7a87df 100644 --- a/src/main/java/de/retest/recheck/RecheckOptions.java +++ b/src/main/java/de/retest/recheck/RecheckOptions.java @@ -130,7 +130,7 @@ public static class RecheckOptionsBuilder { private NamingStrategy namingStrategy = new ClassAndMethodBasedNamingStrategy(); private ProjectLayout projectLayout = new MavenProjectLayout(); private String suiteName = null; - private boolean reportUploadEnabled = false; + private Boolean reportUploadEnabled; private Filter ignoreFilter = null; private RetestIdProvider retestIdProvider = RetestIdProviderUtil.getConfiguredRetestIdProvider(); private final List ignoreFilterToAdd = new ArrayList<>(); @@ -274,7 +274,9 @@ public RecheckOptionsBuilder retestIdProvider( final RetestIdProvider retestIdPr public RecheckOptions build() { final String suiteName = getSuiteName(); final NamingStrategy namingStrategy = new FixedSuiteNamingStrategy( suiteName, this.namingStrategy ); - return new RecheckOptions( fileNamerStrategy, namingStrategy, projectLayout, reportUploadEnabled, + return new RecheckOptions( fileNamerStrategy, namingStrategy, projectLayout, + reportUploadEnabled != null ? reportUploadEnabled + : RecheckProperties.getInstance().rehubReportUploadEnabled(), buildFilter( suiteName ), retestIdProvider ); } diff --git a/src/test/java/de/retest/recheck/RecheckOptionsTest.java b/src/test/java/de/retest/recheck/RecheckOptionsTest.java index 38a505ddc..811e47180 100644 --- a/src/test/java/de/retest/recheck/RecheckOptionsTest.java +++ b/src/test/java/de/retest/recheck/RecheckOptionsTest.java @@ -14,6 +14,9 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import org.junitpioneer.jupiter.ClearSystemProperty; +import org.junitpioneer.jupiter.SetSystemProperty; import de.retest.recheck.RecheckOptions.RecheckOptionsBuilder; import de.retest.recheck.ignore.CompoundFilter; @@ -139,4 +142,40 @@ static Stream suiteNamesProjectLayout() { .suiteName( "name" ) // ); } + + @Test + @SetSystemProperty( key = RecheckProperties.REHUB_REPORT_UPLOAD_ENABLED_PROPERTY_KEY, value = "true" ) + void build_with_rehub_not_set_should_read_property_true() { + final RecheckOptions cut = RecheckOptions.builder().build(); + assertThat( cut.isReportUploadEnabled() ).isTrue(); + } + + @Test + @SetSystemProperty( key = RecheckProperties.REHUB_REPORT_UPLOAD_ENABLED_PROPERTY_KEY, value = "false" ) + void build_with_rehub_not_set_should_read_property_false() { + final RecheckOptions cut = RecheckOptions.builder().build(); + assertThat( cut.isReportUploadEnabled() ).isFalse(); + } + + @ParameterizedTest + @ValueSource( strings = { "true", "false" } ) + @ClearSystemProperty( key = RecheckProperties.REHUB_REPORT_UPLOAD_ENABLED_PROPERTY_KEY ) + void build_with_rehub_enabled_should_overwrite_property_regardless_of_its_value( String global ) { + System.setProperty( RecheckProperties.REHUB_REPORT_UPLOAD_ENABLED_PROPERTY_KEY, global ); + final RecheckOptions cut = RecheckOptions.builder() // + .enableReportUpload() // + .build(); + assertThat( cut.isReportUploadEnabled() ).isTrue(); + } + + @ParameterizedTest + @ValueSource( strings = { "true", "false" } ) + @ClearSystemProperty( key = RecheckProperties.REHUB_REPORT_UPLOAD_ENABLED_PROPERTY_KEY ) + void build_with_rehub_disabled_should_overwrite_property_regardless_of_its_value( String global ) { + System.setProperty( RecheckProperties.REHUB_REPORT_UPLOAD_ENABLED_PROPERTY_KEY, global ); + final RecheckOptions cut = RecheckOptions.builder() // + .disableReportUpload() // + .build(); + assertThat( cut.isReportUploadEnabled() ).isFalse(); + } } From dbe6b5bb9a9b2f1625680c4be9efe5e3f40ff5e8 Mon Sep 17 00:00:00 2001 From: diba1013 Date: Tue, 14 Jul 2020 17:49:47 +0200 Subject: [PATCH 024/160] Use RecheckOptions#isReportUploadEnabled as single source of truth since it should now be properly reflected inside the options --- src/main/java/de/retest/recheck/RecheckImpl.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/de/retest/recheck/RecheckImpl.java b/src/main/java/de/retest/recheck/RecheckImpl.java index d4d8cc940..ea3b0748c 100644 --- a/src/main/java/de/retest/recheck/RecheckImpl.java +++ b/src/main/java/de/retest/recheck/RecheckImpl.java @@ -74,7 +74,7 @@ public RecheckImpl( final RecheckOptions options ) { suite = SuiteAggregator.getInstance().getSuite( suiteName, options.getProjectLayout().getTestSourcesRoot().orElse( null ) ); - if ( isRehubEnabled( options ) ) { + if ( options.isReportUploadEnabled() ) { try { Rehub.authenticate(); } catch ( final HeadlessException e ) { @@ -84,10 +84,6 @@ public RecheckImpl( final RecheckOptions options ) { } } - private boolean isRehubEnabled( final RecheckOptions options ) { - return options.isReportUploadEnabled() || RecheckProperties.getInstance().rehubReportUploadEnabled(); - } - @Override public void startTest() { if ( options.getFileNamerStrategy() != null ) { From 48e574c2c63a01759d6079b00010129c89b2a85f Mon Sep 17 00:00:00 2001 From: diba1013 Date: Mon, 13 Jul 2020 10:53:02 +0200 Subject: [PATCH 025/160] Move project configuration to before options are constructed to ensure proper project and configuration (recheck.properties) to be accessible for initialization. --- CHANGELOG.md | 2 ++ src/main/java/de/retest/recheck/RecheckImpl.java | 2 -- src/main/java/de/retest/recheck/RecheckOptions.java | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 60e6892f5..8c991b00c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ Table of Contents ### Improvements * Have the console output much more compact in terms of whitespace used. Con: makes it harder to spot difference details... +* Project discovery and initialization is now done within `RecheckOptionsBuilder#build` instead of `RecheckImpl#new` to allow earlier access to project variables (e.g. retest.properties). Projects (i.e. `.retest` folders) should still be detected correctly. + -------------------------------------------------------------------------------- diff --git a/src/main/java/de/retest/recheck/RecheckImpl.java b/src/main/java/de/retest/recheck/RecheckImpl.java index ea3b0748c..d1e51d5ea 100644 --- a/src/main/java/de/retest/recheck/RecheckImpl.java +++ b/src/main/java/de/retest/recheck/RecheckImpl.java @@ -11,7 +11,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import de.retest.recheck.configuration.ProjectConfiguration; import de.retest.recheck.execution.RecheckAdapters; import de.retest.recheck.execution.RecheckDifferenceFinder; import de.retest.recheck.persistence.CloudPersistence; @@ -67,7 +66,6 @@ public RecheckImpl() { } public RecheckImpl( final RecheckOptions options ) { - ProjectConfiguration.getInstance().ensureProjectConfigurationInitialized(); Runtime.getRuntime().addShutdownHook( capWarner ); this.options = options; suiteName = options.getNamingStrategy().getSuiteName(); diff --git a/src/main/java/de/retest/recheck/RecheckOptions.java b/src/main/java/de/retest/recheck/RecheckOptions.java index 87a7a87df..600ee0b3a 100644 --- a/src/main/java/de/retest/recheck/RecheckOptions.java +++ b/src/main/java/de/retest/recheck/RecheckOptions.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; +import de.retest.recheck.configuration.ProjectConfiguration; import de.retest.recheck.ignore.CompoundFilter; import de.retest.recheck.ignore.Filter; import de.retest.recheck.ignore.RecheckIgnoreLocator; @@ -272,6 +273,7 @@ public RecheckOptionsBuilder retestIdProvider( final RetestIdProvider retestIdPr } public RecheckOptions build() { + ProjectConfiguration.getInstance().ensureProjectConfigurationInitialized(); final String suiteName = getSuiteName(); final NamingStrategy namingStrategy = new FixedSuiteNamingStrategy( suiteName, this.namingStrategy ); return new RecheckOptions( fileNamerStrategy, namingStrategy, projectLayout, From 1f5427fd91cd2a81892d5a7fb7af3877a1b4d0e2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2020 04:19:08 +0000 Subject: [PATCH 026/160] Bump commons-lang3 from 3.10 to 3.11 Bumps commons-lang3 from 3.10 to 3.11. Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7578786ef..baf2c337c 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ org.apache.commons commons-lang3 - 3.10 + 3.11 From 625e6e1cf873256a67ef41ea804764f791b71ca8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 20 Jul 2020 04:18:34 +0000 Subject: [PATCH 027/160] Bump mockito-core from 3.3.3 to 3.4.4 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.3.3 to 3.4.4. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.3.3...v3.4.4) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index baf2c337c..ca5f05c11 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.3.3 + 3.4.4 test From 4cb23a18279e695e6beaae9db7e6f766fe8fad95 Mon Sep 17 00:00:00 2001 From: diba1013 Date: Tue, 23 Jun 2020 09:33:55 +0200 Subject: [PATCH 028/160] Add new auto detect for project layout based on files within the project root --- .../recheck/persistence/ProjectLayouts.java | 40 +++++++++ .../recheck/persistence/ProjectLayoutsIT.java | 88 +++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/main/java/de/retest/recheck/persistence/ProjectLayouts.java create mode 100644 src/test/java/de/retest/recheck/persistence/ProjectLayoutsIT.java diff --git a/src/main/java/de/retest/recheck/persistence/ProjectLayouts.java b/src/main/java/de/retest/recheck/persistence/ProjectLayouts.java new file mode 100644 index 000000000..0370b366e --- /dev/null +++ b/src/main/java/de/retest/recheck/persistence/ProjectLayouts.java @@ -0,0 +1,40 @@ +package de.retest.recheck.persistence; + +import java.nio.file.Path; + +import de.retest.recheck.configuration.ProjectRootFinderUtil; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor( access = AccessLevel.PRIVATE ) +public class ProjectLayouts { + + public static final String POM_XML = "pom.xml"; + public static final String BUILD_GRADLE = "build.gradle"; + + public static ProjectLayout detect() { + return ProjectRootFinderUtil.getProjectRoot() // + .map( ProjectLayouts::findProjectBasedOnFiles ) // + .orElseThrow( ProjectLayouts::noProjectLayoutFound ); + } + + private static ProjectLayout findProjectBasedOnFiles( final Path path ) { + if ( exists( path, POM_XML ) ) { + return new MavenProjectLayout(); + } + if ( exists( path, BUILD_GRADLE ) ) { + return new GradleProjectLayout(); + } + return null; + } + + private static boolean exists( final Path path, final String mavenPomFile ) { + // https://rules.sonarsource.com/java/tag/performance/RSPEC-3725 + return path.resolve( mavenPomFile ).toFile().exists(); + } + + private static IllegalStateException noProjectLayoutFound() { + return new IllegalStateException( + "Could not detect project layout. Please specify one explicitly with RecheckOptionsBuilder#projectLayout." ); + } +} diff --git a/src/test/java/de/retest/recheck/persistence/ProjectLayoutsIT.java b/src/test/java/de/retest/recheck/persistence/ProjectLayoutsIT.java new file mode 100644 index 000000000..a4a003429 --- /dev/null +++ b/src/test/java/de/retest/recheck/persistence/ProjectLayoutsIT.java @@ -0,0 +1,88 @@ +package de.retest.recheck.persistence; + +import static de.retest.recheck.persistence.ProjectLayouts.BUILD_GRADLE; +import static de.retest.recheck.persistence.ProjectLayouts.POM_XML; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.junitpioneer.jupiter.ClearSystemProperty; + +import de.retest.recheck.RecheckProperties; +import de.retest.recheck.configuration.ProjectConfiguration; + +@ClearSystemProperty( key = ProjectConfiguration.RETEST_PROJECT_ROOT ) +class ProjectLayoutsIT { + + @BeforeEach + void setUp( @TempDir final Path root ) { + System.setProperty( ProjectConfiguration.RETEST_PROJECT_ROOT, root.toString() ); + } + + @Test + void detect_should_throw_if_project_not_present() { + assertThatThrownBy( ProjectLayouts::detect ) // + .isInstanceOf( IllegalStateException.class ) // + .hasMessageContaining( "Could not detect project layout" ); + } + + @ParameterizedTest + @ValueSource( strings = { POM_XML, BUILD_GRADLE } ) + void detect_should_throw_if_project_does_not_exist( final String file, @TempDir final Path root ) throws IOException { + createFile( root, file ); + + assertThatThrownBy( ProjectLayouts::detect ) // + .isInstanceOf( IllegalStateException.class ) // + .hasMessageContaining( "Could not detect project layout" ); + } + + @Test + void detect_should_throw_if_project_present_without_indicator_file( @TempDir final Path root ) throws IOException { + createFolder( root ); + + assertThatThrownBy( ProjectLayouts::detect ) // + .isInstanceOf( IllegalStateException.class ) // + .hasMessageContaining( "Could not detect project layout" ); + } + + @Test + void detect_should_be_maven_if_pom_present( @TempDir final Path root ) throws IOException { + createFolder( root ); + createFile( root, POM_XML ); + + assertThat( ProjectLayouts.detect() ).isInstanceOf( MavenProjectLayout.class ); + } + + @Test + void detect_should_be_gradle_if_build_present( @TempDir final Path root ) throws IOException { + createFolder( root ); + createFile( root, BUILD_GRADLE ); + + assertThat( ProjectLayouts.detect() ).isInstanceOf( GradleProjectLayout.class ); + } + + @Test + void detect_should_prefer_maven_over_gradle( @TempDir final Path root ) throws IOException { + createFolder( root ); + createFile( root, POM_XML ); + createFile( root, BUILD_GRADLE ); + + assertThat( ProjectLayouts.detect() ).isInstanceOf( MavenProjectLayout.class ); + } + + private void createFolder( final Path root ) throws IOException { + Files.createDirectory( root.resolve( RecheckProperties.RETEST_FOLDER_NAME ) ); + } + + private void createFile( final Path root, final String file ) throws IOException { + Files.createFile( root.resolve( file ) ); + } +} From a72f0d327a3bbe8cc10bfa49e85338a81bd1db2d Mon Sep 17 00:00:00 2001 From: diba1013 Date: Tue, 23 Jun 2020 09:37:17 +0200 Subject: [PATCH 029/160] Lazily detect the project layout but ensure it is set first thing within RecheckOptionsBuilder#build. Firstly, this is done to provide a meaningful stacktrace when the project layout could not be found and secondly to allow other lazily initialized methods to access it. However, due to how project discovery works, the project found may not be the execution directory. To work around this, the test must create more indicator files (e.g. src). --- CHANGELOG.md | 1 + .../de/retest/recheck/RecheckOptions.java | 6 +- .../de/retest/recheck/RecheckOptionsIT.java | 114 ++++++++++++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 src/test/java/de/retest/recheck/RecheckOptionsIT.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c991b00c..6d9d83e37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ Table of Contents * Metadata differences are now filterable via the recheck.ignore. New `volatile-metadata.filter` and `metadata.filter` filters have been added, where the first one filters metadata which is added for diagnosing purposes and too verbose to be displayed upon every change and the latter filters _all_ metadata. They can be imported with `import: volatile-metadata.filter` and `import: metadata.filter` in `recheck.ignore`. * Add `exclude()` filter expression to allow child elements to be excluded. Ignoring an element `matcher: type=body, exclude(matcher: type=button)` will ignore everything below the `body` element but still capture changes for `button` elements. * Add a `disableReportUpload` method. +* The `ProjectLayout` will now be automatically detected (Maven and Gradle) and will throw an error if it cannot fall back to Maven, in which case a custom `ProjectLayout` has to be provided. ### Improvements diff --git a/src/main/java/de/retest/recheck/RecheckOptions.java b/src/main/java/de/retest/recheck/RecheckOptions.java index 600ee0b3a..f4f4c2260 100644 --- a/src/main/java/de/retest/recheck/RecheckOptions.java +++ b/src/main/java/de/retest/recheck/RecheckOptions.java @@ -18,6 +18,7 @@ import de.retest.recheck.persistence.MavenProjectLayout; import de.retest.recheck.persistence.NamingStrategy; import de.retest.recheck.persistence.ProjectLayout; +import de.retest.recheck.persistence.ProjectLayouts; import de.retest.recheck.ui.descriptors.idproviders.RetestIdProvider; import de.retest.recheck.util.RetestIdProviderUtil; import lombok.AccessLevel; @@ -129,7 +130,7 @@ public static class RecheckOptionsBuilder { private FileNamerStrategy fileNamerStrategy; private NamingStrategy namingStrategy = new ClassAndMethodBasedNamingStrategy(); - private ProjectLayout projectLayout = new MavenProjectLayout(); + private ProjectLayout projectLayout; private String suiteName = null; private Boolean reportUploadEnabled; private Filter ignoreFilter = null; @@ -274,6 +275,9 @@ public RecheckOptionsBuilder retestIdProvider( final RetestIdProvider retestIdPr public RecheckOptions build() { ProjectConfiguration.getInstance().ensureProjectConfigurationInitialized(); + if ( projectLayout == null ) { + projectLayout( ProjectLayouts.detect() ); + } final String suiteName = getSuiteName(); final NamingStrategy namingStrategy = new FixedSuiteNamingStrategy( suiteName, this.namingStrategy ); return new RecheckOptions( fileNamerStrategy, namingStrategy, projectLayout, diff --git a/src/test/java/de/retest/recheck/RecheckOptionsIT.java b/src/test/java/de/retest/recheck/RecheckOptionsIT.java new file mode 100644 index 000000000..8aaa15412 --- /dev/null +++ b/src/test/java/de/retest/recheck/RecheckOptionsIT.java @@ -0,0 +1,114 @@ +package de.retest.recheck; + +import static de.retest.recheck.persistence.ProjectLayouts.BUILD_GRADLE; +import static de.retest.recheck.persistence.ProjectLayouts.POM_XML; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.junitpioneer.jupiter.ClearSystemProperty; + +import de.retest.recheck.configuration.ProjectConfiguration; +import de.retest.recheck.persistence.GradleProjectLayout; +import de.retest.recheck.persistence.MavenProjectLayout; +import de.retest.recheck.persistence.ProjectLayout; + +class RecheckOptionsIT { + + @Nested + @ClearSystemProperty( key = ProjectConfiguration.RETEST_PROJECT_ROOT ) + class RecheckOptionsBuilderIT { + + @BeforeEach + void setUp( @TempDir final Path root ) throws IOException { + System.setProperty( ProjectConfiguration.RETEST_PROJECT_ROOT, root.toString() ); + createLayout( root ); + } + + @Test + void layout_should_not_throw_if_no_project_only_maven_is_present( @TempDir Path root ) throws IOException { + createFile( root, POM_XML ); + + final RecheckOptions options = RecheckOptions.builder().build(); + + assertThat( options.getProjectLayout() ).isInstanceOf( MavenProjectLayout.class ); + } + + @Test + void layout_should_identify_if_project_and_maven_present( @TempDir final Path root ) throws IOException { + createFolder( root ); + createFile( root, POM_XML ); + + final RecheckOptions options = RecheckOptions.builder().build(); + + assertThat( options.getProjectLayout() ).isInstanceOf( MavenProjectLayout.class ); + } + + @Test + void layout_should_not_throw_if_no_project_only_gradle_is_present( @TempDir Path root ) throws IOException { + createFile( root, BUILD_GRADLE ); + + final RecheckOptions options = RecheckOptions.builder().build(); + + assertThat( options.getProjectLayout() ).isInstanceOf( GradleProjectLayout.class ); + } + + @Test + void layout_should_identify_if_project_and_gradle_present( @TempDir final Path root ) throws IOException { + createFolder( root ); + createFile( root, BUILD_GRADLE ); + + final RecheckOptions options = RecheckOptions.builder().build(); + + assertThat( options.getProjectLayout() ).isInstanceOf( GradleProjectLayout.class ); + } + + @Test + void layout_should_prefer_maven_over_gradle( @TempDir final Path root ) throws IOException { + createFolder( root ); + createFile( root, POM_XML ); + createFile( root, BUILD_GRADLE ); + + final RecheckOptions options = RecheckOptions.builder().build(); + + assertThat( options.getProjectLayout() ).isInstanceOf( MavenProjectLayout.class ); + } + + @ParameterizedTest + @ValueSource( strings = { POM_XML, BUILD_GRADLE } ) + void layout_should_use_specified_layout( String file, @TempDir Path root ) throws IOException { + createFolder( root ); + createFile( root, file ); + + final ProjectLayout layout = mock( ProjectLayout.class ); + + final RecheckOptions options = RecheckOptions.builder() // + .projectLayout( layout ) // + .build(); + + assertThat( options.getProjectLayout() ).isEqualTo( layout ); + } + } + + private void createLayout( final Path root ) throws IOException { + Files.createDirectories( root.resolve( "src/main/java" ) ); + Files.createDirectories( root.resolve( "src/test/java" ) ); + } + + private void createFolder( final Path root ) throws IOException { + Files.createDirectory( root.resolve( RecheckProperties.RETEST_FOLDER_NAME ) ); + } + + private void createFile( final Path root, final String file ) throws IOException { + Files.createFile( root.resolve( file ) ); + } +} From cd6e18ba75e513e3a3d71d5dc6e1f9a4c90cf77b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2020 04:16:10 +0000 Subject: [PATCH 030/160] Bump junit-pioneer from 0.6.0 to 0.7.0 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 0.6.0 to 0.7.0. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Changelog](https://github.com/junit-pioneer/junit-pioneer/blob/master/docs/release-notes.md) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v0.6.0...v0.7.0) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca5f05c11..92b62c156 100644 --- a/pom.xml +++ b/pom.xml @@ -295,7 +295,7 @@ org.junit-pioneer junit-pioneer - 0.6.0 + 0.7.0 test From 16d09eb14c8c3548f63fa4b775e5d96343246d28 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2020 04:16:22 +0000 Subject: [PATCH 031/160] Bump commons-text from 1.8 to 1.9 Bumps commons-text from 1.8 to 1.9. Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 92b62c156..e2109076f 100644 --- a/pom.xml +++ b/pom.xml @@ -191,7 +191,7 @@ org.apache.commons commons-text - 1.8 + 1.9 From a4dcd4ba181ec6fb63b0a26ef3ad00391c949b87 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2020 04:16:36 +0000 Subject: [PATCH 032/160] Bump jqwik from 1.3.2 to 1.3.3 Bumps [jqwik](https://github.com/jlink/jqwik) from 1.3.2 to 1.3.3. - [Release notes](https://github.com/jlink/jqwik/releases) - [Changelog](https://github.com/jlink/jqwik/blob/master/docs/release-notes.md) - [Commits](https://github.com/jlink/jqwik/compare/1.3.2...1.3.3) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e2109076f..0047aa721 100644 --- a/pom.xml +++ b/pom.xml @@ -316,7 +316,7 @@ net.jqwik jqwik - 1.3.2 + 1.3.3 test From 7f4599ff8139b5a22e22890e3d24273313f75d1c Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Fri, 27 Mar 2020 08:11:43 +0100 Subject: [PATCH 033/160] Run tests with newest JDK 14 --- ci/script.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/script.sh b/ci/script.sh index 5d2ea0b40..8befda641 100755 --- a/ci/script.sh +++ b/ci/script.sh @@ -8,8 +8,8 @@ set -o pipefail # Compile with JDK 8 mvn ${MVN_ARGS} clean package -DskipTests -# Test with JDK 13 -wget --quiet https://github.com/sormuras/bach/raw/master/install-jdk.sh && . ./install-jdk.sh -F 13 +# Test with JDK 14 +wget --quiet https://github.com/sormuras/bach/raw/master/install-jdk.sh && . ./install-jdk.sh -F 14 if [ ${TRAVIS_SECURE_ENV_VARS} = "true" ]; then mvn ${MVN_ARGS} verify sonar:sonar -Pcoverage From f4d3065b8c2be3376f32732e4f4d617fe26f383a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 7 Aug 2020 04:17:24 +0000 Subject: [PATCH 034/160] Bump junit-pioneer from 0.7.0 to 0.9.0 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 0.7.0 to 0.9.0. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Changelog](https://github.com/junit-pioneer/junit-pioneer/blob/master/docs/release-notes.md) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v0.7.0...v0.9.0) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0047aa721..22aa8d136 100644 --- a/pom.xml +++ b/pom.xml @@ -295,7 +295,7 @@ org.junit-pioneer junit-pioneer - 0.7.0 + 0.9.0 test From 33a13bf12ed9876b1caaf6629ef94a62893ce65e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2020 04:18:09 +0000 Subject: [PATCH 035/160] Bump unirest-java from 3.8.06 to 3.9.00 Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.8.06 to 3.9.00. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.8.06...v3.9.00) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 22aa8d136..3363f609a 100644 --- a/pom.xml +++ b/pom.xml @@ -146,7 +146,7 @@ com.konghq unirest-java - 3.8.06 + 3.9.00 From bc3c129e0af71ac61afe86211ca1c989fe80323f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2020 04:18:13 +0000 Subject: [PATCH 036/160] Bump mockito-core from 3.4.4 to 3.4.6 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.4.4 to 3.4.6. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.4.4...v3.4.6) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3363f609a..850e7a9c0 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.4.4 + 3.4.6 test From ba3f2cbe06d87aca80332c669b8b2d99464254e4 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2020 04:16:16 +0000 Subject: [PATCH 037/160] Bump mockito-core from 3.4.6 to 3.5.0 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.4.6 to 3.5.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.4.6...v3.5.0) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 850e7a9c0..a5bc14a20 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.4.6 + 3.5.0 test From 9870cebc3495ed97af483186d3ca1f4a984315ee Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2020 04:19:39 +0000 Subject: [PATCH 038/160] Bump approvaltests from 9.1.0 to 9.2.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 9.1.0 to 9.2.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/commits) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a5bc14a20..2ea56ce9e 100644 --- a/pom.xml +++ b/pom.xml @@ -281,7 +281,7 @@ com.approvaltests approvaltests - 9.1.0 + 9.2.0 test From 65ebc50b9c13e4191c8ae8e58f12863dacee29ef Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2020 04:18:59 +0000 Subject: [PATCH 039/160] Bump mockito-core from 3.5.0 to 3.5.2 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.5.0 to 3.5.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.5.0...v3.5.2) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2ea56ce9e..1deaaafc1 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.5.0 + 3.5.2 test From 50fc68b16d5b0483e01ba17343c51f61d0dbefcd Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2020 04:17:22 +0000 Subject: [PATCH 040/160] Bump jqwik from 1.3.3 to 1.3.4 Bumps [jqwik](https://github.com/jlink/jqwik) from 1.3.3 to 1.3.4. - [Release notes](https://github.com/jlink/jqwik/releases) - [Changelog](https://github.com/jlink/jqwik/blob/master/docs/release-notes.md) - [Commits](https://github.com/jlink/jqwik/compare/1.3.3...1.3.4) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1deaaafc1..4f24209b1 100644 --- a/pom.xml +++ b/pom.xml @@ -316,7 +316,7 @@ net.jqwik jqwik - 1.3.3 + 1.3.4 test From fb9d2b1d136e59cd12fcb1243b6c5f0091e87071 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2020 04:37:50 +0000 Subject: [PATCH 041/160] Bump approvaltests from 9.2.0 to 9.3.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 9.2.0 to 9.3.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/commits) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4f24209b1..e9fed32ff 100644 --- a/pom.xml +++ b/pom.xml @@ -281,7 +281,7 @@ com.approvaltests approvaltests - 9.2.0 + 9.3.0 test From 76e683fd2397fda3690d0ca36c9f7b44b93738a1 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 24 Aug 2020 04:20:09 +0000 Subject: [PATCH 042/160] Bump unirest-java from 3.9.00 to 3.10.00 Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.9.00 to 3.10.00. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.9.00...v3.10.00) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e9fed32ff..6ffc1b5f5 100644 --- a/pom.xml +++ b/pom.xml @@ -146,7 +146,7 @@ com.konghq unirest-java - 3.9.00 + 3.10.00 From 70e4170ff249585208d5bb37a0b4babb6b3cea77 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2020 04:42:25 +0000 Subject: [PATCH 043/160] Bump mockito-core from 3.5.2 to 3.5.6 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.5.2 to 3.5.6. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.5.2...v3.5.6) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6ffc1b5f5..39fc48347 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.5.2 + 3.5.6 test From 7ea44c1de7e0e231082f9d3382083669a537d191 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2020 04:39:25 +0000 Subject: [PATCH 044/160] Bump assertj-core from 3.16.1 to 3.17.0 Bumps [assertj-core](https://github.com/joel-costigliola/assertj-core) from 3.16.1 to 3.17.0. - [Release notes](https://github.com/joel-costigliola/assertj-core/releases) - [Commits](https://github.com/joel-costigliola/assertj-core/compare/assertj-core-3.16.1...assertj-core-3.17.0) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 39fc48347..bdda105f6 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ org.assertj assertj-core - 3.16.1 + 3.17.0 test From 58c770a98fb65fa13d400adae732e29b94a95923 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2020 04:45:15 +0000 Subject: [PATCH 045/160] Bump mockito-core from 3.5.6 to 3.5.7 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.5.6 to 3.5.7. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.5.6...v3.5.7) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bdda105f6..6644c3775 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.5.6 + 3.5.7 test From 0d8d1c00cef6adf41582a3e7a88fd69ce70f3186 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 27 Aug 2020 04:22:09 +0000 Subject: [PATCH 046/160] Bump jqwik from 1.3.4 to 1.3.5 Bumps [jqwik](https://github.com/jlink/jqwik) from 1.3.4 to 1.3.5. - [Release notes](https://github.com/jlink/jqwik/releases) - [Changelog](https://github.com/jlink/jqwik/blob/master/docs/release-notes.md) - [Commits](https://github.com/jlink/jqwik/compare/1.3.4...1.3.5) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6644c3775..8994474e9 100644 --- a/pom.xml +++ b/pom.xml @@ -316,7 +316,7 @@ net.jqwik jqwik - 1.3.4 + 1.3.5 test From 5cf2276d39af42305627dd2f2e3d46f8311796e4 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 28 Aug 2020 04:24:44 +0000 Subject: [PATCH 047/160] Bump jwks-rsa from 0.12.0 to 0.13.0 Bumps [jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.12.0 to 0.13.0. - [Release notes](https://github.com/auth0/jwks-rsa-java/releases) - [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.12.0...0.13.0) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8994474e9..8896fc58f 100644 --- a/pom.xml +++ b/pom.xml @@ -152,7 +152,7 @@ com.auth0 jwks-rsa - 0.12.0 + 0.13.0 From 69207e656b68fca367b502ac60acd9adb82fd339 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 2 Sep 2020 04:45:58 +0000 Subject: [PATCH 048/160] Bump assertj-core from 3.17.0 to 3.17.1 Bumps [assertj-core](https://github.com/joel-costigliola/assertj-core) from 3.17.0 to 3.17.1. - [Release notes](https://github.com/joel-costigliola/assertj-core/releases) - [Commits](https://github.com/joel-costigliola/assertj-core/compare/assertj-core-3.17.0...assertj-core-3.17.1) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8896fc58f..b4442b25b 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ org.assertj assertj-core - 3.17.0 + 3.17.1 test From 45b47338dc75bf150cbe06bd875ba00b41a77d10 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 22 Sep 2020 04:19:41 +0000 Subject: [PATCH 049/160] Bump jqwik from 1.3.5 to 1.3.6 Bumps [jqwik](https://github.com/jlink/jqwik) from 1.3.5 to 1.3.6. - [Release notes](https://github.com/jlink/jqwik/releases) - [Changelog](https://github.com/jlink/jqwik/blob/master/docs/release-notes.md) - [Commits](https://github.com/jlink/jqwik/compare/1.3.5...1.3.6) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b4442b25b..26690f26b 100644 --- a/pom.xml +++ b/pom.xml @@ -316,7 +316,7 @@ net.jqwik jqwik - 1.3.5 + 1.3.6 test From d5ea262b7b6ef7980f184acf3d91f3d015c208ea Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 18 Sep 2020 04:18:41 +0000 Subject: [PATCH 050/160] Bump mockito-core from 3.5.7 to 3.5.11 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.5.7 to 3.5.11. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.5.7...v3.5.11) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 26690f26b..964d5145f 100644 --- a/pom.xml +++ b/pom.xml @@ -246,7 +246,7 @@ org.mockito mockito-core - 3.5.7 + 3.5.11 test From a36007b3e7ad15822f14e7a977164ce5524f72b8 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 16 Sep 2020 04:19:26 +0000 Subject: [PATCH 051/160] Bump jacoco-maven-plugin from 0.8.5 to 0.8.6 Bumps [jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.5 to 0.8.6. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](https://github.com/jacoco/jacoco/compare/v0.8.5...v0.8.6) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 964d5145f..71168dc30 100644 --- a/pom.xml +++ b/pom.xml @@ -483,7 +483,7 @@ org.jacoco jacoco-maven-plugin - 0.8.5 + 0.8.6 prepare-agent From e325da267a467a1938a13e33b93b118bbd2e4929 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 14 Sep 2020 04:19:12 +0000 Subject: [PATCH 052/160] Bump junit.jupiter.version from 5.6.2 to 5.7.0 Bumps `junit.jupiter.version` from 5.6.2 to 5.7.0. Updates `junit-vintage-engine` from 5.6.2 to 5.7.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.6.2...r5.7.0) Updates `junit-jupiter` from 5.6.2 to 5.7.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.6.2...r5.7.0) Updates `junit-jupiter-params` from 5.6.2 to 5.7.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.6.2...r5.7.0) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 71168dc30..b928f9a89 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ UTF-8 UTF-8 UTF-8 - 5.6.2 + 5.7.0 1.2.3 2.22.2 2.5.2 From 712fda190a1bfd16a9c6572b08644e81d28cf1ba Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2020 04:20:08 +0000 Subject: [PATCH 053/160] Bump commons-io from 2.7 to 2.8.0 Bumps commons-io from 2.7 to 2.8.0. Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b928f9a89..9dd74ae2d 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,7 @@ commons-io commons-io - 2.7 + 2.8.0 From 00acfc85bd5665bfab1f472d1aaa7fce551670bc Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 7 Sep 2020 04:20:48 +0000 Subject: [PATCH 054/160] Bump assertj-core from 3.17.1 to 3.17.2 Bumps [assertj-core](https://github.com/joel-costigliola/assertj-core) from 3.17.1 to 3.17.2. - [Release notes](https://github.com/joel-costigliola/assertj-core/releases) - [Commits](https://github.com/joel-costigliola/assertj-core/compare/assertj-core-3.17.1...assertj-core-3.17.2) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9dd74ae2d..20313167f 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ org.assertj assertj-core - 3.17.1 + 3.17.2 test From d7786d5da6ad29accafdf9a95df533334e6e52e0 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2020 04:30:04 +0000 Subject: [PATCH 055/160] Bump rhino from 1.7.12 to 1.7.13 Bumps [rhino](https://github.com/mozilla/rhino) from 1.7.12 to 1.7.13. - [Release notes](https://github.com/mozilla/rhino/releases) - [Changelog](https://github.com/mozilla/rhino/blob/master/RELEASE-NOTES.md) - [Commits](https://github.com/mozilla/rhino/commits) Signed-off-by: dependabot-preview[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 20313167f..3a0f304e9 100644 --- a/pom.xml +++ b/pom.xml @@ -197,7 +197,7 @@ org.mozilla rhino - 1.7.12 + 1.7.13 From 3539d787b3f4f3503b68194359015dd96c8518c2 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Mon, 5 Oct 2020 16:21:08 +0200 Subject: [PATCH 056/160] It's very likely that the root element is the same even if it's more than 30% different --- src/main/java/de/retest/recheck/RecheckProperties.java | 2 +- .../recheck/ui/diff/RootElementDifferenceFinderTest.java | 4 ++-- ...oot_element_with_same_components_should_match.approved.txt | 2 +- ...ment_with_different_window_titles_are_matched.approved.txt | 3 +++ 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.lists_of_root_element_with_different_window_titles_are_matched.approved.txt diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index bf431afcc..ad1bc37f1 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -69,7 +69,7 @@ static RecheckProperties getInstance() { String ROOT_ELEMENT_MATCH_THRESHOLD_PROPERTY_KEY = "de.retest.recheck.rootElementMatchThreshold"; @Key( ROOT_ELEMENT_MATCH_THRESHOLD_PROPERTY_KEY ) - @DefaultValue( "0.8" ) + @DefaultValue( "0.5" ) double rootElementMatchThreshold(); String ROOT_ELEMENT_CONTAINED_CHILDREN_MATCH_THRESHOLD_PROPERTY_KEY = diff --git a/src/test/java/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.java b/src/test/java/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.java index 3bd368adf..48fd9037c 100644 --- a/src/test/java/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.java +++ b/src/test/java/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.java @@ -148,7 +148,7 @@ void lists_of_different_root_element_are_matched_even_if_the_order_is_different( } @Test - void lists_of_root_element_with_different_window_titles_are_not_matched() { + void lists_of_root_element_with_different_window_titles_are_matched() { final RootElement descriptor_1 = descriptorFor( identifyingAttributesA, attributes, screenshot ); final RootElement descriptor_2 = descriptorFor( identifyingAttributesB, attributes, screenshot ); @@ -156,7 +156,7 @@ void lists_of_root_element_with_different_window_titles_are_not_matched() { Collections.singletonList( descriptor_1 ), Collections.singletonList( descriptor_2 ) ); assertThat( differences.isEmpty() ).isFalse(); - assertThat( ElementDifferenceFinder.getElementDifferences( differences ).size() ).isEqualTo( 2 ); + assertThat( ElementDifferenceFinder.getElementDifferences( differences ).size() ).isEqualTo( 1 ); verify( ElementDifferenceFinder.getNonEmptyDifferences( differences ) ); } diff --git a/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.different_root_element_with_same_components_should_match.approved.txt b/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.different_root_element_with_same_components_should_match.approved.txt index 2293eb07f..16dec3bc0 100644 --- a/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.different_root_element_with_same_components_should_match.approved.txt +++ b/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.different_root_element_with_same_components_should_match.approved.txt @@ -1 +1 @@ -[WindowIdentifyingAttributesDifference [expected=Window[1], actual=null], WindowIdentifyingAttributesDifference [expected=null, actual=Other[1]]] +[WindowIdentifyingAttributesDifference expected path: Window[1] expected type: de.retest.recheck.ui.diff.RootElementDifferenceFinderTest$Window - actual path: Other[1] actual type: javax.swing.JDialog] diff --git a/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.lists_of_root_element_with_different_window_titles_are_matched.approved.txt b/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.lists_of_root_element_with_different_window_titles_are_matched.approved.txt new file mode 100644 index 000000000..059e22186 --- /dev/null +++ b/src/test/resources/de/retest/recheck/ui/diff/RootElementDifferenceFinderTest.lists_of_root_element_with_different_window_titles_are_matched.approved.txt @@ -0,0 +1,3 @@ +[Window[1]: + at: Window[1]: + expected type: de.retest.recheck.ui.diff.RootElementDifferenceFinderTest$Window - actual type: de.retest.recheck.ui.diff.RootElementDifferenceFinderTest$OtherWindow] From df3c6735505c539bbaf56b795e1e39fc59021193 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 14 Oct 2020 20:43:57 +0200 Subject: [PATCH 057/160] Add NPE check in PixelDiffFilter --- .../java/de/retest/recheck/review/ignore/PixelDiffFilter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java b/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java index d9eea65d3..bc696110d 100644 --- a/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java +++ b/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java @@ -66,6 +66,10 @@ public boolean matches( final Element element, final AttributeDifference attribu } private boolean checkRectangle( final Rectangle expected, final Rectangle actual ) { + if ( expected == null || actual == null ) { + return false; + } + final boolean filterX = Math.abs( expected.x - actual.x ) <= pixelDiff; final boolean filterY = Math.abs( expected.y - actual.y ) <= pixelDiff; final boolean filterHeight = Math.abs( expected.height - actual.height ) <= pixelDiff; From 96665f07a534d3ea8943e5d5d8928d799e4b9869 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 14 Oct 2020 20:51:01 +0200 Subject: [PATCH 058/160] Merge dupplicate code --- .../recheck/review/ignore/PixelDiffFilter.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java b/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java index bc696110d..f4e548986 100644 --- a/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java +++ b/src/main/java/de/retest/recheck/review/ignore/PixelDiffFilter.java @@ -54,6 +54,10 @@ public boolean matches( final Element element, final AttributeDifference attribu return false; } + if ( expected == null || actual == null ) { + return false; + } + if ( expected instanceof Rectangle ) { return checkRectangle( (Rectangle) expected, (Rectangle) actual ); } @@ -66,10 +70,6 @@ public boolean matches( final Element element, final AttributeDifference attribu } private boolean checkRectangle( final Rectangle expected, final Rectangle actual ) { - if ( expected == null || actual == null ) { - return false; - } - final boolean filterX = Math.abs( expected.x - actual.x ) <= pixelDiff; final boolean filterY = Math.abs( expected.y - actual.y ) <= pixelDiff; final boolean filterHeight = Math.abs( expected.height - actual.height ) <= pixelDiff; @@ -78,10 +78,6 @@ private boolean checkRectangle( final Rectangle expected, final Rectangle actual } private boolean checkString( final String key, final String expected, final String actual ) { - if ( expected == null || actual == null ) { - return false; - } - if ( !expected.endsWith( PIXEL ) || !actual.endsWith( PIXEL ) ) { return false; } From 6313ea7b6594bf745e393f46c12f1935a6671d37 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 20 Oct 2020 10:28:01 +0200 Subject: [PATCH 059/160] Disable assert triggered by some pseudo elements --- src/main/java/de/retest/recheck/ui/diff/Alignment.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/retest/recheck/ui/diff/Alignment.java b/src/main/java/de/retest/recheck/ui/diff/Alignment.java index 66d9dcf62..fa794191b 100644 --- a/src/main/java/de/retest/recheck/ui/diff/Alignment.java +++ b/src/main/java/de/retest/recheck/ui/diff/Alignment.java @@ -82,9 +82,10 @@ private Map createAlignment( final List expectedEleme if ( matches.containsKey( bestMatch.element ) ) { final Match previousMatch = matches.get( bestMatch.element ); if ( bestMatch.similarity <= previousMatch.similarity ) { - assert bestMatch.similarity != 1.0 : "bestMatch and previousMatch have a match of 100%? At least paths should differ! " - + bestMatch.element.getIdentifyingAttributes().toFullString() + " == " - + previousMatch.element.getIdentifyingAttributes().toFullString(); + // FIXME this assert is triggered by some pseudo elements + //assert bestMatch.similarity != 1.0 : "bestMatch and previousMatch have a match of 100%? At least paths should differ! " + // + bestMatch.element.getIdentifyingAttributes().toFullString() + " == " + // + previousMatch.element.getIdentifyingAttributes().toFullString(); // Case: bestMatch is already taken for other element. bestMatch = bestMatches.pollFirst(); } else { From 7d178ff1fa738447a335df4306074995f590a2d9 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 12 Jan 2021 13:05:59 +0100 Subject: [PATCH 060/160] Minor fixes in issue templates --- .github/ISSUE_TEMPLATE/bug.md | 2 +- .github/ISSUE_TEMPLATE/feature.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 1557be0c0..9c80c0ada 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -37,4 +37,4 @@ Steps to reproduce the behavior: ### Additional Context - + diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md index 543a927da..736aa83ce 100644 --- a/.github/ISSUE_TEMPLATE/feature.md +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -19,7 +19,7 @@ labels: enhancement ### Solution - + ### Additional Context From 806406150b3f38dca33a3564acfddb499ad8c630 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 12 Jan 2021 16:03:10 +0100 Subject: [PATCH 061/160] Replace jqwik with ParameterizedTest --- pom.xml | 7 --- .../recheck/util/StringSimilarityTest.java | 47 ++++++++++--------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/pom.xml b/pom.xml index 3a0f304e9..08a2534bc 100644 --- a/pom.xml +++ b/pom.xml @@ -313,13 +313,6 @@ test - - net.jqwik - jqwik - 1.3.6 - test - - diff --git a/src/test/java/de/retest/recheck/util/StringSimilarityTest.java b/src/test/java/de/retest/recheck/util/StringSimilarityTest.java index 011f760fd..da871d443 100644 --- a/src/test/java/de/retest/recheck/util/StringSimilarityTest.java +++ b/src/test/java/de/retest/recheck/util/StringSimilarityTest.java @@ -3,22 +3,17 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.within; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.util.stream.Stream; +import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import net.jqwik.api.ForAll; -import net.jqwik.api.Property; -import net.jqwik.api.constraints.AlphaChars; -import net.jqwik.api.constraints.Chars; -import net.jqwik.api.constraints.NumericChars; - class StringSimilarityTest { private static final Logger logger = LoggerFactory.getLogger( StringSimilarityTest.class ); @@ -59,9 +54,10 @@ void pathSimilarity_for_empty_path_after_removing_brackets_should_be_zero() thro assertThat( similarity ).isZero(); } - @Property - void pathSimilarity_should_always_be_between_0_and_1( @ForAll @RandomPath final String randomPath0, - @ForAll @RandomPath final String randomPath1 ) throws Exception { + @ParameterizedTest + @MethodSource( "randomPathsPairs" ) + void pathSimilarity_should_always_be_between_0_and_1( final String randomPath0, final String randomPath1 ) + throws Exception { final double similarity01 = StringSimilarity.pathSimilarity( randomPath0, randomPath1 ); final double similarity10 = StringSimilarity.pathSimilarity( randomPath1, randomPath0 ); @@ -69,13 +65,25 @@ void pathSimilarity_should_always_be_between_0_and_1( @ForAll @RandomPath final assertThat( similarity10 ).as( "'%s' compared to '%s'", randomPath1, randomPath0 ).isBetween( 0.0, 1.0 ); } - @Property - void pathSimilarity_for_equal_paths_should_always_return_1( @ForAll @RandomPath final String randomPath ) - throws Exception { + @ParameterizedTest + @MethodSource( "randomPaths" ) + void pathSimilarity_for_equal_paths_should_always_return_1( final String randomPath ) throws Exception { assertThat( StringSimilarity.pathSimilarity( randomPath, randomPath ) ) .as( "'%s' compared to itself", randomPath ).isEqualTo( 1.0 ); } + public static Stream randomPathsPairs() { + return Stream.generate( () -> Arguments.of( randomPath(), randomPath() ) ).limit( 50 ); + } + + public static Stream randomPaths() { + return Stream.generate( () -> Arguments.of( randomPath() ) ).limit( 50 ); + } + + private static String randomPath() { + return RandomStringUtils.randomAscii( 0, 100 ); + } + @Test void pathSimilarity_should_handle_null_values() throws Exception { final String s0 = null; @@ -167,11 +175,4 @@ void pathSimilarity_should_be_efficient() { logger.info( "Took {} ms.", System.currentTimeMillis() - start ); } - @Target( { ElementType.ANNOTATION_TYPE, ElementType.PARAMETER } ) - @Retention( RetentionPolicy.RUNTIME ) - @AlphaChars - @NumericChars - @Chars( { '[', ']' } ) - private @interface RandomPath {} - } From 2f5ca5f45f0c3de6a20defd270afba2b66e25b22 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 12 Jan 2021 16:11:42 +0100 Subject: [PATCH 062/160] Clean up project setup --- .gitignore | 17 ++------ .retest/recheck.ignore | 33 +++++++++++++++ .retest/recheck.ignore.js | 24 +++++++++++ .retest/retest.properties | 7 +++ CHANGELOG.md | 2 + pom.xml | 89 +++++++++++++++++++++++++-------------- 6 files changed, 127 insertions(+), 45 deletions(-) create mode 100644 .retest/recheck.ignore create mode 100644 .retest/recheck.ignore.js create mode 100644 .retest/retest.properties diff --git a/.gitignore b/.gitignore index 9064e13bf..073915178 100644 --- a/.gitignore +++ b/.gitignore @@ -3,21 +3,12 @@ .project .settings/ +# IntelliJ. +.idea/ +*.iml + # Maven. /target/ # Artifact from signing JARs. retest-gmbh-gpg.asc - -# IntelliJ -.idea/ -*.iml - -# .retest folder -.retest/ - -# jqwik database to store data of previous runs -.jqwik-database - -# ApprovalTests. -**/*.received.* diff --git a/.retest/recheck.ignore b/.retest/recheck.ignore new file mode 100644 index 000000000..d5fe64d44 --- /dev/null +++ b/.retest/recheck.ignore @@ -0,0 +1,33 @@ +# Ignore file for recheck. Please do not delete, even if it is empty. + +# You can ignore specific elements like so (includes children): +# matcher: type=meta + +# Or via absolute XPath: +# matcher: xpath=html[1]/body[1]/iframe[1] + +# Or if you want to ignore everything, except specific dom-subtrees: +# matcher: type=html, exclude(matcher: xpath=html/body/section[4]) + +# To ignore attributes globally, use: +# attribute=class + +# To ignore attributes for a subtree of the DOM, use: +# matcher: id=menu, attribute=text + +# You can also use regex for elements or attributes: +# attribute-regex=data-.* + +# You can import other filters to quickly achieve what you want: +# import: positioning.filter + +# More details and examples can be found here: +# https://docs.retest.de/recheck/usage/filter/ + +# Ignore volatile metadata differences +import: volatile-metadata.filter + +# These are sensible defaults, delete if they don't apply: +attribute=style +matcher: type=input, attribute-regex=border-.*-color +pixel-diff=5px diff --git a/.retest/recheck.ignore.js b/.retest/recheck.ignore.js new file mode 100644 index 000000000..da697f169 --- /dev/null +++ b/.retest/recheck.ignore.js @@ -0,0 +1,24 @@ +// Here you can implement ignore rules for recheck in JavaScript. +// Please do not delete this file, even if it is empty. + +// You can implement either of these two functions: +// function matches(element) {} +// function matches(element, diff) {} + +// For example, to ignore everything behind an URL after '?': + +//var baseUrl = /http[s]?:\/\/[\w.:\d\-]*/; +// +//function matches(element, diff) { +// if (diff.expected != null && diff.actual != null) { +// expected = new String(diff.expected); +// actual = new String(diff.actual); +// cleanExpected = expected.replace(baseUrl, ''); +// cleanActual = actual.replace(baseUrl, ''); +// return cleanExpected === cleanActual; +// } +// return false; +//} + +// You can find more details and example rules at: +// https://docs.retest.de/recheck/how-ignore-works/ diff --git a/.retest/retest.properties b/.retest/retest.properties new file mode 100644 index 000000000..987c6a186 --- /dev/null +++ b/.retest/retest.properties @@ -0,0 +1,7 @@ +# Defaults for recheck. Please do not delete, even if this file is empty. + +# Upload test reports to rehub. +# de.retest.recheck.rehub.reportUploadEnabled=false + +# Always ignore these (separate values with ;) attributes. +de.retest.recheck.ignore.attributes=absolute-outline diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d9d83e37..fdad7be07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ Table of Contents ### Breaking Changes +* Since 01.12.2020 this project is owned and developed by [UBS Hainer GmbH](https://ubs-hainer.com/). + ### Bug Fixes * Fix a rare `java.nio.file.FileSystemAlreadyExistsException` when accessing filters concurrently. diff --git a/pom.xml b/pom.xml index 08a2534bc..617f7c317 100644 --- a/pom.xml +++ b/pom.xml @@ -12,42 +12,23 @@ https://retest.de/recheck/ - ReTest GmbH + retest @ UBS Hainer GmbH https://retest.de/ - roessler - Dr. Jeremias Rößler - jeremias.roessler@retest.de - - - kraus - Daniel Kraus - daniel.kraus@retest.de - - - vietz - Martin Vietz - martin.vietz@retest.de - - - dillmann - Johannes Dillmann - johannes.dillmann@retest.de + team + The retest developers + info@retest.de + https://github.com/orgs/retest/people - Nicole Rauch - info@nicole-rauch.de - https://nicolerauch.de/ - - - Robin Danzinger - robindanzinger@freenet.de + The contributors + https://github.com/retest/${project.artifactId}/graphs/contributors @@ -63,16 +44,16 @@ UTF-8 UTF-8 UTF-8 + 3.0.0-M5 5.7.0 1.2.3 - 2.22.2 2.5.2 - https://github.com/retest/recheck/ - scm:git:git@github.com:retest/recheck.git - scm:git:git@github.com:retest/recheck.git + https://github.com/retest/${project.artifactId}/ + scm:git:git@github.com:retest/${project.artifactId}.git + scm:git:git@github.com:retest/${project.artifactId}.git HEAD @@ -87,6 +68,17 @@ + + + central + https://repo.maven.apache.org/maven2/ + + + jitpack.io + https://jitpack.io/ + + + org.slf4j @@ -329,13 +321,24 @@ org.apache.maven.plugins maven-surefire-plugin - ${maven.surefire.version} + ${maven.surefire.and.failsafe.version} + + + + %regex[.*Test.class] + + + + junit.jupiter.execution.parallel.enabled=true + + + org.apache.maven.plugins maven-failsafe-plugin - ${maven.surefire.version} + ${maven.surefire.and.failsafe.version} @@ -372,6 +375,7 @@ org.apache.maven.plugins maven-release-plugin + 3.0.0-M1 install v@{project.version} @@ -429,6 +433,27 @@ + + org.apache.maven.plugins + maven-enforcer-plugin + 3.0.0-M3 + + + enforce-maven + + enforce + + + + + 3.4 + + + + + + + org.sonatype.plugins nexus-staging-maven-plugin From e5c4d5cb64a7b3e96da7c1973cadacda9332a13d Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 12 Jan 2021 21:19:11 +0100 Subject: [PATCH 063/160] Fix line endings --- .gitattributes | 11 +++++++++++ .travis.settings.xml | 18 +++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..e1fac0d37 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +*.css text encoding=utf-8 eol=lf +*.html text encoding=utf-8 eol=lf +*.ignore text encoding=utf-8 eol=lf +*.java text encoding=utf-8 eol=lf +*.js text encoding=utf-8 eol=lf +*.md text encoding=utf-8 eol=lf +*.properties text encoding=utf-8 eol=lf +*.sh text encoding=utf-8 eol=lf +*.xml text encoding=utf-8 eol=lf +*.yaml text encoding=utf-8 eol=lf +*.yml text encoding=utf-8 eol=lf diff --git a/.travis.settings.xml b/.travis.settings.xml index a87751f59..8468c1c6a 100644 --- a/.travis.settings.xml +++ b/.travis.settings.xml @@ -1,9 +1,9 @@ - - - - ossrh - ${env.OSSRH_USERNAME} - ${env.OSSRH_PASSWORD} - - - + + + + ossrh + ${env.OSSRH_USERNAME} + ${env.OSSRH_PASSWORD} + + + From 222d151567d0809c4b8790c159352dbdc898775b Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 13 Jan 2021 14:26:00 +0100 Subject: [PATCH 064/160] Add dependabot config --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..2b3403e09 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,9 @@ +version: 2 +updates: +- package-ecosystem: maven + directory: "/" + schedule: + interval: daily + time: "04:00" + timezone: Europe/Berlin + open-pull-requests-limit: 10 From 83099f39d02463264761b6713bef62e28818c5f1 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 13 Jan 2021 14:27:02 +0100 Subject: [PATCH 065/160] replace jupiter deps with "parent" dep --- pom.xml | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index 617f7c317..ca21366c0 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,6 @@ UTF-8 UTF-8 3.0.0-M5 - 5.7.0 1.2.3 2.5.2 @@ -201,37 +200,23 @@ - ch.qos.logback - logback-core - ${logback.version} + org.junit.jupiter + junit-jupiter + 5.7.0 test ch.qos.logback - logback-classic + logback-core ${logback.version} test - org.junit.vintage - junit-vintage-engine - ${junit.jupiter.version} - test - - - - org.junit.jupiter - junit-jupiter - ${junit.jupiter.version} - test - - - - org.junit.jupiter - junit-jupiter-params - ${junit.jupiter.version} + ch.qos.logback + logback-classic + ${logback.version} test From 13394b0dce23248c0f8854da760e4bb34d802056 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 13 Jan 2021 14:28:00 +0100 Subject: [PATCH 066/160] Use generalized scm config --- pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index ca21366c0..0254a1126 100644 --- a/pom.xml +++ b/pom.xml @@ -49,13 +49,6 @@ 2.5.2 - - https://github.com/retest/${project.artifactId}/ - scm:git:git@github.com:retest/${project.artifactId}.git - scm:git:git@github.com:retest/${project.artifactId}.git - HEAD - - ossrh @@ -506,4 +499,11 @@ + + + scm:git:https://${git.repo.host}/${git.repo.path}.git + scm:git:ssh://git@${git.repo.host}/${git.repo.path}.git + https://${git.repo.host}/${git.repo.path}/ + HEAD + From 66c6c34aa5fe279a5027e838b186f63073f4b839 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:24 +0000 Subject: [PATCH 067/160] Bump mockito-core from 3.5.11 to 3.7.0 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.5.11 to 3.7.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.5.11...v3.7.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0254a1126..7162c37f2 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ org.mockito mockito-core - 3.5.11 + 3.7.0 test From 4d9d6b0b0859e94ab30caefc3c827b861cd4cfdb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:19 +0000 Subject: [PATCH 068/160] Bump unirest-java from 3.10.00 to 3.11.10 Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.10.00 to 3.11.10. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.10.00...v3.11.10) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7162c37f2..47d5a9a97 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,7 @@ com.konghq unirest-java - 3.10.00 + 3.11.10 From e945e0a135782d55a765005b0c9394d9f4677120 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:25 +0000 Subject: [PATCH 069/160] Bump lombok from 1.18.12 to 1.18.16 Bumps [lombok](https://github.com/rzwitserloot/lombok) from 1.18.12 to 1.18.16. - [Release notes](https://github.com/rzwitserloot/lombok/releases) - [Changelog](https://github.com/rzwitserloot/lombok/blob/master/doc/changelog.markdown) - [Commits](https://github.com/rzwitserloot/lombok/compare/v1.18.12...v1.18.16) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 47d5a9a97..a083366db 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ org.projectlombok lombok - 1.18.12 + 1.18.16 From cfd3f651c504fa3b326d34832f15a43969d60754 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:22 +0000 Subject: [PATCH 070/160] Bump powermock-module-junit4 from 2.0.7 to 2.0.9 Bumps [powermock-module-junit4](https://github.com/powermock/powermock) from 2.0.7 to 2.0.9. - [Release notes](https://github.com/powermock/powermock/releases) - [Changelog](https://github.com/powermock/powermock/blob/release/2.x/docs/changelog.txt) - [Commits](https://github.com/powermock/powermock/compare/powermock-2.0.7...powermock-2.0.9) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a083366db..4d915152e 100644 --- a/pom.xml +++ b/pom.xml @@ -230,7 +230,7 @@ org.powermock powermock-module-junit4 - 2.0.7 + 2.0.9 test From a23262e410e7b8f81083bbd7ed8d76e0e6277eba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:24 +0000 Subject: [PATCH 071/160] Bump jwks-rsa from 0.13.0 to 0.15.0 Bumps [jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.13.0 to 0.15.0. - [Release notes](https://github.com/auth0/jwks-rsa-java/releases) - [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.13.0...0.15.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4d915152e..4452e1a70 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ com.auth0 jwks-rsa - 0.13.0 + 0.15.0 From 5b37f0061898008209a0d5ffdd739b92270bf1cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:21 +0000 Subject: [PATCH 072/160] Bump powermock-api-mockito2 from 2.0.7 to 2.0.9 Bumps [powermock-api-mockito2](https://github.com/powermock/powermock) from 2.0.7 to 2.0.9. - [Release notes](https://github.com/powermock/powermock/releases) - [Changelog](https://github.com/powermock/powermock/blob/release/2.x/docs/changelog.txt) - [Commits](https://github.com/powermock/powermock/compare/powermock-2.0.7...powermock-2.0.9) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4452e1a70..5aa7c1306 100644 --- a/pom.xml +++ b/pom.xml @@ -223,7 +223,7 @@ org.powermock powermock-api-mockito2 - 2.0.7 + 2.0.9 test From d5d2220200ed816b378787e85482d9f30cba058e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:21 +0000 Subject: [PATCH 073/160] Bump powermock-module-junit4-rule-agent from 2.0.7 to 2.0.9 Bumps [powermock-module-junit4-rule-agent](https://github.com/powermock/powermock) from 2.0.7 to 2.0.9. - [Release notes](https://github.com/powermock/powermock/releases) - [Changelog](https://github.com/powermock/powermock/blob/release/2.x/docs/changelog.txt) - [Commits](https://github.com/powermock/powermock/compare/powermock-2.0.7...powermock-2.0.9) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5aa7c1306..5606f17ed 100644 --- a/pom.xml +++ b/pom.xml @@ -237,7 +237,7 @@ org.powermock powermock-module-junit4-rule-agent - 2.0.7 + 2.0.9 test From 466704592894a4e906bc45083212e44d771d15b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:17 +0000 Subject: [PATCH 074/160] Bump guava from 29.0-jre to 30.1-jre Bumps [guava](https://github.com/google/guava) from 29.0-jre to 30.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5606f17ed..e18935657 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,7 @@ com.google.guava guava - 29.0-jre + 30.1-jre From f94587ae82f8926f24eff464a7f125620f55f932 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 03:15:53 +0000 Subject: [PATCH 075/160] Bump junit-pioneer from 0.9.0 to 1.1.0 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 0.9.0 to 1.1.0. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Changelog](https://github.com/junit-pioneer/junit-pioneer/blob/master/docs/release-notes.md) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v0.9.0...v1.1.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e18935657..53bd85084 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ org.junit-pioneer junit-pioneer - 0.9.0 + 1.1.0 test From b487ac90a316e3806dfbd7947f9836796e1812e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 03:15:42 +0000 Subject: [PATCH 076/160] Bump assertj-core from 3.17.2 to 3.18.1 Bumps [assertj-core](https://github.com/assertj/assertj-core) from 3.17.2 to 3.18.1. - [Release notes](https://github.com/assertj/assertj-core/releases) - [Commits](https://github.com/assertj/assertj-core/compare/assertj-core-3.17.2...assertj-core-3.18.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 53bd85084..4a446fa14 100644 --- a/pom.xml +++ b/pom.xml @@ -244,7 +244,7 @@ org.assertj assertj-core - 3.17.2 + 3.18.1 test From f56c75458a9dd761a2b1511c96767149cd2dff8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 03:15:36 +0000 Subject: [PATCH 077/160] Bump approvaltests from 9.3.0 to 9.5.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 9.3.0 to 9.5.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a446fa14..b12aea9c2 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ com.approvaltests approvaltests - 9.3.0 + 9.5.0 test From 91703d0d8549ef36e4414daebf6e1e860a9b6a0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 03:15:44 +0000 Subject: [PATCH 078/160] Bump java-jwt from 3.10.3 to 3.12.0 Bumps [java-jwt](https://github.com/auth0/java-jwt) from 3.10.3 to 3.12.0. - [Release notes](https://github.com/auth0/java-jwt/releases) - [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/java-jwt/compare/3.10.3...3.12.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b12aea9c2..d4b548b9b 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.auth0 java-jwt - 3.10.3 + 3.12.0 From 7dfd6d56981df456b3a7fb376a2d2442e25a75eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Jan 2021 03:20:27 +0000 Subject: [PATCH 079/160] Bump mockito-core from 3.7.0 to 3.7.7 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.7.0 to 3.7.7. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.7.0...v3.7.7) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d4b548b9b..ff1b96567 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ org.mockito mockito-core - 3.7.0 + 3.7.7 test From e0464a218f73812fcd0e50b487e1dba568a19aa6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Jan 2021 03:20:17 +0000 Subject: [PATCH 080/160] Bump junit-pioneer from 1.1.0 to 1.2.0 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 1.1.0 to 1.2.0. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Changelog](https://github.com/junit-pioneer/junit-pioneer/blob/master/docs/release-notes.md) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v1.1.0...v1.2.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ff1b96567..2cb51dc0d 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ org.junit-pioneer junit-pioneer - 1.1.0 + 1.2.0 test From e61150653baa0b824ad367a6e7acba78aaac5334 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 19 Jan 2021 16:49:57 +0100 Subject: [PATCH 081/160] Move to github actions --- .github/workflows/build.yml | 60 ++++++++++++++++++++++++++++++++++++ .retest/recheck.js.ignore | 1 + .travis.settings.xml | 9 ------ .travis.yml | 37 ---------------------- README.md | 2 +- ci/before_deploy.sh | 17 ---------- ci/deploy.sh | 8 ----- ci/script.sh | 18 ----------- retest-gmbh-gpg.asc.enc | Bin 3600 -> 0 bytes 9 files changed, 62 insertions(+), 90 deletions(-) create mode 100644 .github/workflows/build.yml create mode 100644 .retest/recheck.js.ignore delete mode 100644 .travis.settings.xml delete mode 100644 .travis.yml delete mode 100755 ci/before_deploy.sh delete mode 100755 ci/deploy.sh delete mode 100755 ci/script.sh delete mode 100644 retest-gmbh-gpg.asc.enc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..6cbc11289 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,60 @@ +name: build + +on: [push, pull_request] + +env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - name: Check out repo + uses: actions/checkout@v2 + + # fetch unshallow to enable blame for Sonar + - name: Fetch unshallow + run: git fetch --prune --unshallow + + - name: Cache Maven + uses: actions/cache@v1 + with: + path: ~/.m2/repository/ + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Cache Sonar + uses: actions/cache@v1 + with: + path: ~/.sonar/cache/ + key: ${{ runner.os }}-sonar + + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Compile + run: mvn --batch-mode clean package -DskipTests + + - name: Set up JDK 15 + uses: actions/setup-java@v1 + with: + java-version: 15 + + - name: Test + run: > + mvn --batch-mode verify sonar:sonar -Pcoverage + -Dsonar.host.url=https://sonarcloud.io + -Dsonar.organization=retest + + - name: Archive recheck tests.report + if: always() + uses: actions/upload-artifact@v2 + with: + name: tests.report + path: target/test-classes/retest/recheck/tests.report + retention-days: 10 diff --git a/.retest/recheck.js.ignore b/.retest/recheck.js.ignore new file mode 100644 index 000000000..49683a9d3 --- /dev/null +++ b/.retest/recheck.js.ignore @@ -0,0 +1 @@ +// Ignore for recheck. Please do not delete, even if they appear to be empty diff --git a/.travis.settings.xml b/.travis.settings.xml deleted file mode 100644 index 8468c1c6a..000000000 --- a/.travis.settings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - ossrh - ${env.OSSRH_USERNAME} - ${env.OSSRH_PASSWORD} - - - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 1f9ac33ad..000000000 --- a/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -language: java -dist: trusty - -jdk: openjdk8 - -git: - depth: false - -addons: - sonarcloud: - organization: retest - token: "${SONAR_CLOUD_TOKEN}" - -notifications: - email: false - -cache: - directories: - - "${HOME}/.sonar/cache/" - - "${HOME}/.m2/" - -install: true - -script: ci/script.sh - -before_deploy: ci/before_deploy.sh - -deploy: - - provider: script - script: ci/deploy.sh - on: - tags: true - - provider: releases - api_key: "${GH_TOKEN}" - draft: true - on: - tags: true diff --git a/README.md b/README.md index 7145c9f88..2fa52aa0d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # -[![Build Status](https://travis-ci.com/retest/recheck.svg?branch=master)](https://travis-ci.com/retest/recheck) +[![Build Status](https://github.com/retest/recheck/workflows/build/badge.svg)](https://github.com/retest/recheck/actions?query=workflow%3Abuild) [![Latest recheck on Maven Central](https://maven-badges.herokuapp.com/maven-central/de.retest/recheck/badge.svg?style=flat)](https://mvnrepository.com/artifact/de.retest/recheck) [![Latest recheck releases on JitPack](https://jitpack.io/v/de.retest/recheck.svg)]( https://jitpack.io/#de.retest/recheck) [![license](https://img.shields.io/badge/license-AGPL-brightgreen.svg)](https://github.com/retest/recheck/blob/master/LICENSE) diff --git a/ci/before_deploy.sh b/ci/before_deploy.sh deleted file mode 100755 index 7f6110f99..000000000 --- a/ci/before_deploy.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -set -o nounset -set -o errexit -set -o pipefail - -###### GPG ###### -if [ ! -f ${TRAVIS_BUILD_DIR}/already_signed ]; then - # decrypt ReTest secret key - openssl aes-256-cbc -K "${encrypted_58a7d4f10478_key}" -iv "${encrypted_58a7d4f10478_iv}" -in "${TRAVIS_BUILD_DIR}/retest-gmbh-gpg.asc.enc" -out "${TRAVIS_BUILD_DIR}/retest-gmbh-gpg.asc" -d - # import decrypted ReTest secret key - gpg --fast-import "${TRAVIS_BUILD_DIR}/retest-gmbh-gpg.asc" - # package sign artifacts - mvn ${MVN_ARGS} verify -DskipTests -Psign - - touch ${TRAVIS_BUILD_DIR}/already_signed -fi diff --git a/ci/deploy.sh b/ci/deploy.sh deleted file mode 100755 index 169126be7..000000000 --- a/ci/deploy.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -o nounset -set -o errexit -set -o pipefail - -###### Maven ###### -mvn ${MVN_ARGS} deploy -DskipTests -Psign diff --git a/ci/script.sh b/ci/script.sh deleted file mode 100755 index 8befda641..000000000 --- a/ci/script.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -o nounset -set -o errexit -set -o pipefail - -###### Maven ###### -# Compile with JDK 8 -mvn ${MVN_ARGS} clean package -DskipTests - -# Test with JDK 14 -wget --quiet https://github.com/sormuras/bach/raw/master/install-jdk.sh && . ./install-jdk.sh -F 14 - -if [ ${TRAVIS_SECURE_ENV_VARS} = "true" ]; then - mvn ${MVN_ARGS} verify sonar:sonar -Pcoverage -else - mvn ${MVN_ARGS} verify -fi diff --git a/retest-gmbh-gpg.asc.enc b/retest-gmbh-gpg.asc.enc deleted file mode 100644 index 950163fdc786e5c744afab4534e2a24610b16e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3600 zcmV+r4)5`0;kA#buxbPM#xb%Rfbr!Eb8hqlw{)w13h2@TmVh`GgwBhf#))uv>_AFo zxHVeiu~2b8rbkZUy*P-%w&UUnS5&S5mW*FLv{k@a!ny_YbN7rq&!Nxm@OvLx_+%;G|ZnK}=)F#fv01B4Fa?zW~i2)SzJK?Z#qA1K?8W(Y-&P=MsgO}9#% z!%A}jf>O}GP%~7AZKWaewx*kaBM&8>Yc%qWn6DTTjQ?e!Q)nZ_1A_B+QX`gYb+j0} z*#ZH+)-mg>Q|P+?g_^EXU_w)eTP*b}ff)_mEKo|NMdK$j548!mRcKZ%7Kr-jj0#$G zDVCTUG&1-cw-R-4O0%|;^b~^TBOz3P+b~dqiT!R(=Aje|+B)}pX3Fa0D2t*UhHsP9 zKUKI+0ZT=YtgEE#s1V2CRj$q8wlue;Y!^wVAU;+<+zwrgO=Y*Gy$}RYu&oP#cz^6Q z29`k$1IU5nM$2W@t_7=VKW)34|91V6F(2d=!8wvegj~O2BA(V&h6H`A?ZY9dTeB_i6Mio19HwQp|enRHh zZ`HxyvJ%RGAWG5?nBcwVKN`36Ows@V8y5s`q(*k! zOVW7(yYaawULhIABGA_<3+M)5ao;XZ)Mbyp=Xg@C34-l*Re-aX!rE=Py+=v5l`kd> zQzT(AtGM=*;Zb~?mb}C4M#QV}eVibvlc$8D0wL}SHY2BbDWw}bn9Ik-@Mur48SgPR zecrj9ng81@5FJCkD&w6y;`{u4Dwkbua5`RY-ovxZq#MgP6O?q2*AVeZnNid}zB-V-tT+eUDmc?{gn~>x};cA3wjCA0xR|J~0c zD`7AKOk%ox|N%I5(#OqGzPJfb<{wPn~=w?4tk(T2{{{eAErMoLZB`*lkVBEU35j z9lmnc^&I@%Ci4RZHiX}(jdtM8B2?im$rGlaEAld2X$K6yep$WRSmK{~QHbkp$V)=A z6#M84ifUQEL~IbOwX#Yfwts_OGJ>P_JMRC!W+IKqY*dTC-EZ`f@3SJAUyjz@W8bHM zl8_Kt{!&YwH@=ZGvzS-3Ll^!4(7Gc2zUzr@Wd=Oyao{R)jWg_QYc^x*1xzHdGc^Wj z^RAhfP80g?Xd>GV3I&#oC0y|*Dd*awlOOm((99rnnQIl=f|c-@;B9G-s0_3cHQvGP z1TH11<`ShRwd}w(%Zwm9{408ml)G^DkFw0}C%&EP{Zf!zT#(bWjqp}Cn*{fFg)#+r zDMtfK-dl=_(J@fpGT>)7KB^~e;OkzmbT>A~5}1os7W1lT*69&v{nh{x>G`(rLuYJCco2zyr{apj8LPB zWzY#T2^NG&zem#5_HhT7--d20DTpTzO~!ctxn-~%j-4mFGH=0{|IgA7)ZeGWHM|kD zi&oke;et&JvAEUCpjNE0*rWTP5x%GLL>^g1^;Ls`9n>QM~ zr)|5!Q7cH&lh>(+t)kyA&%eMcAZ`2Evb}AP(;D`XLp09tN-VNjgHLT16F1H?`iNp? zQdL+er@OZGOVONIg4msA)Dh^3%I4)zYPOU21b(U9h6 zH7Eo*RHs{W!<4_GP$e}2@utk zlQ79a1e6Gn*_=asctrq}a zn=#oik88J&wR8il#WM5e7C-^2(m`a?JBBH{vlp%EuW(;*>#{D%Aj(vsHUs*ZaE*=y z-n%#vgFD9ou){?uIZgmRzf=ZTsdlgUKLisg=m7@Yu0z{$BF)s9PiVoJ2V3vO0R{3? zCIDyyhFC~R8!<*KxFfAOsEoQ?V!C-9JsIv328ME0zmWLA<0ef0EP|>K$bN||j5ZM%*nU90T#i*)l zAz!yx?lmrM3|QXhEukoyQn69`iFC>c(qR3|l0F@-`Oz#@iO~^gfSZRZaehfU}%76vmdpTG+py@cS6=liYXD00#dg{d&4%iQVPe2v3KW*-_U*MK#NT}?7{4mew z;-Y{U3z7oxdWL-$K$Y(0V6fnZ2ewG!Swg3Iu5z?n%@IYY^_b&(@*(rrFtx2#cmlm+ zQllIZ`ryHaLPEh){_4Wv{FXz$zM*KvhImm336AV;skl87*(DcA`K7Sl3H<&;^Z6>V zyb0kdoKeF5zM9^6H5_bf4i4GnOU|I$#1*gK2_1;aSO-jbFfx(L)f9bgR`ZDEu_Ml} zQ&4id`8i7k(GHQ(HBG`98Z@Q(F-bCsx?{QLS;G8I3G#=`6+iR3kcfG$!CBXSBt2+2 zP|?{Qmg&36-2)hfoRbsA}Sie3?IL?11)62N(sh$(2`?O>dYDJ6L?)RA)28kKw@mhCURa;wJN8 z&ej!l9#GBV;w>G?bUUX;XeG5Gnd)a4k41qJ9;)Dw9c+;akI>JGw9bp6%k_6?bmoj1 zctH?IqAgh%Ji7tE3%G`LTKEsBAvw#Xl!|g}`MFucp=f@L3EgcAAkB3#kLx|H8VARI z*eRBPmdirA)Lihb2<~G5ak#sOIyg+*0Al_b_eryB>5Bm!4){{}`xRrH?Mcil|2Q#NA~r~!JPxOO$7t^g^d0L3HK1I)1&QSM=wRN@X8fe$}?R9eJN@1IIU3Hd(@eT>cP z?J1XRqaw||%*-0Z=~Rzua|CPyCACFdZ|L}d5{qg#Y=+V$QGJZ?)hxNB5*A^UQ8Zfl zoa$~vkrd7+S+*?)8WtJi>73??C--e6UI@y$J*KVI52Va9ph#{3s*zHnzG@!rPyrNx Wp87W(eA(@v9?Xs&%7^gD{0QW-P4lY& From 4e3ad7e66aeabb04ff6c589fff529e74a84619d6 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 19 Jan 2021 17:12:30 +0100 Subject: [PATCH 082/160] More verbose compiler warings --- pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pom.xml b/pom.xml index 2cb51dc0d..45cb0fab4 100644 --- a/pom.xml +++ b/pom.xml @@ -293,6 +293,10 @@ ${java.version} ${java.version} + + + + From adfba0cbd2abcc513a5c56841c067e563a4e5036 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 19 Jan 2021 17:19:06 +0100 Subject: [PATCH 083/160] Fix wrong version of junit-platform-commons --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 45cb0fab4..db9eb3653 100644 --- a/pom.xml +++ b/pom.xml @@ -267,6 +267,12 @@ junit-pioneer 1.2.0 test + + + org.junit.platform + junit-platform-commons + + From c49310abaf6a172de96543467871505cf4d97d66 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 19 Jan 2021 17:27:18 +0100 Subject: [PATCH 084/160] Fix required order, but filesystem don't garantie that --- .../java/de/retest/recheck/ignore/SearchFilterFilesTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java b/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java index d37c34256..11a402478 100644 --- a/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java +++ b/src/test/java/de/retest/recheck/ignore/SearchFilterFilesTest.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -59,8 +58,7 @@ void getProjectFilterFiles_should_get_all_project_filters() throws IOException { final List actualFilterFileNames = projectFilterFiles.stream() // .map( Pair::getLeft ) // .collect( Collectors.toList() ); - final List expectedFilterFileNames = Arrays.asList( "another.filter.js", "some.filter" ); - assertThat( actualFilterFileNames ).isEqualTo( expectedFilterFileNames ); + assertThat( actualFilterFileNames ).containsOnly( "another.filter.js", "some.filter" ); } @Test From 080e08c3bd5d2b46056afb0ef71821099a289e9a Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 19 Jan 2021 18:08:26 +0100 Subject: [PATCH 085/160] Small code smell fixes --- src/main/java/de/retest/recheck/RecheckProperties.java | 1 - .../recheck/configuration/PathBasedProjectRootFinder.java | 4 ++-- .../retest/recheck/configuration/ProjectRootFinderUtil.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index ad1bc37f1..77f977d12 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -43,7 +43,6 @@ static RecheckProperties getInstance() { String DEFAULT_XML_FILE_NAME = "retest.xml"; String RETEST_FOLDER_NAME = ".retest"; - String RETEST_PROPERTIES_FILE_NAME = "retest.properties"; String GOLDEN_MASTER_FILE_EXTENSION = ".recheck"; String TEST_REPORT_FILE_EXTENSION = ".report"; diff --git a/src/main/java/de/retest/recheck/configuration/PathBasedProjectRootFinder.java b/src/main/java/de/retest/recheck/configuration/PathBasedProjectRootFinder.java index 893001463..af635f07a 100644 --- a/src/main/java/de/retest/recheck/configuration/PathBasedProjectRootFinder.java +++ b/src/main/java/de/retest/recheck/configuration/PathBasedProjectRootFinder.java @@ -30,12 +30,12 @@ public Optional findProjectRoot( final Path base ) { } final Path absoluteBasePath = base.toAbsolutePath(); - logger.debug( "Searching for project root under {}.", absoluteBasePath ); + logger.debug( "Searching for project root under '{}'.", absoluteBasePath ); for ( Path currentFolder = absoluteBasePath; currentFolder != null; currentFolder = currentFolder.getParent() ) { if ( containsSubPath( currentFolder ) ) { - logger.debug( "Found project root in {}.", currentFolder ); + logger.debug( "Found project root in '{}'.", currentFolder ); return Optional.of( currentFolder.toAbsolutePath() ); } } diff --git a/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java b/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java index b08495781..11eb4e7d4 100644 --- a/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java +++ b/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java @@ -20,7 +20,7 @@ public static Optional getProjectRoot() { return getProjectRoot( baseFolder.toAbsolutePath() ); } - public static Optional getProjectRoot( final Path basePath ) { + static Optional getProjectRoot( final Path basePath ) { return projectRootFinder.stream() // .map( finder -> finder.findProjectRoot( basePath ) ) // .flatMap( OptionalUtil::stream ) // From b1ef24b709f6118eac048cda875a62c17a910699 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Mon, 25 Jan 2021 14:29:29 +0100 Subject: [PATCH 086/160] Fix tricky race condition in config setup --- src/main/java/de/retest/recheck/RecheckProperties.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index 77f977d12..10d8147b6 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -23,6 +23,7 @@ public interface RecheckProperties extends Reloadable { static void init() { ProjectRootFinderUtil.getProjectRoot().ifPresent( projectRoot -> ConfigFactory.setProperty( "projectroot", projectRoot.toAbsolutePath().toString() ) ); + ConfigCache.clear(); } static RecheckProperties getInstance() { From 15a1bed08ce494852831cebb5816c01d180dc0ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Jan 2021 03:23:55 +0000 Subject: [PATCH 087/160] Bump assertj-core from 3.18.1 to 3.19.0 Bumps [assertj-core](https://github.com/assertj/assertj-core) from 3.18.1 to 3.19.0. - [Release notes](https://github.com/assertj/assertj-core/releases) - [Commits](https://github.com/assertj/assertj-core/compare/assertj-core-3.18.1...assertj-core-3.19.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index db9eb3653..a88b782dd 100644 --- a/pom.xml +++ b/pom.xml @@ -244,7 +244,7 @@ org.assertj assertj-core - 3.18.1 + 3.19.0 test From b40513f83cfc03465b04077f9ec8cc75ba870286 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jan 2021 03:16:49 +0000 Subject: [PATCH 088/160] Bump junit-pioneer from 1.2.0 to 1.3.0 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 1.2.0 to 1.3.0. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Changelog](https://github.com/junit-pioneer/junit-pioneer/blob/master/docs/release-notes.md) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v1.2.0...v1.3.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a88b782dd..ed1fba628 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ org.junit-pioneer junit-pioneer - 1.2.0 + 1.3.0 test From 37bd00c8a6f4528b6b322a9e3db6ed1c227aa9f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jan 2021 03:16:53 +0000 Subject: [PATCH 089/160] Bump java-jwt from 3.12.0 to 3.12.1 Bumps [java-jwt](https://github.com/auth0/java-jwt) from 3.12.0 to 3.12.1. - [Release notes](https://github.com/auth0/java-jwt/releases) - [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/java-jwt/compare/3.12.0...3.12.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ed1fba628..be4e07b7d 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.auth0 java-jwt - 3.12.0 + 3.12.1 From 84b43032cb31d7b22bc9c739ecf1de8e090440ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Jan 2021 03:15:56 +0000 Subject: [PATCH 090/160] Bump lombok from 1.18.16 to 1.18.18 Bumps [lombok](https://github.com/rzwitserloot/lombok) from 1.18.16 to 1.18.18. - [Release notes](https://github.com/rzwitserloot/lombok/releases) - [Changelog](https://github.com/rzwitserloot/lombok/blob/master/doc/changelog.markdown) - [Commits](https://github.com/rzwitserloot/lombok/compare/v1.18.16...v1.18.18) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be4e07b7d..02ec4d50c 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ org.projectlombok lombok - 1.18.16 + 1.18.18 From 53b39904d612b0bfef81f1e92b492175154041bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Feb 2021 03:11:23 +0000 Subject: [PATCH 091/160] Bump junit-jupiter from 5.7.0 to 5.7.1 Bumps [junit-jupiter](https://github.com/junit-team/junit5) from 5.7.0 to 5.7.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.7.0...r5.7.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 02ec4d50c..7ef44946f 100644 --- a/pom.xml +++ b/pom.xml @@ -195,7 +195,7 @@ org.junit.jupiter junit-jupiter - 5.7.0 + 5.7.1 test From 35b759bb7f337d3f98f955e95bc18460692699df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Feb 2021 03:09:05 +0000 Subject: [PATCH 092/160] Bump unirest-java from 3.11.10 to 3.11.11 Bumps [unirest-java](https://github.com/Kong/unirest-java) from 3.11.10 to 3.11.11. - [Release notes](https://github.com/Kong/unirest-java/releases) - [Changelog](https://github.com/Kong/unirest-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/Kong/unirest-java/compare/v3.11.10...v3.11.11) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7ef44946f..927272383 100644 --- a/pom.xml +++ b/pom.xml @@ -130,7 +130,7 @@ com.konghq unirest-java - 3.11.10 + 3.11.11 From c8b5e5a2f143e7fa7a8d7919a4bbc18b541ac9fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 Feb 2021 03:10:24 +0000 Subject: [PATCH 093/160] Bump java-jwt from 3.12.1 to 3.13.0 Bumps [java-jwt](https://github.com/auth0/java-jwt) from 3.12.1 to 3.13.0. - [Release notes](https://github.com/auth0/java-jwt/releases) - [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/java-jwt/compare/3.12.1...3.13.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 927272383..04dde5573 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.auth0 java-jwt - 3.12.1 + 3.13.0 From 3387e23d88b3d57efce1a989302cb225f316fe2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Feb 2021 03:10:14 +0000 Subject: [PATCH 094/160] Bump mockito-core from 3.7.7 to 3.8.0 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.7.7 to 3.8.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.7.7...v3.8.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 04dde5573..4190ad616 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ org.mockito mockito-core - 3.7.7 + 3.8.0 test From 29ceaa4c05ae32816f863bcf5c15cf1cc98cfbcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 03:04:01 +0000 Subject: [PATCH 095/160] Bump jwks-rsa from 0.15.0 to 0.17.0 Bumps [jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.15.0 to 0.17.0. - [Release notes](https://github.com/auth0/jwks-rsa-java/releases) - [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.15.0...0.17.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4190ad616..9698601c4 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ com.auth0 jwks-rsa - 0.15.0 + 0.17.0 From 21d94fbe39b7b8cdfdf991302bd0fdff5c9a65b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Mar 2021 03:04:00 +0000 Subject: [PATCH 096/160] Bump commons-lang3 from 3.11 to 3.12.0 Bumps commons-lang3 from 3.11 to 3.12.0. Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9698601c4..1b03cd759 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ org.apache.commons commons-lang3 - 3.11 + 3.12.0 From c07aeaa1285776204d60895992f58532ede6e247 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Mar 2021 03:08:43 +0000 Subject: [PATCH 097/160] Bump junit-pioneer from 1.3.0 to 1.3.8 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 1.3.0 to 1.3.8. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Changelog](https://github.com/junit-pioneer/junit-pioneer/blob/master/docs/release-notes.md) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v1.3.0...v1.3.8) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1b03cd759..e014b505b 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ org.junit-pioneer junit-pioneer - 1.3.0 + 1.3.8 test From c8749a4e018ad296168a56a8e53262b20d8fb45c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Feb 2021 03:05:06 +0000 Subject: [PATCH 098/160] Bump approvaltests from 9.5.0 to 10.0.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 9.5.0 to 10.0.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e014b505b..b4a9d7b53 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ com.approvaltests approvaltests - 9.5.0 + 10.0.0 test From 03d2fb43ef4abefb2f8b9dcf3a151b60411a270d Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 3 Mar 2021 17:51:44 +0100 Subject: [PATCH 099/160] Updates for new Approvals version --- .../de/retest/recheck/util/ApprovalsUtil.java | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/test/java/de/retest/recheck/util/ApprovalsUtil.java b/src/test/java/de/retest/recheck/util/ApprovalsUtil.java index 5ec67d731..8d086b68d 100644 --- a/src/test/java/de/retest/recheck/util/ApprovalsUtil.java +++ b/src/test/java/de/retest/recheck/util/ApprovalsUtil.java @@ -2,6 +2,7 @@ import static java.io.File.separator; +import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.io.UncheckedIOException; @@ -20,9 +21,11 @@ import org.approvaltests.Approvals; import org.approvaltests.core.ApprovalFailureReporter; +import org.approvaltests.core.Options; import org.approvaltests.namer.ApprovalNamer; import org.approvaltests.reporters.DiffReporter; import org.approvaltests.writers.ApprovalTextWriter; +import org.approvaltests.writers.Writer; import org.eclipse.persistence.jaxb.JAXBContextFactory; import com.spun.util.io.StackElementSelector; @@ -51,8 +54,9 @@ public static void verify( final Object o ) { } private static void verify( final String actual, final String fileExtensionWithoutDot ) { - Approvals.verify( new ApprovalTextWriter( actual, fileExtensionWithoutDot ), - new MavenConformJUnitStackTraceNamer(), DIFF_HANDLER ); + Approvals.verify( + new ApprovalTextWriter( actual, new Options().forFile().withExtension( fileExtensionWithoutDot ) ), + new MavenConformJUnitStackTraceNamer(), new Options( DIFF_HANDLER ) ); } public static void verifyMultiXsd( final Class clazz ) throws JAXBException, IOException { @@ -60,8 +64,9 @@ public static void verifyMultiXsd( final Class clazz ) throws JAXBException, } private static void verifyMulti( final String actual, final String name, final String fileExtensionWithoutDot ) { - Approvals.verify( new ApprovalTextWriter( actual, fileExtensionWithoutDot ), - new MultiMavenConformJUnitStackTraceNamer( name ), DIFF_HANDLER ); + Approvals.verify( + new ApprovalTextWriter( actual, new Options().forFile().withExtension( fileExtensionWithoutDot ) ), + new MultiMavenConformJUnitStackTraceNamer( name ), new Options( DIFF_HANDLER ) ); } private static String maskVersion( final String actual ) { @@ -117,6 +122,17 @@ public String getSourceFilePath() { final String testClassPath = info.getSourceFile().getAbsolutePath(); return (testClassPath + separator).replace( srcTestJavaPath, srcTestResourcesPath ); } + + @Override + public File getReceivedFile( final String extensionWithDot ) { + return new File( getSourceFilePath() + separator + getApprovalName() + Writer.received + extensionWithDot ); + } + + @Override + public File getApprovedFile( final String extensionWithDot ) { + return new File( getSourceFilePath() + separator + getApprovalName() + Writer.approved + extensionWithDot ); + } + } @RequiredArgsConstructor @@ -134,6 +150,17 @@ public String getApprovalName() { public String getSourceFilePath() { return approvalNamer.getSourceFilePath() + separator + approvalNamer.getApprovalName() + separator; } + + @Override + public File getReceivedFile( final String extensionWithDot ) { + return new File( getSourceFilePath() + separator + getApprovalName() + Writer.received + extensionWithDot ); + } + + @Override + public File getApprovedFile( final String extensionWithDot ) { + return new File( getSourceFilePath() + separator + getApprovalName() + Writer.approved + extensionWithDot ); + } + } public static class JUnitStackSelector implements StackElementSelector { From afd01eb66f6297c2882bd08a92f4555b65ebad85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Mar 2021 03:04:31 +0000 Subject: [PATCH 100/160] Bump java-jwt from 3.13.0 to 3.14.0 Bumps [java-jwt](https://github.com/auth0/java-jwt) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/auth0/java-jwt/releases) - [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/java-jwt/compare/3.13.0...3.14.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b4a9d7b53..a048f0b1e 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.auth0 java-jwt - 3.13.0 + 3.14.0 From 9309135f44162b31b29644d1d46ae37b123de38d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Mar 2021 10:23:05 +0000 Subject: [PATCH 101/160] Bump approvaltests from 10.0.0 to 10.0.1 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 10.0.0 to 10.0.1. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a048f0b1e..06cbb67ec 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ com.approvaltests approvaltests - 10.0.0 + 10.0.1 test From fa9542bc4e65ba1906575202edd3e257646113a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Mar 2021 03:03:54 +0000 Subject: [PATCH 102/160] Bump approvaltests from 10.0.1 to 10.2.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 10.0.1 to 10.2.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/commits/10.2.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 06cbb67ec..0f4a7f61c 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ com.approvaltests approvaltests - 10.0.1 + 10.2.0 test From 1a7f0196e319ea54dfc4e8cd2692f1c553ebc370 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 03:03:39 +0000 Subject: [PATCH 103/160] Bump guava from 30.1-jre to 30.1.1-jre Bumps [guava](https://github.com/google/guava) from 30.1-jre to 30.1.1-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0f4a7f61c..79d472884 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,7 @@ com.google.guava guava - 30.1-jre + 30.1.1-jre From 0df2764b75860ac86954b4844992746e4eee4349 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Mon, 29 Mar 2021 17:58:33 +0200 Subject: [PATCH 104/160] Make auth server URL configurable --- src/main/java/de/retest/recheck/RecheckProperties.java | 6 ++++++ .../java/de/retest/recheck/auth/RetestAuthentication.java | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index 10d8147b6..4a0c92883 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -85,6 +85,12 @@ static RecheckProperties getInstance() { @DefaultValue( "false" ) boolean rehubReportUploadEnabled(); + String REHUB_REPORT_AUTH_URL_PROPERTY_KEY = "de.retest.recheck.rehub.reportUploadUrl"; + + @Key( REHUB_REPORT_AUTH_URL_PROPERTY_KEY ) + @DefaultValue( "https://login.retest.de/auth/realms/customer/protocol/openid-connect" ) + String rehubReportAuthUrl(); + String REHUB_REPORT_UPLOAD_ATTEMPTS = "de.retest.recheck.rehub.upload.attempts"; @Key( REHUB_REPORT_UPLOAD_ATTEMPTS ) diff --git a/src/main/java/de/retest/recheck/auth/RetestAuthentication.java b/src/main/java/de/retest/recheck/auth/RetestAuthentication.java index 843f06ef5..94bb0b7db 100644 --- a/src/main/java/de/retest/recheck/auth/RetestAuthentication.java +++ b/src/main/java/de/retest/recheck/auth/RetestAuthentication.java @@ -32,6 +32,7 @@ import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.JWTVerifier; +import de.retest.recheck.RecheckProperties; import kong.unirest.HttpResponse; import kong.unirest.JsonNode; import kong.unirest.Unirest; @@ -43,9 +44,7 @@ @Slf4j public class RetestAuthentication { - private static final String REALM = "customer"; - private static final String KEYCLOAK_URL = "https://login.retest.de/auth"; - private static final String BASE_URL = KEYCLOAK_URL + "/realms/" + REALM + "/protocol/openid-connect"; + private static final String BASE_URL = RecheckProperties.getInstance().rehubReportAuthUrl(); private static final String AUTH_URL = BASE_URL + "/auth"; private static final String TOKEN_URL = BASE_URL + "/token"; private static final String CERTS_URL = BASE_URL + "/certs"; @@ -288,7 +287,7 @@ public void run() { } } catch ( final IOException e ) { - log.error( "Error during communication with {}", KEYCLOAK_URL, e ); + log.error( "Error during communication with {}", BASE_URL, e ); } } From 876fa26256453f79e7cfc9d67e58a49abca28e0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Apr 2021 02:04:11 +0000 Subject: [PATCH 105/160] Bump maven-release-plugin from 3.0.0-M1 to 3.0.0-M4 Bumps [maven-release-plugin](https://github.com/apache/maven-release) from 3.0.0-M1 to 3.0.0-M4. - [Release notes](https://github.com/apache/maven-release/releases) - [Commits](https://github.com/apache/maven-release/compare/maven-release-3.0.0-M1...maven-release-3.0.0-M4) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 79d472884..66b5cfceb 100644 --- a/pom.xml +++ b/pom.xml @@ -363,7 +363,7 @@ org.apache.maven.plugins maven-release-plugin - 3.0.0-M1 + 3.0.0-M4 install v@{project.version} From ab72344a70f5b4e0815ca682a2bcb26ea1ae7242 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Apr 2021 02:05:16 +0000 Subject: [PATCH 106/160] Bump jwks-rsa from 0.17.0 to 0.17.1 Bumps [jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.17.0 to 0.17.1. - [Release notes](https://github.com/auth0/jwks-rsa-java/releases) - [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.17.0...0.17.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 66b5cfceb..d6ecb1b3d 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ com.auth0 jwks-rsa - 0.17.0 + 0.17.1 From cf664359acd5445497785fb6f5e09d27c1f351d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Apr 2021 14:16:46 +0000 Subject: [PATCH 107/160] Bump junit-pioneer from 1.3.8 to 1.4.0 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 1.3.8 to 1.4.0. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v1.3.8...v1.4.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d6ecb1b3d..d18c00612 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ org.junit-pioneer junit-pioneer - 1.3.8 + 1.4.0 test From 212b7f31a07b59a10d822c64858b57ba26e4703d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Apr 2021 02:04:09 +0000 Subject: [PATCH 108/160] Bump mockito-core from 3.8.0 to 3.9.0 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.8.0 to 3.9.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.8.0...v3.9.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d18c00612..ca9af56e5 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ org.mockito mockito-core - 3.8.0 + 3.9.0 test From 8b6d7b22a086f428d8d0a54ba90aca6e375c5aed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Apr 2021 02:03:51 +0000 Subject: [PATCH 109/160] Bump lombok from 1.18.18 to 1.18.20 Bumps [lombok](https://github.com/rzwitserloot/lombok) from 1.18.18 to 1.18.20. - [Release notes](https://github.com/rzwitserloot/lombok/releases) - [Changelog](https://github.com/rzwitserloot/lombok/blob/master/doc/changelog.markdown) - [Commits](https://github.com/rzwitserloot/lombok/compare/v1.18.18...v1.18.20) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca9af56e5..5948e385c 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,7 @@ org.projectlombok lombok - 1.18.18 + 1.18.20 From 33e6e33e6e05376d67ba8142973e229b2a197d56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Mar 2021 02:05:22 +0000 Subject: [PATCH 110/160] Bump approvaltests from 10.2.0 to 10.3.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 10.2.0 to 10.3.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/compare/10.2.0...10.3.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5948e385c..eb8568f40 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ com.approvaltests approvaltests - 10.2.0 + 10.3.0 test From c338f1b02f9295934a9e0d82c5ddf1c61c5a29b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Apr 2021 02:04:06 +0000 Subject: [PATCH 111/160] Bump java-jwt from 3.14.0 to 3.15.0 Bumps [java-jwt](https://github.com/auth0/java-jwt) from 3.14.0 to 3.15.0. - [Release notes](https://github.com/auth0/java-jwt/releases) - [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/java-jwt/compare/3.14.0...3.15.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index eb8568f40..5a5d8c0b6 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.auth0 java-jwt - 3.14.0 + 3.15.0 From 366ab6821cd3d75aac249eaee68ac3967117a7ee Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Thu, 27 May 2021 12:50:24 +0200 Subject: [PATCH 112/160] Update release process --- .github/workflows/build-project.yml | 66 ++++++++++++++++++++ .github/workflows/build.yml | 60 ------------------ .github/workflows/deploy-release.yml | 44 +++++++++++++ .github/workflows/release-beta.yml | 63 +++++++++++++++++++ .github/workflows/release-feature-finish.yml | 45 +++++++++++++ .github/workflows/release-feature-start.yml | 43 +++++++++++++ .github/workflows/release-hotfix-finish.yml | 45 +++++++++++++ .github/workflows/release-hotfix-start.yml | 43 +++++++++++++ .mergify.yml | 19 ++++-- pom.xml | 21 +++++-- 10 files changed, 380 insertions(+), 69 deletions(-) create mode 100644 .github/workflows/build-project.yml delete mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/deploy-release.yml create mode 100644 .github/workflows/release-beta.yml create mode 100644 .github/workflows/release-feature-finish.yml create mode 100644 .github/workflows/release-feature-start.yml create mode 100644 .github/workflows/release-hotfix-finish.yml create mode 100644 .github/workflows/release-hotfix-start.yml diff --git a/.github/workflows/build-project.yml b/.github/workflows/build-project.yml new file mode 100644 index 000000000..4ca0df3b8 --- /dev/null +++ b/.github/workflows/build-project.yml @@ -0,0 +1,66 @@ +name: Build project + +on: [push, pull_request] + + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Fetch unshallow to enable blame for Sonar + run: git fetch --prune --unshallow + + - uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Cache Sonar + uses: actions/cache@v1 + with: + path: ~/.sonar/cache/ + key: ${{ runner.os }}-sonar + + - name: Compile + run: mvn ${MVN_ARGS} clean package -DskipTests + + - uses: actions/setup-java@v1 + with: + java-version: 15 + + - name: Test with SonarCloud + id: test-with-sonar + if: ${{ github.actor == 'dependabot' }} + run: > + mvn ${MVN_ARGS} verify sonar:sonar -Pcoverage + -Dsonar.host.url=https://sonarcloud.io + -Dsonar.organization=retest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + + - name: Test without SonarCloud + id: test-without-sonar + if: ${{ steps.test-with-sonar.conclusion == 'skipped' }} + run: mvn ${MVN_ARGS} verify + + - name: Archive recheck tests.report + if: always() + uses: actions/upload-artifact@v2 + with: + name: tests.report + path: target/test-classes/retest/recheck/tests.report + retention-days: 10 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 6cbc11289..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,60 +0,0 @@ -name: build - -on: [push, pull_request] - -env: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - name: Check out repo - uses: actions/checkout@v2 - - # fetch unshallow to enable blame for Sonar - - name: Fetch unshallow - run: git fetch --prune --unshallow - - - name: Cache Maven - uses: actions/cache@v1 - with: - path: ~/.m2/repository/ - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-maven- - - - name: Cache Sonar - uses: actions/cache@v1 - with: - path: ~/.sonar/cache/ - key: ${{ runner.os }}-sonar - - - name: Set up JDK 8 - uses: actions/setup-java@v1 - with: - java-version: 8 - - - name: Compile - run: mvn --batch-mode clean package -DskipTests - - - name: Set up JDK 15 - uses: actions/setup-java@v1 - with: - java-version: 15 - - - name: Test - run: > - mvn --batch-mode verify sonar:sonar -Pcoverage - -Dsonar.host.url=https://sonarcloud.io - -Dsonar.organization=retest - - - name: Archive recheck tests.report - if: always() - uses: actions/upload-artifact@v2 - with: - name: tests.report - path: target/test-classes/retest/recheck/tests.report - retention-days: 10 diff --git a/.github/workflows/deploy-release.yml b/.github/workflows/deploy-release.yml new file mode 100644 index 000000000..39e598abc --- /dev/null +++ b/.github/workflows/deploy-release.yml @@ -0,0 +1,44 @@ +name: Deploy releases + +on: + create: + tags: v* + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-java@v1 + with: + java-version: 8 + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Install gpg secret key + run: | + gpg --batch --import <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") + gpg --list-secret-keys --keyid-format LONG + + - id: publish-to-central + name: Publish to Central Repository + run: | + mvn ${MVN_ARGS} -DskipTests -Psign clean deploy + env: + GPG_PASSPHRASE: ${{ secrets.OSSRH_GPG_PASSPHRASE }} + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} diff --git a/.github/workflows/release-beta.yml b/.github/workflows/release-beta.yml new file mode 100644 index 000000000..bae3eb0bd --- /dev/null +++ b/.github/workflows/release-beta.yml @@ -0,0 +1,63 @@ +name: Release beta + +on: + workflow_dispatch: + inputs: + approval: + description: 'Do you really want to release a BETA from configured BRANCH?' + required: true + default: 'NO' + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - name: Verify approval + run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" + + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ secrets.TRIGGER_ACTIONS_GITHUB_TOKEN }} + + - name: Verify for release or hotfix branch + run: "[[ $( git branch --show-current ) =~ ^release.*|^hotfix.* ]]" + + - uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Configure Git user + run: | + git config user.email "ops+githubactions@retest.de" + git config user.name "retest release github action" + + - id: next_beta + name: Find next beta version + run: | + # get next stable release version from pom.xml + RELEASE_VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout | sed 's/-SNAPSHOT//' ) + # find last beta for this version using git tags. Prefix with 0 als default for next line + LAST_BETA_TAG=0$( git for-each-ref --sort=-taggerdate --count=1 --format '%(refname:short)' "refs/tags/v${RELEASE_VERSION}-beta.*" ) + # Create string for beta version + NEXT_BETA="$RELEASE_VERSION-beta.$((1+"${LAST_BETA_TAG/v$RELEASE_VERSION-beta./}"))" + echo "::set-output name=version::$NEXT_BETA" + + - name: Create beta release tag + run: | + mvn versions:set -DnewVersion=${{ steps.next_beta.outputs.version }} -DgenerateBackupPoms=false + git commit -a -m "ci: release ${{ steps.next_beta.outputs.version }}" + git tag -a v${{ steps.next_beta.outputs.version }} -m "ci: tag beta release ${{ steps.next_beta.outputs.version }}" + git push --tags diff --git a/.github/workflows/release-feature-finish.yml b/.github/workflows/release-feature-finish.yml new file mode 100644 index 000000000..4e14f0487 --- /dev/null +++ b/.github/workflows/release-feature-finish.yml @@ -0,0 +1,45 @@ +name: Release feature finish + +on: + workflow_dispatch: + inputs: + approval: + description: 'Do you really want to finish the current FEATURE release?' + required: true + default: 'NO' + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - name: Verify approval + run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" + + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ secrets.TRIGGER_ACTIONS_GITHUB_TOKEN }} + + - uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Configure Git user + run: | + git config user.email "ops+githubactions@retest.de" + git config user.name "retest release github action" + + - name: Tag and finish release branch + run: mvn ${MVN_ARGS} gitflow:release-finish diff --git a/.github/workflows/release-feature-start.yml b/.github/workflows/release-feature-start.yml new file mode 100644 index 000000000..1f18fba1a --- /dev/null +++ b/.github/workflows/release-feature-start.yml @@ -0,0 +1,43 @@ +name: Release feature start + +on: + workflow_dispatch: + inputs: + approval: + description: 'Do you really want to start a FEATURE release from DEVELOP branch?' + required: true + default: 'NO' + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - name: Verify approval + run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" + + - uses: actions/checkout@v2 + + - uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Configure Git user + run: | + git config user.email "ops+githubactions@retest.de" + git config user.name "retest release github action" + + + - name: Start release branch + run: mvn ${MVN_ARGS} gitflow:release-start diff --git a/.github/workflows/release-hotfix-finish.yml b/.github/workflows/release-hotfix-finish.yml new file mode 100644 index 000000000..6537b6c57 --- /dev/null +++ b/.github/workflows/release-hotfix-finish.yml @@ -0,0 +1,45 @@ +name: Release hotfix finish + +on: + workflow_dispatch: + inputs: + approval: + description: 'Do you really want to finish the current HOTFIX release?' + required: true + default: 'NO' + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - name: Verify approval + run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" + + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ secrets.TRIGGER_ACTIONS_GITHUB_TOKEN }} + + - uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Configure Git user + run: | + git config user.email "ops+githubactions@retest.de" + git config user.name "retest release github action" + + - name: Tag and finish release branch + run: mvn ${MVN_ARGS} gitflow:hotfix-finish diff --git a/.github/workflows/release-hotfix-start.yml b/.github/workflows/release-hotfix-start.yml new file mode 100644 index 000000000..f4381f3cd --- /dev/null +++ b/.github/workflows/release-hotfix-start.yml @@ -0,0 +1,43 @@ +name: Release hotfix start + +on: + workflow_dispatch: + inputs: + approval: + description: 'Do you really want to start a HOTFIX release from MAIN branch?' + required: true + default: 'NO' + +env: + MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + +jobs: + default: + + runs-on: ubuntu-latest + + steps: + - name: Verify approval + run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" + + - uses: actions/checkout@v2 + + - uses: actions/setup-java@v1 + with: + java-version: 8 + + - name: Cache local Maven repository + uses: actions/cache@v2 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + - name: Configure Git user + run: | + git config user.email "ops+githubactions@retest.de" + git config user.name "retest release github action" + + + - name: Start release branch + run: mvn ${MVN_ARGS} gitflow:hotfix-start diff --git a/.mergify.yml b/.mergify.yml index f55c01861..67b911274 100644 --- a/.mergify.yml +++ b/.mergify.yml @@ -7,20 +7,32 @@ pull_request_rules: - "-draft" actions: rebase: - bot_account: rebazer - - name: "merge non-release PRs with strict rebase" + - name: "merge non-release SonarCloud-checked PRs with strict rebase" conditions: - "head~=^(?!(release|hotfix)).*$" - "#approved-reviews-by>=1" - "#changes-requested-reviews-by=0" - "-draft" + - "check-success=SonarCloud Code Analysis" + actions: + merge: + strict: true + strict_method: rebase + method: merge + + - name: "merge non-release without-SonarCloud-but-from-dependabot PRs with strict rebase" + conditions: + - "head~=^(?!(release|hotfix)).*$" + - "#approved-reviews-by>=1" + - "#changes-requested-reviews-by=0" + - "-draft" + - "author=dependabot[bot]" actions: merge: strict: true strict_method: rebase method: merge - bot_account: rebazer - name: "merge release PRs with strict merge" conditions: @@ -32,7 +44,6 @@ pull_request_rules: merge: strict: true method: merge - bot_account: rebazer - name: "delete PR branches after merge" conditions: diff --git a/pom.xml b/pom.xml index 5a5d8c0b6..b361f22b9 100644 --- a/pom.xml +++ b/pom.xml @@ -361,12 +361,23 @@ - org.apache.maven.plugins - maven-release-plugin - 3.0.0-M4 + com.amashchenko.maven.plugin + gitflow-maven-plugin + 1.16.0 - install - v@{project.version} + + main + release/v + hotfix/v + v + + true + true + true + true + 1 + ci: + true From ce378594643d75b9fbe014c40ce1a58eb75aed5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 May 2021 02:05:16 +0000 Subject: [PATCH 113/160] Bump approvaltests from 10.3.0 to 11.5.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 10.3.0 to 11.5.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/compare/10.3.0...11.5.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b361f22b9..3ca18aaca 100644 --- a/pom.xml +++ b/pom.xml @@ -251,7 +251,7 @@ com.approvaltests approvaltests - 10.3.0 + 11.5.0 test From 922b6fd79b13317736da4b02b8f262b048ef1915 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 02:06:28 +0000 Subject: [PATCH 114/160] Bump java-jwt from 3.15.0 to 3.16.0 Bumps [java-jwt](https://github.com/auth0/java-jwt) from 3.15.0 to 3.16.0. - [Release notes](https://github.com/auth0/java-jwt/releases) - [Changelog](https://github.com/auth0/java-jwt/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/java-jwt/compare/3.15.0...3.16.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3ca18aaca..a44cb670b 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.auth0 java-jwt - 3.15.0 + 3.16.0 From de33bfcd81d5840f223fd94bf0ba91b35a68d974 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 May 2021 02:06:21 +0000 Subject: [PATCH 115/160] Bump jwks-rsa from 0.17.1 to 0.18.0 Bumps [jwks-rsa](https://github.com/auth0/jwks-rsa-java) from 0.17.1 to 0.18.0. - [Release notes](https://github.com/auth0/jwks-rsa-java/releases) - [Changelog](https://github.com/auth0/jwks-rsa-java/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/jwks-rsa-java/compare/0.17.1...0.18.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a44cb670b..7260f81e0 100644 --- a/pom.xml +++ b/pom.xml @@ -136,7 +136,7 @@ com.auth0 jwks-rsa - 0.17.1 + 0.18.0 From 175be6821d48fa0e364394f27448e132c14b7bd7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 May 2021 02:05:18 +0000 Subject: [PATCH 116/160] Bump maven-gpg-plugin from 1.6 to 3.0.1 Bumps [maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 1.6 to 3.0.1. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-1.6...maven-gpg-plugin-3.0.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7260f81e0..5c3dac70f 100644 --- a/pom.xml +++ b/pom.xml @@ -475,7 +475,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 + 3.0.1 ${gpg.skip} ${env.GPG_PASSPHRASE} From 7dab74153393c62d8ac4f15b2afcaee7420f9309 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 02:06:57 +0000 Subject: [PATCH 117/160] Bump jacoco-maven-plugin from 0.8.6 to 0.8.7 Bumps [jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.6 to 0.8.7. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](https://github.com/jacoco/jacoco/compare/v0.8.6...v0.8.7) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5c3dac70f..ac672327f 100644 --- a/pom.xml +++ b/pom.xml @@ -500,7 +500,7 @@ org.jacoco jacoco-maven-plugin - 0.8.6 + 0.8.7 prepare-agent From 7ea41c78e87e8b1ab5f9ec6cb507037ca98c48c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 May 2021 02:06:51 +0000 Subject: [PATCH 118/160] Bump junit-pioneer from 1.4.0 to 1.4.1 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 1.4.0 to 1.4.1. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v1.4.0...v1.4.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ac672327f..701c39987 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ org.junit-pioneer junit-pioneer - 1.4.0 + 1.4.1 test From edf0e8d874de6cff370deb6b1e18f6afdd7fec54 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Thu, 27 May 2021 13:32:54 +0200 Subject: [PATCH 119/160] Update README --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2fa52aa0d..3afd21d87 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Build Status](https://github.com/retest/recheck/workflows/build/badge.svg)](https://github.com/retest/recheck/actions?query=workflow%3Abuild) [![Latest recheck on Maven Central](https://maven-badges.herokuapp.com/maven-central/de.retest/recheck/badge.svg?style=flat)](https://mvnrepository.com/artifact/de.retest/recheck) -[![Latest recheck releases on JitPack](https://jitpack.io/v/de.retest/recheck.svg)]( https://jitpack.io/#de.retest/recheck) -[![license](https://img.shields.io/badge/license-AGPL-brightgreen.svg)](https://github.com/retest/recheck/blob/master/LICENSE) +[![Latest recheck releases on JitPack](https://jitpack.io/v/de.retest/recheck.svg)](https://jitpack.io/#de.retest/recheck) +[![license](https://img.shields.io/badge/license-AGPL-brightgreen.svg)](https://github.com/retest/recheck/blob/main/LICENSE) [![PRs welcome](https://img.shields.io/badge/PRs-welcome-ff69b4.svg)](https://github.com/retest/recheck/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) [![code with hearth by retest](https://img.shields.io/badge/%3C%2F%3E%20with%20%E2%99%A5%20by-retest-C1D82F.svg)](https://retest.de/) @@ -30,9 +30,9 @@ However, if you want to use ***recheck***, you can add it as a dependency throug ```xml - de.retest - recheck - + de.retest + recheck + ``` From b78746b9d1e2a6d28a5b82468e69d9c7bb79b908 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Thu, 27 May 2021 13:33:57 +0200 Subject: [PATCH 120/160] Add missing changes release update --- pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 701c39987..318d6ef77 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,6 @@ de.retest recheck 1.12.0-SNAPSHOT - jar recheck Replace traditional assertions with a single check. @@ -41,6 +40,8 @@ 1.8 + github.com + retest/${project.artifactId} UTF-8 UTF-8 UTF-8 @@ -479,6 +480,11 @@ ${gpg.skip} ${env.GPG_PASSPHRASE} + + + --pinentry-mode + loopback + From fc6913fcd32b35033150a62f46dbf20574d57210 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 May 2021 11:19:57 +0000 Subject: [PATCH 121/160] Bump mockito-core from 3.9.0 to 3.10.0 Bumps [mockito-core](https://github.com/mockito/mockito) from 3.9.0 to 3.10.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v3.9.0...v3.10.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 318d6ef77..3b1cf5c5e 100644 --- a/pom.xml +++ b/pom.xml @@ -217,7 +217,7 @@ org.mockito mockito-core - 3.9.0 + 3.10.0 test From e655dcda6dd48f072fc4195249d1067218329ec4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 May 2021 11:15:29 +0000 Subject: [PATCH 122/160] Bump commons-io from 2.8.0 to 2.9.0 Bumps commons-io from 2.8.0 to 2.9.0. Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3b1cf5c5e..e2d703f90 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ commons-io commons-io - 2.8.0 + 2.9.0 From d60c2a20d20762dc61bfcce028a23941fafcfb51 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Thu, 27 May 2021 16:06:21 +0200 Subject: [PATCH 123/160] Update project details --- .gitattributes | 1 + .gitignore | 2 -- README.md | 2 +- pom.xml | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitattributes b/.gitattributes index e1fac0d37..b01d33cd7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9,3 +9,4 @@ *.xml text encoding=utf-8 eol=lf *.yaml text encoding=utf-8 eol=lf *.yml text encoding=utf-8 eol=lf +*.cmd text encoding=utf-8 eol=crlf diff --git a/.gitignore b/.gitignore index 073915178..b60eb9159 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,3 @@ # Maven. /target/ -# Artifact from signing JARs. -retest-gmbh-gpg.asc diff --git a/README.md b/README.md index 3afd21d87..ca8051f68 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # -[![Build Status](https://github.com/retest/recheck/workflows/build/badge.svg)](https://github.com/retest/recheck/actions?query=workflow%3Abuild) +[![Build Status](https://github.com/retest/recheck/actions/workflows/build-project.yml/badge.svg)](https://github.com/retest/recheck/actions/workflows/build-project.yml) [![Latest recheck on Maven Central](https://maven-badges.herokuapp.com/maven-central/de.retest/recheck/badge.svg?style=flat)](https://mvnrepository.com/artifact/de.retest/recheck) [![Latest recheck releases on JitPack](https://jitpack.io/v/de.retest/recheck.svg)](https://jitpack.io/#de.retest/recheck) [![license](https://img.shields.io/badge/license-AGPL-brightgreen.svg)](https://github.com/retest/recheck/blob/main/LICENSE) diff --git a/pom.xml b/pom.xml index e2d703f90..ea35b9de1 100644 --- a/pom.xml +++ b/pom.xml @@ -377,7 +377,7 @@ true true 1 - ci: + ci: true From 3c6dac8dbb41b039954c80891b3fc5dd47b97aae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 May 2021 11:11:30 +0000 Subject: [PATCH 124/160] Bump maven-javadoc-plugin from 3.2.0 to 3.3.0 Bumps [maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.2.0...maven-javadoc-plugin-3.3.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea35b9de1..6cbf26ec9 100644 --- a/pom.xml +++ b/pom.xml @@ -399,7 +399,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 + 3.3.0 bundle-javadoc From a0f940e815c5dbfc87852b32466b1bf6972a52c4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 May 2021 11:09:35 +0000 Subject: [PATCH 125/160] Bump junit-jupiter from 5.7.1 to 5.7.2 Bumps [junit-jupiter](https://github.com/junit-team/junit5) from 5.7.1 to 5.7.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.7.1...r5.7.2) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6cbf26ec9..dd92d5d7c 100644 --- a/pom.xml +++ b/pom.xml @@ -196,7 +196,7 @@ org.junit.jupiter junit-jupiter - 5.7.1 + 5.7.2 test From ace9a6c85194a400495e6cc54fb9e50969ef1fbe Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 28 May 2021 13:37:40 +0200 Subject: [PATCH 126/160] Fix wrong actor selction in github action --- .github/workflows/build-project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-project.yml b/.github/workflows/build-project.yml index 4ca0df3b8..bcdae2e9e 100644 --- a/.github/workflows/build-project.yml +++ b/.github/workflows/build-project.yml @@ -43,7 +43,7 @@ jobs: - name: Test with SonarCloud id: test-with-sonar - if: ${{ github.actor == 'dependabot' }} + if: ${{ github.actor != 'dependabot[bot]' }} run: > mvn ${MVN_ARGS} verify sonar:sonar -Pcoverage -Dsonar.host.url=https://sonarcloud.io From ad6923fdf3398a445f9c45936c6f85e62cc2a5bb Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 18:09:48 +0100 Subject: [PATCH 127/160] Update to eclipse moxy 3.0.0 --- pom.xml | 19 ++++++++----------- .../recheck/persistence/DateAdapter.java | 4 ++-- ...denMasterSourceSuppressDefaultAdapter.java | 3 +-- .../persistence/StringInternerAdapter.java | 4 ++-- .../xml/ReTestXmlDataContainer.java | 7 +++---- .../persistence/xml/XmlPersistenceUtil.java | 3 +-- .../persistence/xml/XmlTransformer.java | 11 +++++------ .../xml/XmlTransformerConfiguration.java | 3 +-- .../util/LazyScreenshotZipPersistence.java | 5 ++--- .../xml/util/ScreenshotFolderPersistence.java | 5 ++--- .../recheck/persistence/xml/util/XmlUtil.java | 3 +-- .../recheck/report/ActionReplayResult.java | 13 ++++++------- .../recheck/report/SuiteReplayResult.java | 11 +++++------ .../recheck/report/TestReplayResult.java | 11 +++++------ .../de/retest/recheck/report/TestReport.java | 15 +++++++-------- .../retest/recheck/suite/CapturedSuite.java | 9 ++++----- .../retest/recheck/suite/ExecutableSuite.java | 11 +++++------ .../java/de/retest/recheck/test/Test.java | 9 ++++----- src/main/java/de/retest/recheck/ui/Path.java | 8 ++++---- .../de/retest/recheck/ui/PathElement.java | 9 ++++----- .../recheck/ui/actions/AbstractAction.java | 9 ++++----- .../de/retest/recheck/ui/actions/Action.java | 3 +-- .../recheck/ui/actions/ActionParameter.java | 5 ++--- .../recheck/ui/actions/ActionSequence.java | 11 +++++------ .../recheck/ui/actions/ActionState.java | 11 +++++------ .../ui/actions/ActionStateSequence.java | 9 ++++----- .../recheck/ui/actions/ExceptionWrapper.java | 13 ++++++------- .../ui/actions/ParameterizedAction.java | 5 ++--- .../ui/actions/TargetNotFoundWrapper.java | 13 ++++++------- .../AdditionalAttributeDifference.java | 7 +++---- .../recheck/ui/descriptors/Attribute.java | 4 ++-- .../recheck/ui/descriptors/Attributes.java | 9 ++++----- .../ui/descriptors/AttributesAdapter.java | 6 +++--- .../ui/descriptors/CodeLocAttribute.java | 2 +- .../ui/descriptors/ContextAttribute.java | 2 +- .../ui/descriptors/DefaultAttribute.java | 2 +- .../recheck/ui/descriptors/Element.java | 15 +++++++-------- .../recheck/ui/descriptors/GroundState.java | 11 +++++------ .../ui/descriptors/IdentifyingAttributes.java | 11 +++++------ .../IdentifyingAttributesAdapter.java | 2 +- .../ui/descriptors/OutlineAttribute.java | 4 ++-- .../descriptors/ParameterizedAttribute.java | 6 +++--- .../recheck/ui/descriptors/PathAttribute.java | 5 ++--- .../RenderContainedElementsAdapter.java | 2 +- .../recheck/ui/descriptors/RootElement.java | 9 ++++----- .../ScreenshotAttributeDifference.java | 9 ++++----- .../descriptors/StateAttributesAdapter.java | 2 +- .../ui/descriptors/StringAttribute.java | 5 ++--- .../ui/descriptors/SuffixAttribute.java | 2 +- .../recheck/ui/descriptors/SutState.java | 9 ++++----- .../recheck/ui/descriptors/TextAttribute.java | 3 +-- .../ui/descriptors/WeightedTextAttribute.java | 2 +- .../recheck/ui/diff/AttributeDifference.java | 11 +++++------ .../recheck/ui/diff/AttributesDifference.java | 12 ++++++------ .../recheck/ui/diff/ElementDifference.java | 3 +-- .../ui/diff/ElementIdentificationWarning.java | 3 +-- .../diff/IdentifyingAttributesDifference.java | 11 +++++------ .../InsertedDeletedElementDifference.java | 9 ++++----- .../recheck/ui/diff/StateDifference.java | 11 +++++------ .../retest/recheck/ui/image/Screenshot.java | 11 +++++------ .../ScreenshotTransformerTestJaxbClass.java | 8 ++++---- .../AttributeImplPersistenceTest.java | 4 ++-- .../ui/diff/ElementDifferenceAdapter.java | 2 +- .../de/retest/recheck/util/ApprovalsUtil.java | 6 +++--- 64 files changed, 208 insertions(+), 254 deletions(-) diff --git a/pom.xml b/pom.xml index dd92d5d7c..9e8fa1ec6 100644 --- a/pom.xml +++ b/pom.xml @@ -155,22 +155,19 @@ org.eclipse.persistence org.eclipse.persistence.moxy - - ${eclipse.persistence.version} + 3.0.0 - + - org.eclipse.persistence - org.eclipse.persistence.core - ${eclipse.persistence.version} + com.sun.activation + jakarta.activation + 2.0.0 - - - javax.mail - javax.mail-api - 1.6.2 + com.sun.mail + jakarta.mail + 2.0.0 diff --git a/src/main/java/de/retest/recheck/persistence/DateAdapter.java b/src/main/java/de/retest/recheck/persistence/DateAdapter.java index b6799020d..93ec99460 100644 --- a/src/main/java/de/retest/recheck/persistence/DateAdapter.java +++ b/src/main/java/de/retest/recheck/persistence/DateAdapter.java @@ -4,10 +4,10 @@ import java.util.Date; import java.util.TimeZone; -import javax.xml.bind.annotation.adapters.XmlAdapter; - import org.apache.commons.lang3.time.FastDateFormat; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; + public class DateAdapter extends XmlAdapter { private static final FastDateFormat defaultDateFormat = diff --git a/src/main/java/de/retest/recheck/persistence/GoldenMasterSourceSuppressDefaultAdapter.java b/src/main/java/de/retest/recheck/persistence/GoldenMasterSourceSuppressDefaultAdapter.java index 551375c12..3ee0ba347 100644 --- a/src/main/java/de/retest/recheck/persistence/GoldenMasterSourceSuppressDefaultAdapter.java +++ b/src/main/java/de/retest/recheck/persistence/GoldenMasterSourceSuppressDefaultAdapter.java @@ -1,8 +1,7 @@ package de.retest.recheck.persistence; -import javax.xml.bind.annotation.adapters.XmlAdapter; - import de.retest.recheck.ui.review.GoldenMasterSource; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class GoldenMasterSourceSuppressDefaultAdapter extends XmlAdapter { diff --git a/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java b/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java index be28c601f..fbcf918da 100644 --- a/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java +++ b/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java @@ -1,7 +1,7 @@ package de.retest.recheck.persistence; -import javax.xml.bind.DatatypeConverter; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.DatatypeConverter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; // Using code from https://jaxb.java.net/tutorial/section_5_5-Interning-Strings.html public class StringInternerAdapter extends XmlAdapter { diff --git a/src/main/java/de/retest/recheck/persistence/xml/ReTestXmlDataContainer.java b/src/main/java/de/retest/recheck/persistence/xml/ReTestXmlDataContainer.java index 79b023f09..0f55e93bf 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/ReTestXmlDataContainer.java +++ b/src/main/java/de/retest/recheck/persistence/xml/ReTestXmlDataContainer.java @@ -2,12 +2,11 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.persistence.Persistable; import de.retest.recheck.util.VersionProvider; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class ReTestXmlDataContainer implements Serializable { diff --git a/src/main/java/de/retest/recheck/persistence/xml/XmlPersistenceUtil.java b/src/main/java/de/retest/recheck/persistence/xml/XmlPersistenceUtil.java index c3144afb9..19964bf71 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/XmlPersistenceUtil.java +++ b/src/main/java/de/retest/recheck/persistence/xml/XmlPersistenceUtil.java @@ -2,12 +2,11 @@ import java.io.IOException; -import javax.xml.bind.Unmarshaller.Listener; - import de.retest.recheck.persistence.Persistable; import de.retest.recheck.persistence.migration.XmlMigrator; import de.retest.recheck.persistence.xml.util.XmlVersionCheckResult; import de.retest.recheck.util.NamedBufferedInputStream; +import jakarta.xml.bind.Unmarshaller.Listener; public class XmlPersistenceUtil { diff --git a/src/main/java/de/retest/recheck/persistence/xml/XmlTransformer.java b/src/main/java/de/retest/recheck/persistence/xml/XmlTransformer.java index 62e6cfef7..bae64eb4f 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/XmlTransformer.java +++ b/src/main/java/de/retest/recheck/persistence/xml/XmlTransformer.java @@ -8,12 +8,6 @@ import java.util.HashSet; import java.util.Set; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.helpers.DefaultValidationEventHandler; - import org.eclipse.persistence.internal.oxm.record.namespaces.MapNamespacePrefixMapper; import org.eclipse.persistence.jaxb.JAXBContextFactory; import org.eclipse.persistence.jaxb.MarshallerProperties; @@ -24,6 +18,11 @@ import de.retest.recheck.persistence.xml.util.SessionLogDelegate; import de.retest.recheck.persistence.xml.util.StdXmlClassesProvider; import de.retest.recheck.persistence.xml.util.XmlUtil; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.helpers.DefaultValidationEventHandler; import lombok.extern.slf4j.Slf4j; @Slf4j diff --git a/src/main/java/de/retest/recheck/persistence/xml/XmlTransformerConfiguration.java b/src/main/java/de/retest/recheck/persistence/xml/XmlTransformerConfiguration.java index 0d541c3ea..a09b851e4 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/XmlTransformerConfiguration.java +++ b/src/main/java/de/retest/recheck/persistence/xml/XmlTransformerConfiguration.java @@ -1,8 +1,7 @@ package de.retest.recheck.persistence.xml; -import javax.xml.bind.Marshaller; - import de.retest.recheck.persistence.xml.util.XmlUtil; +import jakarta.xml.bind.Marshaller; import lombok.Builder; import lombok.Data; diff --git a/src/main/java/de/retest/recheck/persistence/xml/util/LazyScreenshotZipPersistence.java b/src/main/java/de/retest/recheck/persistence/xml/util/LazyScreenshotZipPersistence.java index 9cad5ca03..5b21c9379 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/util/LazyScreenshotZipPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/xml/util/LazyScreenshotZipPersistence.java @@ -13,9 +13,6 @@ import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; - import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +22,8 @@ import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.util.ReflectionUtilities; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; public class LazyScreenshotZipPersistence { diff --git a/src/main/java/de/retest/recheck/persistence/xml/util/ScreenshotFolderPersistence.java b/src/main/java/de/retest/recheck/persistence/xml/util/ScreenshotFolderPersistence.java index c45f79be6..f8d47b480 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/util/ScreenshotFolderPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/xml/util/ScreenshotFolderPersistence.java @@ -10,9 +10,6 @@ import java.util.HashMap; import java.util.Map; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; - import org.apache.commons.io.IOUtils; import de.retest.recheck.ui.image.Screenshot; @@ -20,6 +17,8 @@ import de.retest.recheck.util.FileUtil.Writer; import de.retest.recheck.util.NamedBufferedInputStream; import de.retest.recheck.util.ReflectionUtilities; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; public class ScreenshotFolderPersistence { diff --git a/src/main/java/de/retest/recheck/persistence/xml/util/XmlUtil.java b/src/main/java/de/retest/recheck/persistence/xml/util/XmlUtil.java index f81510c26..c1ce5ba3a 100644 --- a/src/main/java/de/retest/recheck/persistence/xml/util/XmlUtil.java +++ b/src/main/java/de/retest/recheck/persistence/xml/util/XmlUtil.java @@ -1,10 +1,9 @@ package de.retest.recheck.persistence.xml.util; -import javax.xml.bind.Marshaller; - import de.retest.recheck.ui.descriptors.IdentifyingAttributesAdapter; import de.retest.recheck.ui.descriptors.RenderContainedElementsAdapter; import de.retest.recheck.ui.descriptors.StateAttributesAdapter; +import jakarta.xml.bind.Marshaller; public class XmlUtil { diff --git a/src/main/java/de/retest/recheck/report/ActionReplayResult.java b/src/main/java/de/retest/recheck/report/ActionReplayResult.java index 28d0d3b26..47b5b04ba 100644 --- a/src/main/java/de/retest/recheck/report/ActionReplayResult.java +++ b/src/main/java/de/retest/recheck/report/ActionReplayResult.java @@ -6,13 +6,6 @@ import java.util.List; import java.util.Set; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.report.action.ActionReplayData; import de.retest.recheck.report.action.DifferenceRetriever; import de.retest.recheck.report.action.WindowRetriever; @@ -28,6 +21,12 @@ import de.retest.recheck.ui.diff.StateDifference; import de.retest.recheck.ui.diff.meta.MetadataDifference; import de.retest.recheck.ui.image.Screenshot; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Getter; /** diff --git a/src/main/java/de/retest/recheck/report/SuiteReplayResult.java b/src/main/java/de/retest/recheck/report/SuiteReplayResult.java index 7e8789c03..5336aefac 100644 --- a/src/main/java/de/retest/recheck/report/SuiteReplayResult.java +++ b/src/main/java/de/retest/recheck/report/SuiteReplayResult.java @@ -10,13 +10,12 @@ import java.util.List; import java.util.Optional; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.descriptors.GroundState; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement( name = "suite" ) @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/report/TestReplayResult.java b/src/main/java/de/retest/recheck/report/TestReplayResult.java index 0157a0d35..c4983ae70 100644 --- a/src/main/java/de/retest/recheck/report/TestReplayResult.java +++ b/src/main/java/de/retest/recheck/report/TestReplayResult.java @@ -9,14 +9,13 @@ import java.util.List; import java.util.Set; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.NoGoldenMasterActionReplayResult; import de.retest.recheck.ui.diff.LeafDifference; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement( name = "test" ) @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/report/TestReport.java b/src/main/java/de/retest/recheck/report/TestReport.java index 04b6153a6..0a04500cb 100644 --- a/src/main/java/de/retest/recheck/report/TestReport.java +++ b/src/main/java/de/retest/recheck/report/TestReport.java @@ -6,18 +6,17 @@ import java.util.List; import java.util.Set; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - import de.retest.recheck.ignore.GloballyIgnoredAttributes; import de.retest.recheck.persistence.GoldenMasterSourceSuppressDefaultAdapter; import de.retest.recheck.persistence.Persistable; import de.retest.recheck.ui.review.GoldenMasterSource; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement( name = "testreport" ) @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/suite/CapturedSuite.java b/src/main/java/de/retest/recheck/suite/CapturedSuite.java index 346ea55ed..2daa1c137 100644 --- a/src/main/java/de/retest/recheck/suite/CapturedSuite.java +++ b/src/main/java/de/retest/recheck/suite/CapturedSuite.java @@ -2,12 +2,11 @@ import java.util.ArrayList; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.persistence.Persistable; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/suite/ExecutableSuite.java b/src/main/java/de/retest/recheck/suite/ExecutableSuite.java index 864875d68..8adcac0dd 100644 --- a/src/main/java/de/retest/recheck/suite/ExecutableSuite.java +++ b/src/main/java/de/retest/recheck/suite/ExecutableSuite.java @@ -4,12 +4,6 @@ import java.util.List; import java.util.UUID; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import com.google.common.base.Objects; import de.retest.recheck.persistence.Persistable; @@ -17,6 +11,11 @@ import de.retest.recheck.ui.descriptors.GroundState; import de.retest.recheck.ui.review.SuiteChangeSet; import de.retest.recheck.ui.review.TestChangeSet; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/test/Test.java b/src/main/java/de/retest/recheck/test/Test.java index 70bcd8d9e..eb572e940 100644 --- a/src/main/java/de/retest/recheck/test/Test.java +++ b/src/main/java/de/retest/recheck/test/Test.java @@ -4,12 +4,11 @@ import java.util.Collections; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.persistence.Persistable; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/Path.java b/src/main/java/de/retest/recheck/ui/Path.java index 85bdedd32..e5e2955e2 100644 --- a/src/main/java/de/retest/recheck/ui/Path.java +++ b/src/main/java/de/retest/recheck/ui/Path.java @@ -4,10 +4,10 @@ import java.util.HashMap; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlTransient; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlTransient; @XmlAccessorType( XmlAccessType.FIELD ) public class Path implements Serializable { diff --git a/src/main/java/de/retest/recheck/ui/PathElement.java b/src/main/java/de/retest/recheck/ui/PathElement.java index 138c76248..d8e1739d0 100644 --- a/src/main/java/de/retest/recheck/ui/PathElement.java +++ b/src/main/java/de/retest/recheck/ui/PathElement.java @@ -2,12 +2,11 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - import de.retest.recheck.persistence.StringInternerAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlAccessorType( XmlAccessType.FIELD ) public class PathElement implements Serializable { diff --git a/src/main/java/de/retest/recheck/ui/actions/AbstractAction.java b/src/main/java/de/retest/recheck/ui/actions/AbstractAction.java index b93e0a508..6d342b72b 100644 --- a/src/main/java/de/retest/recheck/ui/actions/AbstractAction.java +++ b/src/main/java/de/retest/recheck/ui/actions/AbstractAction.java @@ -2,11 +2,6 @@ import java.util.UUID; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; - import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -15,6 +10,10 @@ import de.retest.recheck.ui.descriptors.Element; import de.retest.recheck.ui.descriptors.IdentifyingAttributes; import de.retest.recheck.ui.image.Screenshot; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; @XmlAccessorType( XmlAccessType.FIELD ) public abstract class AbstractAction implements Action { diff --git a/src/main/java/de/retest/recheck/ui/actions/Action.java b/src/main/java/de/retest/recheck/ui/actions/Action.java index 85db361db..731ad02ee 100644 --- a/src/main/java/de/retest/recheck/ui/actions/Action.java +++ b/src/main/java/de/retest/recheck/ui/actions/Action.java @@ -2,13 +2,12 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlTransient; - import de.retest.recheck.ui.Environment; import de.retest.recheck.ui.components.Component; import de.retest.recheck.ui.descriptors.Element; import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.ui.review.ActionChangeSet; +import jakarta.xml.bind.annotation.XmlTransient; public interface Action extends Serializable, Comparable { diff --git a/src/main/java/de/retest/recheck/ui/actions/ActionParameter.java b/src/main/java/de/retest/recheck/ui/actions/ActionParameter.java index ed71fae08..24a8ecdbd 100644 --- a/src/main/java/de/retest/recheck/ui/actions/ActionParameter.java +++ b/src/main/java/de/retest/recheck/ui/actions/ActionParameter.java @@ -3,10 +3,9 @@ import java.io.Serializable; import java.util.Objects; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.descriptors.ParameterType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class ActionParameter implements Serializable { diff --git a/src/main/java/de/retest/recheck/ui/actions/ActionSequence.java b/src/main/java/de/retest/recheck/ui/actions/ActionSequence.java index 898e02f87..41f04b940 100644 --- a/src/main/java/de/retest/recheck/ui/actions/ActionSequence.java +++ b/src/main/java/de/retest/recheck/ui/actions/ActionSequence.java @@ -5,14 +5,13 @@ import java.util.EventObject; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.persistence.Persistable; import de.retest.recheck.ui.descriptors.GroundState; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAnyElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/actions/ActionState.java b/src/main/java/de/retest/recheck/ui/actions/ActionState.java index 0d18bbb8f..34d07fc0b 100644 --- a/src/main/java/de/retest/recheck/ui/actions/ActionState.java +++ b/src/main/java/de/retest/recheck/ui/actions/ActionState.java @@ -2,14 +2,13 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.descriptors.SutState; import de.retest.recheck.ui.review.ActionChangeSet; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAnyElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/actions/ActionStateSequence.java b/src/main/java/de/retest/recheck/ui/actions/ActionStateSequence.java index 33ba04669..af907f964 100644 --- a/src/main/java/de/retest/recheck/ui/actions/ActionStateSequence.java +++ b/src/main/java/de/retest/recheck/ui/actions/ActionStateSequence.java @@ -4,14 +4,13 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.descriptors.SutState; import de.retest.recheck.ui.review.ActionChangeSet; import de.retest.recheck.ui.review.TestChangeSet; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/actions/ExceptionWrapper.java b/src/main/java/de/retest/recheck/ui/actions/ExceptionWrapper.java index 15d49e18f..b5435af9d 100644 --- a/src/main/java/de/retest/recheck/ui/actions/ExceptionWrapper.java +++ b/src/main/java/de/retest/recheck/ui/actions/ExceptionWrapper.java @@ -2,15 +2,14 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - import de.retest.recheck.util.ChecksumCalculator; import de.retest.recheck.util.ExceptionUtil; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/actions/ParameterizedAction.java b/src/main/java/de/retest/recheck/ui/actions/ParameterizedAction.java index 4821e2064..d3a8c15bc 100644 --- a/src/main/java/de/retest/recheck/ui/actions/ParameterizedAction.java +++ b/src/main/java/de/retest/recheck/ui/actions/ParameterizedAction.java @@ -13,9 +13,6 @@ import java.util.function.Function; import java.util.stream.Collectors; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,6 +22,8 @@ import de.retest.recheck.ui.descriptors.ParameterType; import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.ui.review.ActionChangeSet; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class ParameterizedAction extends AbstractAction { diff --git a/src/main/java/de/retest/recheck/ui/actions/TargetNotFoundWrapper.java b/src/main/java/de/retest/recheck/ui/actions/TargetNotFoundWrapper.java index f9dcb90bb..1161689d5 100644 --- a/src/main/java/de/retest/recheck/ui/actions/TargetNotFoundWrapper.java +++ b/src/main/java/de/retest/recheck/ui/actions/TargetNotFoundWrapper.java @@ -2,15 +2,14 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - import de.retest.recheck.ui.descriptors.Element; import de.retest.recheck.ui.image.Screenshot; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAnyElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/AdditionalAttributeDifference.java b/src/main/java/de/retest/recheck/ui/descriptors/AdditionalAttributeDifference.java index a0c4c8072..0d7968e14 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/AdditionalAttributeDifference.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/AdditionalAttributeDifference.java @@ -1,10 +1,9 @@ package de.retest.recheck.ui.descriptors; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.diff.AttributeDifference; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/Attribute.java b/src/main/java/de/retest/recheck/ui/descriptors/Attribute.java index 887fb076d..f2346ca7e 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/Attribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/Attribute.java @@ -2,8 +2,8 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public abstract class Attribute implements Serializable, Comparable { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/Attributes.java b/src/main/java/de/retest/recheck/ui/descriptors/Attributes.java index 3542e9df3..d1518977c 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/Attributes.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/Attributes.java @@ -10,13 +10,12 @@ import java.util.TreeMap; import java.util.TreeSet; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.diff.AttributeDifference; import de.retest.recheck.ui.image.Screenshot; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/AttributesAdapter.java b/src/main/java/de/retest/recheck/ui/descriptors/AttributesAdapter.java index 37150cbd7..84793d773 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/AttributesAdapter.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/AttributesAdapter.java @@ -6,9 +6,9 @@ import java.util.SortedMap; import java.util.TreeMap; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class AttributesAdapter extends XmlAdapter> { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/CodeLocAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/CodeLocAttribute.java index bf8bfec9c..37f9d5c6a 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/CodeLocAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/CodeLocAttribute.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class CodeLocAttribute extends TextAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/ContextAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/ContextAttribute.java index 780f9e745..2e3566f48 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/ContextAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/ContextAttribute.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class ContextAttribute extends StringAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/DefaultAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/DefaultAttribute.java index 6bc43029c..03657ee41 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/DefaultAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/DefaultAttribute.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElement; public class DefaultAttribute extends ParameterizedAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/Element.java b/src/main/java/de/retest/recheck/ui/descriptors/Element.java index e26340dc1..3c1790717 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/Element.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/Element.java @@ -10,14 +10,6 @@ import java.util.Objects; import java.util.Set; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - import org.apache.commons.lang3.ObjectUtils; import org.eclipse.persistence.oxm.annotations.XmlInverseReference; @@ -26,6 +18,13 @@ import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.ui.review.ActionChangeSet; import de.retest.recheck.util.RetestIdUtil; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/GroundState.java b/src/main/java/de/retest/recheck/ui/descriptors/GroundState.java index e47f5e31e..24420db30 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/GroundState.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/GroundState.java @@ -5,13 +5,12 @@ import java.text.SimpleDateFormat; import java.util.Date; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - import de.retest.recheck.persistence.DateAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; /** * GroundState contains all information that make individual runs of an application differ (such as execution date, diff --git a/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributes.java b/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributes.java index 6c7c13fa1..4efb198c3 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributes.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributes.java @@ -15,17 +15,16 @@ import java.util.TreeMap; import java.util.stream.Collectors; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - import de.retest.recheck.ignore.GloballyIgnoredAttributes; import de.retest.recheck.ui.Path; import de.retest.recheck.ui.PathElement; import de.retest.recheck.ui.diff.AttributeDifference; import de.retest.recheck.util.ChecksumCalculator; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.EqualsAndHashCode; @EqualsAndHashCode diff --git a/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributesAdapter.java b/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributesAdapter.java index 1ade8aba1..54edce8d5 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributesAdapter.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/IdentifyingAttributesAdapter.java @@ -1,6 +1,6 @@ package de.retest.recheck.ui.descriptors; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class IdentifyingAttributesAdapter extends XmlAdapter { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/OutlineAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/OutlineAttribute.java index a3a1fdc4a..7da6f575d 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/OutlineAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/OutlineAttribute.java @@ -5,8 +5,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class OutlineAttribute extends Attribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/ParameterizedAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/ParameterizedAttribute.java index 155b5b4bb..96e372514 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/ParameterizedAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/ParameterizedAttribute.java @@ -1,10 +1,10 @@ package de.retest.recheck.ui.descriptors; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - import org.apache.commons.lang3.StringUtils; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; + @XmlRootElement public abstract class ParameterizedAttribute extends Attribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java index 1b0cef21f..26aa0129f 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java @@ -4,11 +4,10 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlValue; - import de.retest.recheck.ui.Path; import de.retest.recheck.util.StringSimilarity; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlValue; @XmlRootElement public class PathAttribute extends ParameterizedAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/RenderContainedElementsAdapter.java b/src/main/java/de/retest/recheck/ui/descriptors/RenderContainedElementsAdapter.java index 79fbbe2fc..a71779f79 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/RenderContainedElementsAdapter.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/RenderContainedElementsAdapter.java @@ -3,7 +3,7 @@ import java.util.HashMap; import java.util.Map; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class RenderContainedElementsAdapter extends XmlAdapter { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/RootElement.java b/src/main/java/de/retest/recheck/ui/descriptors/RootElement.java index 841b5d9df..14d6c301c 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/RootElement.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/RootElement.java @@ -3,13 +3,12 @@ import java.util.ArrayList; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.ui.review.ActionChangeSet; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/ScreenshotAttributeDifference.java b/src/main/java/de/retest/recheck/ui/descriptors/ScreenshotAttributeDifference.java index 3c1d501f3..a42bad5b6 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/ScreenshotAttributeDifference.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/ScreenshotAttributeDifference.java @@ -5,13 +5,12 @@ import java.util.Locale; import java.util.Objects; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.diff.AttributeDifference; import de.retest.recheck.ui.image.Screenshot; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/StateAttributesAdapter.java b/src/main/java/de/retest/recheck/ui/descriptors/StateAttributesAdapter.java index 5c8ce84ed..6cdcc9a2b 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/StateAttributesAdapter.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/StateAttributesAdapter.java @@ -1,6 +1,6 @@ package de.retest.recheck.ui.descriptors; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class StateAttributesAdapter extends XmlAdapter { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java index 3c32a9560..d8417ac6a 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java @@ -2,12 +2,11 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlValue; - import org.apache.commons.lang3.StringUtils; import de.retest.recheck.util.StringSimilarity; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlValue; @XmlRootElement public class StringAttribute extends ParameterizedAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/SuffixAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/SuffixAttribute.java index 52f9250d8..f05289794 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/SuffixAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/SuffixAttribute.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class SuffixAttribute extends StringAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/SutState.java b/src/main/java/de/retest/recheck/ui/descriptors/SutState.java index 1a2a8934a..700385b1c 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/SutState.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/SutState.java @@ -7,14 +7,13 @@ import java.util.List; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.meta.MetadataProvider; import de.retest.recheck.persistence.Persistable; import de.retest.recheck.ui.review.ActionChangeSet; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/TextAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/TextAttribute.java index dc844e882..f2aa15ad9 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/TextAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/TextAttribute.java @@ -2,9 +2,8 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.util.StringSimilarity; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class TextAttribute extends StringAttribute { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/WeightedTextAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/WeightedTextAttribute.java index 431bbde5c..165b15c56 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/WeightedTextAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/WeightedTextAttribute.java @@ -2,7 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public final class WeightedTextAttribute extends TextAttribute { diff --git a/src/main/java/de/retest/recheck/ui/diff/AttributeDifference.java b/src/main/java/de/retest/recheck/ui/diff/AttributeDifference.java index e0fdeaab3..4ebf80d62 100644 --- a/src/main/java/de/retest/recheck/ui/diff/AttributeDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/AttributeDifference.java @@ -12,17 +12,16 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import de.retest.recheck.ui.descriptors.Attribute; import de.retest.recheck.util.ChecksumCalculator; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.EqualsAndHashCode; @EqualsAndHashCode diff --git a/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java b/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java index 1ccf26835..e2862ab74 100644 --- a/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java @@ -3,14 +3,14 @@ import java.util.Collections; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import com.google.common.base.Joiner; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; + @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) public class AttributesDifference implements Difference { diff --git a/src/main/java/de/retest/recheck/ui/diff/ElementDifference.java b/src/main/java/de/retest/recheck/ui/diff/ElementDifference.java index e22d8d60d..d73d14976 100644 --- a/src/main/java/de/retest/recheck/ui/diff/ElementDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/ElementDifference.java @@ -12,8 +12,6 @@ import java.util.Objects; import java.util.stream.Collectors; -import javax.xml.bind.Marshaller; - import de.retest.recheck.persistence.xml.XmlTransformer; import de.retest.recheck.ui.descriptors.AttributeUtil; import de.retest.recheck.ui.descriptors.Element; @@ -21,6 +19,7 @@ import de.retest.recheck.ui.image.ImageUtils; import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.util.ChecksumCalculator; +import jakarta.xml.bind.Marshaller; public class ElementDifference implements Difference, Comparable { diff --git a/src/main/java/de/retest/recheck/ui/diff/ElementIdentificationWarning.java b/src/main/java/de/retest/recheck/ui/diff/ElementIdentificationWarning.java index aed43ecdc..a96efee46 100644 --- a/src/main/java/de/retest/recheck/ui/diff/ElementIdentificationWarning.java +++ b/src/main/java/de/retest/recheck/ui/diff/ElementIdentificationWarning.java @@ -2,8 +2,7 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAttribute; - +import jakarta.xml.bind.annotation.XmlAttribute; import lombok.Data; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/de/retest/recheck/ui/diff/IdentifyingAttributesDifference.java b/src/main/java/de/retest/recheck/ui/diff/IdentifyingAttributesDifference.java index 9ce0f4c4a..aee79a72f 100644 --- a/src/main/java/de/retest/recheck/ui/diff/IdentifyingAttributesDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/IdentifyingAttributesDifference.java @@ -5,14 +5,13 @@ import java.util.List; import java.util.stream.Collectors; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.descriptors.Attribute; import de.retest.recheck.ui.descriptors.IdentifyingAttributes; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.EqualsAndHashCode; @XmlRootElement diff --git a/src/main/java/de/retest/recheck/ui/diff/InsertedDeletedElementDifference.java b/src/main/java/de/retest/recheck/ui/diff/InsertedDeletedElementDifference.java index 476b0f553..606d68125 100644 --- a/src/main/java/de/retest/recheck/ui/diff/InsertedDeletedElementDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/InsertedDeletedElementDifference.java @@ -3,14 +3,13 @@ import java.util.Collections; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.descriptors.Element; import de.retest.recheck.ui.descriptors.IdentifyingAttributes; import de.retest.recheck.ui.image.Screenshot; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/diff/StateDifference.java b/src/main/java/de/retest/recheck/ui/diff/StateDifference.java index 3404fd516..ef448762d 100644 --- a/src/main/java/de/retest/recheck/ui/diff/StateDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/StateDifference.java @@ -5,14 +5,13 @@ import java.util.List; import java.util.stream.Collectors; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAnyElement; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; - import de.retest.recheck.ui.image.Screenshot; import de.retest.recheck.util.ChecksumCalculator; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAnyElement; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD ) diff --git a/src/main/java/de/retest/recheck/ui/image/Screenshot.java b/src/main/java/de/retest/recheck/ui/image/Screenshot.java index 0ca3a8cf2..a6d5f3807 100644 --- a/src/main/java/de/retest/recheck/ui/image/Screenshot.java +++ b/src/main/java/de/retest/recheck/ui/image/Screenshot.java @@ -2,13 +2,12 @@ import java.io.Serializable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - import de.retest.recheck.util.ChecksumCalculator; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; /** * We use this class that simply wraps a byte array instead of the Java internal format diff --git a/src/test/java/de/retest/recheck/persistence/xml/util/ScreenshotTransformerTestJaxbClass.java b/src/test/java/de/retest/recheck/persistence/xml/util/ScreenshotTransformerTestJaxbClass.java index c2f2c2263..436ad6c38 100644 --- a/src/test/java/de/retest/recheck/persistence/xml/util/ScreenshotTransformerTestJaxbClass.java +++ b/src/test/java/de/retest/recheck/persistence/xml/util/ScreenshotTransformerTestJaxbClass.java @@ -1,9 +1,9 @@ package de.retest.recheck.persistence.xml.util; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import de.retest.recheck.persistence.Persistable; import de.retest.recheck.ui.image.Screenshot; diff --git a/src/test/java/de/retest/recheck/ui/descriptors/AttributeImplPersistenceTest.java b/src/test/java/de/retest/recheck/ui/descriptors/AttributeImplPersistenceTest.java index 8a171778a..546b30fc3 100644 --- a/src/test/java/de/retest/recheck/ui/descriptors/AttributeImplPersistenceTest.java +++ b/src/test/java/de/retest/recheck/ui/descriptors/AttributeImplPersistenceTest.java @@ -5,8 +5,8 @@ import java.awt.Rectangle; import java.io.ByteArrayInputStream; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.experimental.theories.DataPoints; import org.junit.experimental.theories.Theories; diff --git a/src/test/java/de/retest/recheck/ui/diff/ElementDifferenceAdapter.java b/src/test/java/de/retest/recheck/ui/diff/ElementDifferenceAdapter.java index 4f566dd4e..2528972b0 100644 --- a/src/test/java/de/retest/recheck/ui/diff/ElementDifferenceAdapter.java +++ b/src/test/java/de/retest/recheck/ui/diff/ElementDifferenceAdapter.java @@ -2,7 +2,7 @@ import static de.retest.recheck.ui.diff.ElementDifference.getCopyWithFlattenedChildDifferenceHierarchy; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import de.retest.recheck.ui.diff.ElementDifference; diff --git a/src/test/java/de/retest/recheck/util/ApprovalsUtil.java b/src/test/java/de/retest/recheck/util/ApprovalsUtil.java index 8d086b68d..47b1ee9e6 100644 --- a/src/test/java/de/retest/recheck/util/ApprovalsUtil.java +++ b/src/test/java/de/retest/recheck/util/ApprovalsUtil.java @@ -13,9 +13,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.SchemaOutputResolver; import javax.xml.transform.Result; import javax.xml.transform.stream.StreamResult; @@ -33,6 +30,9 @@ import com.spun.util.tests.TestUtils; import de.retest.recheck.TestCaseFinder; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.SchemaOutputResolver; import lombok.RequiredArgsConstructor; public class ApprovalsUtil { From d0d4ac3704ac835178093f8ad64a351183651237 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Thu, 7 Mar 2019 14:47:41 +0100 Subject: [PATCH 128/160] Remove unused StringInternerAdapter # Conflicts: # src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java --- .../persistence/StringInternerAdapter.java | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java diff --git a/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java b/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java deleted file mode 100644 index fbcf918da..000000000 --- a/src/main/java/de/retest/recheck/persistence/StringInternerAdapter.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.retest.recheck.persistence; - -import jakarta.xml.bind.DatatypeConverter; -import jakarta.xml.bind.annotation.adapters.XmlAdapter; - -// Using code from https://jaxb.java.net/tutorial/section_5_5-Interning-Strings.html -public class StringInternerAdapter extends XmlAdapter { - - @Override - public String marshal( final String value ) throws Exception { - return value; - } - - @Override - public String unmarshal( final String value ) throws Exception { - return DatatypeConverter.parseString( value ).intern(); - } - -} From 854a50281529a1d0ec9e6b0a26b675c02f283d7f Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Thu, 7 Mar 2019 10:01:45 +0100 Subject: [PATCH 129/160] Simplify persist path only as String --- src/main/java/de/retest/recheck/ui/Path.java | 12 +++--------- .../java/de/retest/recheck/ui/PathAdapter.java | 17 +++++++++++++++++ .../java/de/retest/recheck/ui/PathElement.java | 16 +--------------- .../recheck/ui/descriptors/PathAttribute.java | 18 +++++++++--------- .../ui/descriptors/StringAttribute.java | 2 ++ 5 files changed, 32 insertions(+), 33 deletions(-) create mode 100644 src/main/java/de/retest/recheck/ui/PathAdapter.java diff --git a/src/main/java/de/retest/recheck/ui/Path.java b/src/main/java/de/retest/recheck/ui/Path.java index e5e2955e2..fa065be57 100644 --- a/src/main/java/de/retest/recheck/ui/Path.java +++ b/src/main/java/de/retest/recheck/ui/Path.java @@ -4,25 +4,19 @@ import java.util.HashMap; import java.util.Map; -import jakarta.xml.bind.annotation.XmlAccessType; -import jakarta.xml.bind.annotation.XmlAccessorType; -import jakarta.xml.bind.annotation.XmlElement; -import jakarta.xml.bind.annotation.XmlTransient; - -@XmlAccessorType( XmlAccessType.FIELD ) +/** + * Path should be persisted as String, use {@link PathAdapter}. + */ public class Path implements Serializable { private static final long serialVersionUID = 1L; public static final String PATH_SEPARATOR = "/"; - @XmlElement private final Path parentPath; - @XmlElement private final PathElement element; - @XmlTransient private String toStringCache; private Path() { diff --git a/src/main/java/de/retest/recheck/ui/PathAdapter.java b/src/main/java/de/retest/recheck/ui/PathAdapter.java new file mode 100644 index 000000000..399e773d2 --- /dev/null +++ b/src/main/java/de/retest/recheck/ui/PathAdapter.java @@ -0,0 +1,17 @@ +package de.retest.recheck.ui; + +import jakarta.xml.bind.annotation.adapters.XmlAdapter; + +public class PathAdapter extends XmlAdapter { + + @Override + public Path unmarshal( final String string ) throws Exception { + return Path.fromString( string ); + } + + @Override + public String marshal( final Path path ) throws Exception { + return path.toString(); + } + +} diff --git a/src/main/java/de/retest/recheck/ui/PathElement.java b/src/main/java/de/retest/recheck/ui/PathElement.java index d8e1739d0..02cf7e4e9 100644 --- a/src/main/java/de/retest/recheck/ui/PathElement.java +++ b/src/main/java/de/retest/recheck/ui/PathElement.java @@ -1,23 +1,9 @@ package de.retest.recheck.ui; -import java.io.Serializable; +public class PathElement { -import de.retest.recheck.persistence.StringInternerAdapter; -import jakarta.xml.bind.annotation.XmlAccessType; -import jakarta.xml.bind.annotation.XmlAccessorType; -import jakarta.xml.bind.annotation.XmlElement; -import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -@XmlAccessorType( XmlAccessType.FIELD ) -public class PathElement implements Serializable { - - private static final long serialVersionUID = 1L; - - @XmlElement - @XmlJavaTypeAdapter( StringInternerAdapter.class ) private final String elementName; - @XmlElement private final int suffix; public PathElement( final String elementName, final int suffix ) { diff --git a/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java index 26aa0129f..956d8551f 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/PathAttribute.java @@ -4,10 +4,14 @@ import java.io.Serializable; +import org.eclipse.persistence.oxm.annotations.XmlValueExtension; + import de.retest.recheck.ui.Path; +import de.retest.recheck.ui.PathAdapter; import de.retest.recheck.util.StringSimilarity; import jakarta.xml.bind.annotation.XmlRootElement; import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement public class PathAttribute extends ParameterizedAttribute { @@ -28,9 +32,9 @@ public Object parse( final String value ) throws ParameterParseException { public static final String PATH_KEY = "path"; @XmlValue - private final String path; - - private transient Path cachedPath; + @XmlValueExtension + @XmlJavaTypeAdapter( PathAdapter.class ) + private final Path path; // Used by JaxB protected PathAttribute() { @@ -44,16 +48,12 @@ public PathAttribute( final Path path ) { public PathAttribute( final Path path, final String variableName ) { super( PATH_KEY, variableName ); checkNull( path, PATH_KEY ); - cachedPath = path; - this.path = path.toString(); + this.path = path; } @Override public Path getValue() { - if ( cachedPath == null ) { - cachedPath = Path.fromString( path ); - } - return cachedPath; + return path; } @Override diff --git a/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java b/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java index d8417ac6a..032de9333 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/StringAttribute.java @@ -3,6 +3,7 @@ import java.io.Serializable; import org.apache.commons.lang3.StringUtils; +import org.eclipse.persistence.oxm.annotations.XmlValueExtension; import de.retest.recheck.util.StringSimilarity; import jakarta.xml.bind.annotation.XmlRootElement; @@ -57,6 +58,7 @@ public Boolean parse( final String value ) throws ParameterParseException { private static final long serialVersionUID = 1L; @XmlValue + @XmlValueExtension private final String value; // Used by JaxB From 3a2fbc30799668ad591ca4d6192114a7e2ec8d46 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 19:08:53 +0100 Subject: [PATCH 130/160] New moxy version (xml renderer) sort xsd elements different --- .../ActionSequence.approved.xsd | 2 +- .../AttributeDifference.approved.xsd | 14 +- .../AttributesDifference.approved.xsd | 14 +- .../CapturedSuite.approved.xsd | 2 +- .../CodeLocAttribute.approved.xsd | 28 ++-- .../ContextAttribute.approved.xsd | 20 +-- .../DefaultAttribute.approved.xsd | 22 +-- .../ExecutableSuite.approved.xsd | 148 +++++++++--------- ...entifyingAttributesDifference.approved.xsd | 32 ++-- ...ertedDeletedElementDifference.approved.xsd | 54 +++---- .../OutlineAttribute.approved.xsd | 10 +- .../ParameterizedAction.approved.xsd | 58 +++---- .../PathAttribute.approved.xsd | 10 +- ...ScreenshotAttributeDifference.approved.xsd | 14 +- .../StringAttribute.approved.xsd | 10 +- .../SuffixAttribute.approved.xsd | 12 +- .../Test.approved.xsd | 2 +- .../TextAttribute.approved.xsd | 12 +- .../WeightedTextAttribute.approved.xsd | 12 +- 19 files changed, 238 insertions(+), 238 deletions(-) diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ActionSequence.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ActionSequence.approved.xsd index da11a3e10..a71ee577d 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ActionSequence.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ActionSequence.approved.xsd @@ -1,7 +1,7 @@ - + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributeDifference.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributeDifference.approved.xsd index f75a45030..fb109f63b 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributeDifference.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributeDifference.approved.xsd @@ -1,12 +1,5 @@ - - - - - - - @@ -16,5 +9,12 @@ + + + + + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributesDifference.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributesDifference.approved.xsd index eda361421..256e03d8f 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributesDifference.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/AttributesDifference.approved.xsd @@ -1,12 +1,5 @@ - - - - - - - @@ -22,6 +15,13 @@ + + + + + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CapturedSuite.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CapturedSuite.approved.xsd index 60474c334..9b898bbb6 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CapturedSuite.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CapturedSuite.approved.xsd @@ -1,5 +1,6 @@ + @@ -9,6 +10,5 @@ - diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CodeLocAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CodeLocAttribute.approved.xsd index 52f485e79..602837a95 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CodeLocAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/CodeLocAttribute.approved.xsd @@ -1,5 +1,16 @@ + + + + + + + + + + + @@ -13,22 +24,11 @@ - - - - - - - - - - - - - - + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ContextAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ContextAttribute.approved.xsd index 0848edfd5..2ce09e952 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ContextAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ContextAttribute.approved.xsd @@ -1,13 +1,5 @@ - - - - - - - - @@ -17,10 +9,18 @@ - - + + + + + + + + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/DefaultAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/DefaultAttribute.approved.xsd index 217705d72..21de51607 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/DefaultAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/DefaultAttribute.approved.xsd @@ -1,12 +1,8 @@ - - - - - - - + + + @@ -17,10 +13,14 @@ - - - + + + + + + + - + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ExecutableSuite.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ExecutableSuite.approved.xsd index 17988562e..a607c1e06 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ExecutableSuite.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ExecutableSuite.approved.xsd @@ -1,69 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -77,6 +14,14 @@ + + + + + + + + @@ -86,7 +31,10 @@ - + + + + @@ -106,9 +54,10 @@ - - - + + + + @@ -119,18 +68,69 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + - + - + + + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/IdentifyingAttributesDifference.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/IdentifyingAttributesDifference.approved.xsd index fa1e6fbcc..4d77b188c 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/IdentifyingAttributesDifference.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/IdentifyingAttributesDifference.approved.xsd @@ -1,18 +1,8 @@ - - - - - - - - + - - - - + @@ -23,11 +13,21 @@ - + - + + + + + + + + + + + - - + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/InsertedDeletedElementDifference.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/InsertedDeletedElementDifference.approved.xsd index 80536a3a8..b15536b3b 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/InsertedDeletedElementDifference.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/InsertedDeletedElementDifference.approved.xsd @@ -1,18 +1,8 @@ - - - - - - - - - - - - - + + + @@ -33,16 +23,6 @@ - - - - - - - - - - @@ -57,13 +37,33 @@ - - - + + + + + + + + + + + + + + + + + + + + - + + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/OutlineAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/OutlineAttribute.approved.xsd index 418f98e31..53d7c1127 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/OutlineAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/OutlineAttribute.approved.xsd @@ -1,5 +1,9 @@ + + + + @@ -12,10 +16,6 @@ - - - - - + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ParameterizedAction.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ParameterizedAction.approved.xsd index c006699f6..cfa3b79d6 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ParameterizedAction.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ParameterizedAction.approved.xsd @@ -1,9 +1,19 @@ - + - + + + + + + + + + + + @@ -14,12 +24,9 @@ - - - - - - + + + @@ -40,16 +47,6 @@ - - - - - - - - - - @@ -64,22 +61,25 @@ - - - - - - - + + + + - + + + + + + + - - + - + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/PathAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/PathAttribute.approved.xsd index d82881ba4..1348979b9 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/PathAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/PathAttribute.approved.xsd @@ -1,5 +1,9 @@ + + + + @@ -8,13 +12,9 @@ - - - - + - diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ScreenshotAttributeDifference.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ScreenshotAttributeDifference.approved.xsd index f3c8b489c..c8d1927dc 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ScreenshotAttributeDifference.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/ScreenshotAttributeDifference.approved.xsd @@ -9,13 +9,6 @@ - - - - - - - @@ -25,6 +18,13 @@ + + + + + + + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/StringAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/StringAttribute.approved.xsd index 7126cb841..a5bd60761 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/StringAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/StringAttribute.approved.xsd @@ -1,5 +1,9 @@ + + + + @@ -8,13 +12,9 @@ - - - - + - diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/SuffixAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/SuffixAttribute.approved.xsd index 58753f10f..30540535e 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/SuffixAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/SuffixAttribute.approved.xsd @@ -1,5 +1,9 @@ + + + + @@ -13,14 +17,10 @@ - - - - + - - + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/Test.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/Test.approved.xsd index 655021e4d..e6abc6b1a 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/Test.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/Test.approved.xsd @@ -1,5 +1,6 @@ + @@ -9,6 +10,5 @@ - diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/TextAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/TextAttribute.approved.xsd index 68b447137..12239d905 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/TextAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/TextAttribute.approved.xsd @@ -1,5 +1,9 @@ + + + + @@ -13,14 +17,10 @@ - - - - + - - + diff --git a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/WeightedTextAttribute.approved.xsd b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/WeightedTextAttribute.approved.xsd index 63115a78e..9af50c20a 100644 --- a/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/WeightedTextAttribute.approved.xsd +++ b/src/test/resources/de/retest/util/XsdRegressionTest.checkXsd/WeightedTextAttribute.approved.xsd @@ -1,5 +1,9 @@ + + + + @@ -20,15 +24,11 @@ - - - - + + - - From 3d337d241647687f09afab6c9ebcffb97a26ac6b Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 28 May 2021 13:59:46 +0200 Subject: [PATCH 131/160] Fix wrong actor selction in github action for real --- .github/workflows/build-project.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-project.yml b/.github/workflows/build-project.yml index bcdae2e9e..35fb4ecd4 100644 --- a/.github/workflows/build-project.yml +++ b/.github/workflows/build-project.yml @@ -5,6 +5,8 @@ on: [push, pull_request] env: MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress + HAS_SONAR_TOKEN: ${{ secrets.SONAR_TOKEN != '' }} + jobs: default: @@ -43,7 +45,7 @@ jobs: - name: Test with SonarCloud id: test-with-sonar - if: ${{ github.actor != 'dependabot[bot]' }} + if: ${{ env.HAS_SONAR_TOKEN == 'true' }} run: > mvn ${MVN_ARGS} verify sonar:sonar -Pcoverage -Dsonar.host.url=https://sonarcloud.io From c2b134eaae0d325c08c358adb486b61eb3a99059 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 May 2021 12:03:01 +0000 Subject: [PATCH 132/160] Bump jakarta.mail from 2.0.0 to 2.0.1 Bumps [jakarta.mail](https://github.com/eclipse-ee4j/mail) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/eclipse-ee4j/mail/releases) - [Commits](https://github.com/eclipse-ee4j/mail/compare/2.0.0...2.0.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9e8fa1ec6..9861f910c 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@ com.sun.mail jakarta.mail - 2.0.0 + 2.0.1 From 3b27d3241e01d0d4cc10bab070eaa9353ff2c902 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 May 2021 12:03:50 +0000 Subject: [PATCH 133/160] Bump org.eclipse.persistence.moxy from 3.0.0 to 3.0.1 Bumps [org.eclipse.persistence.moxy](https://github.com/eclipse-ee4j/eclipselink) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/eclipse-ee4j/eclipselink/releases) - [Commits](https://github.com/eclipse-ee4j/eclipselink/compare/3.0.0...3.0.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9861f910c..6e6cf4b5c 100644 --- a/pom.xml +++ b/pom.xml @@ -155,7 +155,7 @@ org.eclipse.persistence org.eclipse.persistence.moxy - 3.0.0 + 3.0.1 From 6ed51f3a99954325b7ef772b9b96b93821fa9359 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 May 2021 12:03:28 +0000 Subject: [PATCH 134/160] Bump jakarta.activation from 2.0.0 to 2.0.1 Bumps [jakarta.activation](https://github.com/eclipse-ee4j/jaf) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/eclipse-ee4j/jaf/releases) - [Commits](https://github.com/eclipse-ee4j/jaf/compare/2.0.0...2.0.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6e6cf4b5c..ca0b627fe 100644 --- a/pom.xml +++ b/pom.xml @@ -162,7 +162,7 @@ com.sun.activation jakarta.activation - 2.0.0 + 2.0.1 com.sun.mail From 74f3113d8ddb9da6d91a9e75dd1bc2b881229afc Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 6 Jan 2021 16:02:31 +0100 Subject: [PATCH 135/160] Make filter robust, by handling execption as false --- CHANGELOG.md | 1 + .../retest/recheck/ignore/CompoundFilter.java | 4 +++- .../recheck/review/GlobalIgnoreApplier.java | 4 +++- .../de/retest/recheck/util/Predicates.java | 22 +++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/retest/recheck/util/Predicates.java diff --git a/CHANGELOG.md b/CHANGELOG.md index fdad7be07..6ecee2eaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ Table of Contents * Add `exclude()` filter expression to allow child elements to be excluded. Ignoring an element `matcher: type=body, exclude(matcher: type=button)` will ignore everything below the `body` element but still capture changes for `button` elements. * Add a `disableReportUpload` method. * The `ProjectLayout` will now be automatically detected (Maven and Gradle) and will throw an error if it cannot fall back to Maven, in which case a custom `ProjectLayout` has to be provided. +* In case of an exception in the filter code, it will be treated as not filtered. ### Improvements diff --git a/src/main/java/de/retest/recheck/ignore/CompoundFilter.java b/src/main/java/de/retest/recheck/ignore/CompoundFilter.java index 7cb038d73..8b0241121 100644 --- a/src/main/java/de/retest/recheck/ignore/CompoundFilter.java +++ b/src/main/java/de/retest/recheck/ignore/CompoundFilter.java @@ -1,5 +1,7 @@ package de.retest.recheck.ignore; +import static de.retest.recheck.util.Predicates.catchExceptionAsFalse; + import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -43,7 +45,7 @@ public boolean matches( final Element element ) { @Override public boolean matches( final Element element, final ChangeType change ) { - return filters.stream().anyMatch( f -> f.matches( element, change ) ); + return filters.stream().anyMatch( catchExceptionAsFalse( f -> f.matches( element, change ) ) ); } @Override diff --git a/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java b/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java index a4f2ee5be..d4f1deb80 100644 --- a/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java +++ b/src/main/java/de/retest/recheck/review/GlobalIgnoreApplier.java @@ -1,5 +1,7 @@ package de.retest.recheck.review; +import static de.retest.recheck.util.Predicates.catchExceptionAsFalse; + import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -101,7 +103,7 @@ private void remove( final Predicate filter ) { } private boolean any( final Predicate filter ) { - return filtered.stream().anyMatch( filter ); + return filtered.stream().anyMatch( catchExceptionAsFalse( filter ) ); } public PersistableGlobalIgnoreApplier persist() { diff --git a/src/main/java/de/retest/recheck/util/Predicates.java b/src/main/java/de/retest/recheck/util/Predicates.java new file mode 100644 index 000000000..b3e72dbcf --- /dev/null +++ b/src/main/java/de/retest/recheck/util/Predicates.java @@ -0,0 +1,22 @@ +package de.retest.recheck.util; + +import java.util.function.Predicate; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public final class Predicates { + private Predicates() {} + + public static Predicate catchExceptionAsFalse( final Predicate unCatchedPredicate ) { + return argument -> { + try { + return unCatchedPredicate.test( argument ); + } catch ( final Exception willBeIgnored ) { + log.info( "Return false for ignored {}:", willBeIgnored.getClass(), willBeIgnored.getMessage() ); + return false; + } + }; + } + +} From 551b12811f52dad3346bd2ed38efe16bcdd547d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Jan 2021 13:38:26 +0000 Subject: [PATCH 136/160] Bump kryo from 4.0.2 to 5.0.3 Bumps [kryo](https://github.com/EsotericSoftware/kryo) from 4.0.2 to 5.0.3. - [Release notes](https://github.com/EsotericSoftware/kryo/releases) - [Commits](https://github.com/EsotericSoftware/kryo/compare/kryo-parent-4.0.2...kryo-parent-5.0.3) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca0b627fe..095a1779b 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,7 @@ com.esotericsoftware kryo - 4.0.2 + 5.0.3 From 6b5b1ee09eabce07c519b99100359631d10c7f9c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jan 2021 03:15:38 +0000 Subject: [PATCH 137/160] Bump kryo-serializers from 0.43 to 0.45 Bumps [kryo-serializers](https://github.com/magro/kryo-serializers) from 0.43 to 0.45. - [Release notes](https://github.com/magro/kryo-serializers/releases) - [Commits](https://github.com/magro/kryo-serializers/compare/kryo-serializers-0.43...kryo-serializers-0.45) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 095a1779b..07baeac64 100644 --- a/pom.xml +++ b/pom.xml @@ -107,7 +107,7 @@ de.javakaffee kryo-serializers - 0.43 + 0.45 From c32bfa861b9225f9d726cdce1520710443b68dfb Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 17:31:05 +0100 Subject: [PATCH 138/160] Use kryo5 library compability mode --- pom.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 07baeac64..b0e037cc2 100644 --- a/pom.xml +++ b/pom.xml @@ -98,15 +98,14 @@ - com.esotericsoftware - kryo + com.esotericsoftware.kryo + kryo5 5.0.3 de.javakaffee kryo-serializers - 0.45 From 27b6ae4b208c02ea9d37f24ea771b1eb4b6a5ad6 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 17:31:55 +0100 Subject: [PATCH 139/160] Implemantation changes for new upstream version --- .../de/retest/recheck/persistence/bin/KryoPersistence.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java index b7bb3c8ee..275c01f4f 100644 --- a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java @@ -74,10 +74,12 @@ public KryoPersistence() { private static Kryo createKryo() { final Kryo kryo = new Kryo(); + kryo.setInstantiatorStrategy( new StdInstantiatorStrategy() ); - kryo.setInstantiatorStrategy( new Kryo.DefaultInstantiatorStrategy( new StdInstantiatorStrategy() ) ); + kryo.setRegistrationRequired( false ); // TODO remove, see #836 - final Registration registration = kryo.getRegistration( TreeMultiset.class ); + + final Registration registration = kryo.register( TreeMultiset.class ); registration.setInstantiator( TreeMultiset::create ); UnmodifiableCollectionsSerializer.registerSerializers( kryo ); From 0fa805d3e2fcbd4914e95b7aae561e334dcf57e3 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 17:35:50 +0100 Subject: [PATCH 140/160] Start implementing kryo registration #836 --- .../persistence/bin/KryoPersistence.java | 8 ++++++ .../persistence/bin/KryoPersistenceTest.java | 26 +++++++++---------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java index 275c01f4f..ec49cb485 100644 --- a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java @@ -11,6 +11,7 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -29,7 +30,9 @@ import de.retest.recheck.persistence.IncompatibleReportVersionException; import de.retest.recheck.persistence.Persistable; import de.retest.recheck.persistence.Persistence; +import de.retest.recheck.report.SuiteReplayResult; import de.retest.recheck.report.TestReport; +import de.retest.recheck.ui.review.GoldenMasterSource; import de.retest.recheck.util.FileUtil; import de.retest.recheck.util.VersionProvider; import lombok.extern.slf4j.Slf4j; @@ -78,6 +81,11 @@ private static Kryo createKryo() { kryo.setRegistrationRequired( false ); // TODO remove, see #836 + kryo.register( TestReport.class ); + kryo.register( GoldenMasterSource.class ); + kryo.register( SuiteReplayResult.class ); + kryo.register( ArrayList.class ); + // TODO add more, see #836 final Registration registration = kryo.register( TreeMultiset.class ); registration.setInstantiator( TreeMultiset::create ); diff --git a/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java b/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java index 883d9c143..552448014 100644 --- a/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java +++ b/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java @@ -14,7 +14,6 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -24,6 +23,7 @@ import de.retest.recheck.persistence.IncompatibleReportVersionException; import de.retest.recheck.persistence.Persistable; +import de.retest.recheck.report.SuiteReplayResult; import de.retest.recheck.report.TestReport; import de.retest.recheck.util.VersionProvider; @@ -35,18 +35,18 @@ void roundtrip_should_work( @TempDir final Path temp ) throws IOException { Files.createFile( file ); final URI identifier = file.toUri(); - final KryoPersistence kryoPersistence = new KryoPersistence<>(); - final de.retest.recheck.test.Test persisted = createDummyTest(); + final KryoPersistence kryoPersistence = new KryoPersistence<>(); + final TestReport persisted = createDummyTest(); kryoPersistence.save( identifier, persisted ); - final de.retest.recheck.test.Test loaded = kryoPersistence.load( identifier ); + final TestReport loaded = kryoPersistence.load( identifier ); - assertThat( persisted.getRelativeActionSequencePaths() ).isEqualTo( loaded.getRelativeActionSequencePaths() ); + assertThat( loaded.getSuiteReplayResults().get( 0 ).getName() ) + .isEqualTo( persisted.getSuiteReplayResults().get( 0 ).getName() ); } - public de.retest.recheck.test.Test createDummyTest() { - final ArrayList tests = new ArrayList<>(); - tests.add( "../test.test" ); - return new de.retest.recheck.test.Test( tests ); + public TestReport createDummyTest() { + final SuiteReplayResult suite = new SuiteReplayResult( "test", 23, null, "00", null ); + return new TestReport( suite ); } @Test @@ -55,13 +55,12 @@ void incompatible_version_should_give_persisting_version( @TempDir final Path te Files.createFile( file ); final URI identifier = file.toUri(); - final KryoPersistence kryoPersistence = new KryoPersistence<>(); + final KryoPersistence kryoPersistence = new KryoPersistence<>(); kryoPersistence.save( identifier, createDummyTest() ); final Kryo kryoMock = mock( Kryo.class ); when( kryoMock.readClassAndObject( any() ) ).thenThrow( KryoException.class ); - final KryoPersistence differentKryoPersistence = - new KryoPersistence<>( kryoMock, "old Version" ); + final KryoPersistence differentKryoPersistence = new KryoPersistence<>( kryoMock, "old Version" ); assertThatThrownBy( () -> differentKryoPersistence.load( identifier ) ) .isInstanceOf( IncompatibleReportVersionException.class ) @@ -99,8 +98,7 @@ void on_error_file_should_be_deleted() throws IOException { final File nonexistent = new File( "nonexistent.report" ); final Kryo kryoMock = mock( Kryo.class ); doThrow( KryoException.class ).when( kryoMock ).writeClassAndObject( any(), any() ); - final KryoPersistence persistence = - new KryoPersistence<>( kryoMock, "some version" ); + final KryoPersistence persistence = new KryoPersistence<>( kryoMock, "some version" ); assertThatThrownBy( () -> persistence.save( nonexistent.toURI(), createDummyTest() ) ) .isInstanceOf( KryoException.class ); assertThat( nonexistent ).doesNotExist(); From d1cde4d668b5c28180b6241971d6aa61a05f3be6 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 17:45:48 +0100 Subject: [PATCH 141/160] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ecee2eaf..32575f650 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Table of Contents ### Breaking Changes * Since 01.12.2020 this project is owned and developed by [UBS Hainer GmbH](https://ubs-hainer.com/). +* Update the storage library used for reports (kryo 4 -> 5), it's possible that older test reports can't longer be read. ### Bug Fixes From fdd735a778f757dd91f34e5066ee15e7b61e000c Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 5 Mar 2021 20:29:31 +0100 Subject: [PATCH 142/160] Persisting Mockito objects with moxy don't work anymore --- .../java/de/retest/recheck/RecheckImplIT.java | 17 ++++++-- .../RecheckTestReportUtilTest.java | 43 +++++++++++++++---- .../review/GlobalChangeSetApplierIT.java | 6 ++- .../recheck/ui/diff/ElementBuilder.java | 2 +- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/src/test/java/de/retest/recheck/RecheckImplIT.java b/src/test/java/de/retest/recheck/RecheckImplIT.java index 2d5b70b9f..111c9acad 100644 --- a/src/test/java/de/retest/recheck/RecheckImplIT.java +++ b/src/test/java/de/retest/recheck/RecheckImplIT.java @@ -1,8 +1,6 @@ package de.retest.recheck; import static org.junit.jupiter.api.Assertions.fail; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import java.util.Arrays; import java.util.Collections; @@ -13,6 +11,7 @@ import de.retest.recheck.ignore.CompoundFilter; import de.retest.recheck.ignore.Filter; import de.retest.recheck.ignore.Filters; +import de.retest.recheck.persistence.FileNamer; import de.retest.recheck.ui.DefaultValueFinder; import de.retest.recheck.ui.Path; import de.retest.recheck.ui.descriptors.Element; @@ -48,9 +47,19 @@ void diff_should_be_created_with_deleted_filtered() { } @Test + @SuppressWarnings( "deprecation" ) void diff_should_handle_legacy_spaces_accordingly() { - final FileNamerStrategy fileNamerStrategy = spy( new MavenConformFileNamerStrategy() ); - doReturn( RecheckImplIT.class.getName() + " legacy spaces" ).when( fileNamerStrategy ).getTestClassName(); + final FileNamerStrategy fileNamerStrategy = new FileNamerStrategy() { + @Override + public FileNamer createFileNamer( final String... baseNames ) { + return new MavenConformFileNamerStrategy().createFileNamer( baseNames ); + } + + @Override + public String getTestClassName() { + return RecheckImplIT.class.getName() + " legacy spaces"; + } + }; execute( "with legacy spaces", RecheckOptions.builder() // .setIgnore( METADATA_FILTER ) // Ignore metadata diff --git a/src/test/java/de/retest/recheck/persistence/RecheckTestReportUtilTest.java b/src/test/java/de/retest/recheck/persistence/RecheckTestReportUtilTest.java index 676006b00..c04f76999 100644 --- a/src/test/java/de/retest/recheck/persistence/RecheckTestReportUtilTest.java +++ b/src/test/java/de/retest/recheck/persistence/RecheckTestReportUtilTest.java @@ -2,17 +2,28 @@ import static de.retest.recheck.RecheckProperties.AGGREGATED_TEST_REPORT_FILE_NAME; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import java.io.File; import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collections; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import de.retest.recheck.report.ActionReplayResult; import de.retest.recheck.report.SuiteReplayResult; +import de.retest.recheck.report.TestReplayResult; +import de.retest.recheck.report.action.ActionReplayData; +import de.retest.recheck.ui.descriptors.Attributes; +import de.retest.recheck.ui.descriptors.IdentifyingAttributes; +import de.retest.recheck.ui.descriptors.RootElement; +import de.retest.recheck.ui.diff.ElementBuilder; +import de.retest.recheck.ui.diff.ElementBuilder.child2; +import de.retest.recheck.ui.diff.ElementDifference; +import de.retest.recheck.ui.diff.RootElementDifference; +import de.retest.recheck.ui.diff.StateDifference; class RecheckTestReportUtilTest { @@ -27,8 +38,7 @@ void setUp( @TempDir final Path temp ) { @Test void persist_should_create_report_when_there_are_no_diffs() { - final SuiteReplayResult replayResult = mock( SuiteReplayResult.class ); - when( replayResult.getDifferencesCount() ).thenReturn( 0 ); + final SuiteReplayResult replayResult = new SuiteReplayResult( "test", 23, null, "00", null ); RecheckTestReportUtil.persist( replayResult, testReport ); @@ -37,18 +47,33 @@ void persist_should_create_report_when_there_are_no_diffs() { @Test void persist_should_create_report_when_there_are_diffs() { - final SuiteReplayResult replayResult = mock( SuiteReplayResult.class ); - when( replayResult.getDifferencesCount() ).thenReturn( 1 ); + final SuiteReplayResult replayResult = new SuiteReplayResult( "test", 23, null, "00", null ); + replayResult.addTest( createDummyReplayResultWithOneDiff() ); RecheckTestReportUtil.persist( replayResult, testReport ); assertThat( testReport ).exists(); } + TestReplayResult createDummyReplayResultWithOneDiff() { + final RootElement root = new RootElement( "retestId", + new IdentifyingAttributes( ElementBuilder + .createIdentifyingAttribute( de.retest.recheck.ui.Path.fromString( "comp1" ), child2.class ) ), + new Attributes(), null, "screen", 1, "title" ); + final ActionReplayResult test = ActionReplayResult.createActionReplayResult( ActionReplayData.empty(), + new StateDifference( Arrays.asList( new RootElementDifference( + new ElementDifference( root, null, null, null, null, Collections.emptyList() ), root, + null ) ) ), + 1, null ); + + final TestReplayResult testReplayResult = new TestReplayResult( "test", 1 ); + testReplayResult.addAction( test ); + return testReplayResult; + } + @Test void persist_should_create_missing_folders() { - final SuiteReplayResult replayResult = mock( SuiteReplayResult.class ); - when( replayResult.getDifferencesCount() ).thenReturn( 0 ); + final SuiteReplayResult replayResult = new SuiteReplayResult( "test", 23, null, "00", null ); RecheckTestReportUtil.persist( replayResult, testReportMissingFolders ); @@ -57,7 +82,7 @@ void persist_should_create_missing_folders() { @Test void persist_should_create_aggregated_test_report() throws Exception { - final SuiteReplayResult replayResult = mock( SuiteReplayResult.class ); + final SuiteReplayResult replayResult = new SuiteReplayResult( "test", 23, null, "00", null ); RecheckTestReportUtil.persist( replayResult, testReport ); diff --git a/src/test/java/de/retest/recheck/review/GlobalChangeSetApplierIT.java b/src/test/java/de/retest/recheck/review/GlobalChangeSetApplierIT.java index 93df58759..40b1d6a97 100644 --- a/src/test/java/de/retest/recheck/review/GlobalChangeSetApplierIT.java +++ b/src/test/java/de/retest/recheck/review/GlobalChangeSetApplierIT.java @@ -1,13 +1,13 @@ package de.retest.recheck.review; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import java.awt.Rectangle; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collection; import java.util.Collections; +import java.util.Random; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -206,7 +206,9 @@ public DefaultValueFinder getDefaultValueFinder() { @Override public void notifyAboutDifferences( final ActionReplayResult actionReplayResult ) { - final ElementIdentificationWarning warning = mock( ElementIdentificationWarning.class ); + final ElementIdentificationWarning warning = new ElementIdentificationWarning( "testFileName", + new Random().nextInt(), "findByMethodName", "qualifiedTestName" ); + actionReplayResult.getAllElementDifferences().stream() // .map( ElementDifference::getAttributeDifferences ) // .flatMap( Collection::stream ) // diff --git a/src/test/java/de/retest/recheck/ui/diff/ElementBuilder.java b/src/test/java/de/retest/recheck/ui/diff/ElementBuilder.java index c1ab5a401..463fd1f7f 100644 --- a/src/test/java/de/retest/recheck/ui/diff/ElementBuilder.java +++ b/src/test/java/de/retest/recheck/ui/diff/ElementBuilder.java @@ -18,7 +18,7 @@ import de.retest.recheck.ui.descriptors.TextAttribute; import de.retest.recheck.ui.image.Screenshot; -class ElementBuilder { +public class ElementBuilder { public static Element buildElement() { final IdentifyingAttributes identifyingAttributes = From 41591c86d0fdaa606bcf42a4bdb81398f28d724f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 May 2021 12:37:46 +0000 Subject: [PATCH 143/160] Bump kryo5 from 5.0.3 to 5.1.1 Bumps kryo5 from 5.0.3 to 5.1.1. Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b0e037cc2..fc96139c7 100644 --- a/pom.xml +++ b/pom.xml @@ -100,7 +100,7 @@ com.esotericsoftware.kryo kryo5 - 5.0.3 + 5.1.1 From d320824d2aa10ae6a20a11e458cccb505d0298cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 02:04:56 +0000 Subject: [PATCH 144/160] Bump junit-pioneer from 1.4.1 to 1.4.2 Bumps [junit-pioneer](https://github.com/junit-pioneer/junit-pioneer) from 1.4.1 to 1.4.2. - [Release notes](https://github.com/junit-pioneer/junit-pioneer/releases) - [Commits](https://github.com/junit-pioneer/junit-pioneer/compare/v1.4.1...v1.4.2) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fc96139c7..b0dfda512 100644 --- a/pom.xml +++ b/pom.xml @@ -262,7 +262,7 @@ org.junit-pioneer junit-pioneer - 1.4.1 + 1.4.2 test From 50b041c50be90299d22bdd1033e70caab74607e2 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 26 May 2021 20:14:09 +0200 Subject: [PATCH 145/160] Update CloudPersistence for new artifact-storage-steward api --- .../de/retest/recheck/RecheckProperties.java | 8 +++++- .../recheck/persistence/CloudPersistence.java | 27 ++++++++----------- .../persistence/ReportUploadContainer.java | 13 --------- 3 files changed, 18 insertions(+), 30 deletions(-) delete mode 100644 src/main/java/de/retest/recheck/persistence/ReportUploadContainer.java diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index 4a0c92883..fff1a6a22 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -85,12 +85,18 @@ static RecheckProperties getInstance() { @DefaultValue( "false" ) boolean rehubReportUploadEnabled(); - String REHUB_REPORT_AUTH_URL_PROPERTY_KEY = "de.retest.recheck.rehub.reportUploadUrl"; + String REHUB_REPORT_AUTH_URL_PROPERTY_KEY = "de.retest.recheck.rehub.authUrl"; @Key( REHUB_REPORT_AUTH_URL_PROPERTY_KEY ) @DefaultValue( "https://login.retest.de/auth/realms/customer/protocol/openid-connect" ) String rehubReportAuthUrl(); + String REHUB_REPORT_UPLOAD_URL_PROPERTY_KEY = "de.retest.recheck.rehub.reportUploadUrl"; + + @Key( REHUB_REPORT_UPLOAD_URL_PROPERTY_KEY ) + @DefaultValue( "https://artifact-storage-steward.prod.cloud.retest.org/api/v1/report" ) + String rehubReportUploadUrl(); + String REHUB_REPORT_UPLOAD_ATTEMPTS = "de.retest.recheck.rehub.upload.attempts"; @Key( REHUB_REPORT_UPLOAD_ATTEMPTS ) diff --git a/src/main/java/de/retest/recheck/persistence/CloudPersistence.java b/src/main/java/de/retest/recheck/persistence/CloudPersistence.java index 950ae2b58..38648d6b2 100644 --- a/src/main/java/de/retest/recheck/persistence/CloudPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/CloudPersistence.java @@ -24,7 +24,7 @@ @Slf4j public class CloudPersistence implements Persistence { private static final int MAX_REPORT_NAME_LENGTH = 50; - private static final String SERVICE_ENDPOINT = "https://marvin.prod.cloud.retest.org/api/report"; + private final KryoPersistence kryoPersistence = new KryoPersistence<>(); private final XmlFolderPersistence folderPersistence = new XmlFolderPersistence<>( getXmlTransformer() ); @@ -63,22 +63,17 @@ private List getTestClasses( final TestReport report ) { } private void saveToCloud( final TestReport report, final byte[] data ) { - final HttpResponse uploadUrlResponse = getUploadUrl(); + final HttpResponse uploadUrlResponse = getUploadUrl( String.join( ", ", getTestClasses( report ) ) ); if ( uploadUrlResponse.isSuccess() ) { - final ReportUploadContainer metadata = ReportUploadContainer.builder() // - .reportName( String.join( ", ", getTestClasses( report ) ) ) // - .data( data ) // - .uploadUrl( uploadUrlResponse.getBody() ) // - .build(); - final boolean hasChanges = report.containsChanges(); + log.info( "Upload URL: {}", uploadUrlResponse.getBody() ); final int maxAttempts = RecheckProperties.getInstance().rehubReportUploadAttempts(); for ( int remainingAttempts = maxAttempts - 1; remainingAttempts >= 0; remainingAttempts-- ) { try { - uploadReport( metadata ); + uploadReport( uploadUrlResponse.getBody(), data ); break; // Successful, abort retry } catch ( final UnirestException e ) { - if ( !hasChanges ) { + if ( !report.containsChanges() ) { log.warn( "Failed to upload report. Ignoring exception because the report does not have any differences.", e ); @@ -97,11 +92,10 @@ private void saveToCloud( final TestReport report, final byte[] data ) { } } - private void uploadReport( final ReportUploadContainer metadata ) { + private void uploadReport( final String uploadUrl, final byte[] data ) { final long start = System.currentTimeMillis(); - final HttpResponse uploadResponse = Unirest.put( metadata.getUploadUrl() ) // - .header( "x-amz-meta-report-name", abbreviate( metadata.getReportName(), MAX_REPORT_NAME_LENGTH ) ) // - .body( metadata.getData() ) // + final HttpResponse uploadResponse = Unirest.put( uploadUrl ) // + .body( data ) // .asEmpty(); if ( uploadResponse.isSuccess() ) { @@ -110,10 +104,11 @@ private void uploadReport( final ReportUploadContainer metadata ) { } } - private HttpResponse getUploadUrl() { + private HttpResponse getUploadUrl( final String reportName ) { final String token = String.format( "Bearer %s", Rehub.getAccessToken() ); - return Unirest.post( SERVICE_ENDPOINT ) // + return Unirest.post( RecheckProperties.getInstance().rehubReportUploadUrl() ) // + .queryString( "name", abbreviate( reportName, MAX_REPORT_NAME_LENGTH ) ) // .header( "Authorization", token )// .asString(); } diff --git a/src/main/java/de/retest/recheck/persistence/ReportUploadContainer.java b/src/main/java/de/retest/recheck/persistence/ReportUploadContainer.java deleted file mode 100644 index 52798ff33..000000000 --- a/src/main/java/de/retest/recheck/persistence/ReportUploadContainer.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.retest.recheck.persistence; - -import lombok.Builder; -import lombok.Getter; - -@Builder -@Getter -public class ReportUploadContainer { - - private final String reportName; - private final byte[] data; - private final String uploadUrl; -} From dbe3f143884ee991f569abb1e3bbb46b5d4b677c Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 26 May 2021 20:21:59 +0200 Subject: [PATCH 146/160] Update rehub auth key config --- src/main/java/de/retest/recheck/RecheckProperties.java | 6 ++++++ .../java/de/retest/recheck/auth/RetestAuthentication.java | 7 ++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index fff1a6a22..2197a00d7 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -91,6 +91,12 @@ static RecheckProperties getInstance() { @DefaultValue( "https://login.retest.de/auth/realms/customer/protocol/openid-connect" ) String rehubReportAuthUrl(); + String REHUB_REPORT_AUTH_KEY_PROPERTY_KEY = "de.retest.recheck.rehub.authKey"; + + @Key( REHUB_REPORT_AUTH_KEY_PROPERTY_KEY ) + @DefaultValue( "tvrdxLHWA3h3SQRElQnGpKqxcCmMBpMSOhg4F7huUto" ) + String rehubAuthKey(); + String REHUB_REPORT_UPLOAD_URL_PROPERTY_KEY = "de.retest.recheck.rehub.reportUploadUrl"; @Key( REHUB_REPORT_UPLOAD_URL_PROPERTY_KEY ) diff --git a/src/main/java/de/retest/recheck/auth/RetestAuthentication.java b/src/main/java/de/retest/recheck/auth/RetestAuthentication.java index 94bb0b7db..bbd9c0a0f 100644 --- a/src/main/java/de/retest/recheck/auth/RetestAuthentication.java +++ b/src/main/java/de/retest/recheck/auth/RetestAuthentication.java @@ -62,8 +62,6 @@ public class RetestAuthentication { private static final String OAUTH_RESPONSE_TYPE_CODE = "code"; private static final String OAUTH_RESPONSE_TYPE = "response_type"; - private static final String PUBLIC_KEY_ID = "cXdlj_AlGVf-TbXyauXYM2XairgNUahzgOXHAuAxAmQ"; - private DecodedJWT accessToken; private final AuthenticationHandler handler; private final String client; @@ -78,7 +76,7 @@ public RetestAuthentication( final AuthenticationHandler handler, final String c private JWTVerifier getJwtVerifier() { try { final UrlJwkProvider provider = new UrlJwkProvider( URI.create( CERTS_URL ).toURL() ); - final PublicKey publicKey = provider.get( PUBLIC_KEY_ID ).getPublicKey(); + final PublicKey publicKey = provider.get( RecheckProperties.getInstance().rehubAuthKey() ).getPublicKey(); return JWT.require( Algorithm.RSA256( (RSAPublicKey) publicKey, null ) ).acceptLeeway( 3 ).build(); } catch ( final SigningKeyNotFoundException e ) { final RuntimeException offline = new UnableToAuthenticateOfflineException( e ); @@ -164,6 +162,9 @@ private TokenBundle accessCodeToToken( final String code, final String redirectU final JSONObject object = response.getBody().getObject(); bundle.setAccessToken( object.getString( OAUTH_ACCESS_TOKEN ) ); bundle.setRefreshToken( object.getString( OAUTH_REFRESH_TOKEN ) ); + } else { + log.error( "Auth token url call failed with {} {}: {}", response.getStatus(), response.getStatusText(), + response.getBody() ); } return bundle; From de8f6dfabb3d9847bce2b992b264c27aafb4a6c8 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 26 May 2021 20:23:06 +0200 Subject: [PATCH 147/160] Revert removed visibility for ProjectRootFinderUtil.getProjectRoot() --- .../de/retest/recheck/configuration/ProjectRootFinderUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java b/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java index 11eb4e7d4..b08495781 100644 --- a/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java +++ b/src/main/java/de/retest/recheck/configuration/ProjectRootFinderUtil.java @@ -20,7 +20,7 @@ public static Optional getProjectRoot() { return getProjectRoot( baseFolder.toAbsolutePath() ); } - static Optional getProjectRoot( final Path basePath ) { + public static Optional getProjectRoot( final Path basePath ) { return projectRootFinder.stream() // .map( finder -> finder.findProjectRoot( basePath ) ) // .flatMap( OptionalUtil::stream ) // From 33506d124cc924eed2f28e85075590081d57fd7c Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 26 May 2021 20:27:57 +0200 Subject: [PATCH 148/160] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32575f650..f8581aae5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ Table of Contents * Fix a rare `java.nio.file.FileSystemAlreadyExistsException` when accessing filters concurrently. * Fix 1-click-maintenance not respecting the key of the `AttributeDifference`. +* Updated and now configurable URLs for rehub backend services ### New Features From b4e8af6ba224c270cc887e89a8ae44ba3e7bb1c4 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Mon, 31 May 2021 17:17:58 +0200 Subject: [PATCH 149/160] Fix usage of wrong kryo version --- pom.xml | 6 ------ .../recheck/persistence/bin/KryoPersistence.java | 14 ++++++-------- .../persistence/bin/KryoPersistenceTest.java | 4 ++-- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index b0dfda512..8a3b0f91a 100644 --- a/pom.xml +++ b/pom.xml @@ -103,12 +103,6 @@ 5.1.1 - - de.javakaffee - kryo-serializers - 0.45 - - org.lz4 lz4-java diff --git a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java index ec49cb485..1db37eb3b 100644 --- a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java @@ -18,15 +18,14 @@ import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; -import org.objenesis.strategy.StdInstantiatorStrategy; -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.Registration; -import com.esotericsoftware.kryo.io.Input; -import com.esotericsoftware.kryo.io.Output; +import com.esotericsoftware.kryo.kryo5.Kryo; +import com.esotericsoftware.kryo.kryo5.Registration; +import com.esotericsoftware.kryo.kryo5.io.Input; +import com.esotericsoftware.kryo.kryo5.io.Output; +import com.esotericsoftware.kryo.kryo5.objenesis.strategy.StdInstantiatorStrategy; import com.google.common.collect.TreeMultiset; -import de.javakaffee.kryoserializers.UnmodifiableCollectionsSerializer; import de.retest.recheck.persistence.IncompatibleReportVersionException; import de.retest.recheck.persistence.Persistable; import de.retest.recheck.persistence.Persistence; @@ -78,6 +77,7 @@ public KryoPersistence() { private static Kryo createKryo() { final Kryo kryo = new Kryo(); kryo.setInstantiatorStrategy( new StdInstantiatorStrategy() ); + kryo.setReferences( true ); kryo.setRegistrationRequired( false ); // TODO remove, see #836 @@ -90,8 +90,6 @@ private static Kryo createKryo() { final Registration registration = kryo.register( TreeMultiset.class ); registration.setInstantiator( TreeMultiset::create ); - UnmodifiableCollectionsSerializer.registerSerializers( kryo ); - return kryo; } diff --git a/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java b/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java index 552448014..06b2240fc 100644 --- a/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java +++ b/src/test/java/de/retest/recheck/persistence/bin/KryoPersistenceTest.java @@ -18,8 +18,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.KryoException; +import com.esotericsoftware.kryo.kryo5.Kryo; +import com.esotericsoftware.kryo.kryo5.KryoException; import de.retest.recheck.persistence.IncompatibleReportVersionException; import de.retest.recheck.persistence.Persistable; From e0f578658cc834c9069c207ceaef90fcce05a90e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 02:05:04 +0000 Subject: [PATCH 150/160] Bump approvaltests from 11.5.0 to 11.6.0 Bumps [approvaltests](https://github.com/approvals/ApprovalTests.Java) from 11.5.0 to 11.6.0. - [Release notes](https://github.com/approvals/ApprovalTests.Java/releases) - [Commits](https://github.com/approvals/ApprovalTests.Java/compare/11.5.0...11.6.0) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8a3b0f91a..9af3dc0ff 100644 --- a/pom.xml +++ b/pom.xml @@ -242,7 +242,7 @@ com.approvaltests approvaltests - 11.5.0 + 11.6.0 test From a6693c86897d35f496113c26861908fda675dec9 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 1 Jun 2021 09:28:39 +0200 Subject: [PATCH 151/160] Fix buggy kryo instantiation --- .../recheck/persistence/bin/KryoPersistence.java | 5 +++-- .../java/de/retest/recheck/ui/PathElement.java | 6 +++++- .../recheck/ui/diff/AttributesDifference.java | 5 +++-- .../de/retest/recheck/ui/diff/StateDifference.java | 3 +-- .../recheck/ui/diff/meta/MetadataDifference.java | 14 ++++---------- 5 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java index 1db37eb3b..e38b1b68b 100644 --- a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java @@ -23,7 +23,8 @@ import com.esotericsoftware.kryo.kryo5.Registration; import com.esotericsoftware.kryo.kryo5.io.Input; import com.esotericsoftware.kryo.kryo5.io.Output; -import com.esotericsoftware.kryo.kryo5.objenesis.strategy.StdInstantiatorStrategy; +import com.esotericsoftware.kryo.kryo5.objenesis.strategy.SerializingInstantiatorStrategy; +import com.esotericsoftware.kryo.kryo5.util.DefaultInstantiatorStrategy; import com.google.common.collect.TreeMultiset; import de.retest.recheck.persistence.IncompatibleReportVersionException; @@ -76,7 +77,7 @@ public KryoPersistence() { private static Kryo createKryo() { final Kryo kryo = new Kryo(); - kryo.setInstantiatorStrategy( new StdInstantiatorStrategy() ); + kryo.setInstantiatorStrategy( new DefaultInstantiatorStrategy( new SerializingInstantiatorStrategy() ) ); kryo.setReferences( true ); kryo.setRegistrationRequired( false ); // TODO remove, see #836 diff --git a/src/main/java/de/retest/recheck/ui/PathElement.java b/src/main/java/de/retest/recheck/ui/PathElement.java index 02cf7e4e9..8831fc1ac 100644 --- a/src/main/java/de/retest/recheck/ui/PathElement.java +++ b/src/main/java/de/retest/recheck/ui/PathElement.java @@ -1,6 +1,10 @@ package de.retest.recheck.ui; -public class PathElement { +import java.io.Serializable; + +public class PathElement implements Serializable { + + private static final long serialVersionUID = 1L; private final String elementName; diff --git a/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java b/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java index e2862ab74..6d79a6f02 100644 --- a/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/AttributesDifference.java @@ -1,5 +1,6 @@ package de.retest.recheck.ui.diff; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -27,11 +28,11 @@ public class AttributesDifference implements Difference { private AttributesDifference() { // for JAXB differenceId = null; - differences = null; + differences = new ArrayList<>(); } public AttributesDifference( final List differences ) { - this.differences = Collections.unmodifiableList( differences ); + this.differences = differences; differenceId = AttributeDifference.getSumIdentifier( differences ); } diff --git a/src/main/java/de/retest/recheck/ui/diff/StateDifference.java b/src/main/java/de/retest/recheck/ui/diff/StateDifference.java index ef448762d..04d2877c6 100644 --- a/src/main/java/de/retest/recheck/ui/diff/StateDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/StateDifference.java @@ -1,7 +1,6 @@ package de.retest.recheck.ui.diff; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -34,7 +33,7 @@ private StateDifference() { public StateDifference( final List differences ) { differenceId = getSumIdentifier( differences ); - this.differences = Collections.unmodifiableList( differences ); + this.differences = differences; } @Override diff --git a/src/main/java/de/retest/recheck/ui/diff/meta/MetadataDifference.java b/src/main/java/de/retest/recheck/ui/diff/meta/MetadataDifference.java index 028fdd3a6..b7ac379a1 100644 --- a/src/main/java/de/retest/recheck/ui/diff/meta/MetadataDifference.java +++ b/src/main/java/de/retest/recheck/ui/diff/meta/MetadataDifference.java @@ -1,7 +1,6 @@ package de.retest.recheck.ui.diff.meta; import java.io.Serializable; -import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashSet; @@ -10,15 +9,12 @@ import java.util.TreeSet; import java.util.function.Consumer; -import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; -import lombok.RequiredArgsConstructor; import lombok.ToString; @ToString @EqualsAndHashCode -@RequiredArgsConstructor( access = AccessLevel.PRIVATE ) public final class MetadataDifference implements Iterable, Serializable { private static final long serialVersionUID = 1L; @@ -26,11 +22,7 @@ public final class MetadataDifference implements Iterable differences; - - private MetadataDifference() { - this( Collections.emptySet() ); - } + private final Set differences = new LinkedHashSet<>(); public static MetadataDifference empty() { return EMPTY; @@ -43,7 +35,9 @@ public static MetadataDifference of( final Set differ final Set unique = new TreeSet<>( Comparator.comparing( MetadataElementDifference::getKey ) ); unique.addAll( differences ); - return new MetadataDifference( new LinkedHashSet<>( unique ) ); + final MetadataDifference metadataDifference = new MetadataDifference(); + metadataDifference.differences.addAll( unique ); + return metadataDifference; } public boolean isEmpty() { From d2f595586d3f7b1469430cf87c439bf6319f35cf Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Tue, 1 Jun 2021 09:29:42 +0200 Subject: [PATCH 152/160] Register more classes for kryo #836 --- .../persistence/bin/KryoPersistence.java | 17 +---- .../recheck/persistence/bin/KryoRegister.java | 65 +++++++++++++++++++ 2 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 src/main/java/de/retest/recheck/persistence/bin/KryoRegister.java diff --git a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java index e38b1b68b..df9f62f4c 100644 --- a/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java +++ b/src/main/java/de/retest/recheck/persistence/bin/KryoPersistence.java @@ -11,7 +11,6 @@ import java.nio.file.NoSuchFileException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -20,19 +19,15 @@ import org.apache.commons.io.FileUtils; import com.esotericsoftware.kryo.kryo5.Kryo; -import com.esotericsoftware.kryo.kryo5.Registration; import com.esotericsoftware.kryo.kryo5.io.Input; import com.esotericsoftware.kryo.kryo5.io.Output; import com.esotericsoftware.kryo.kryo5.objenesis.strategy.SerializingInstantiatorStrategy; import com.esotericsoftware.kryo.kryo5.util.DefaultInstantiatorStrategy; -import com.google.common.collect.TreeMultiset; import de.retest.recheck.persistence.IncompatibleReportVersionException; import de.retest.recheck.persistence.Persistable; import de.retest.recheck.persistence.Persistence; -import de.retest.recheck.report.SuiteReplayResult; import de.retest.recheck.report.TestReport; -import de.retest.recheck.ui.review.GoldenMasterSource; import de.retest.recheck.util.FileUtil; import de.retest.recheck.util.VersionProvider; import lombok.extern.slf4j.Slf4j; @@ -80,16 +75,8 @@ private static Kryo createKryo() { kryo.setInstantiatorStrategy( new DefaultInstantiatorStrategy( new SerializingInstantiatorStrategy() ) ); kryo.setReferences( true ); - kryo.setRegistrationRequired( false ); // TODO remove, see #836 - - kryo.register( TestReport.class ); - kryo.register( GoldenMasterSource.class ); - kryo.register( SuiteReplayResult.class ); - kryo.register( ArrayList.class ); - // TODO add more, see #836 - - final Registration registration = kryo.register( TreeMultiset.class ); - registration.setInstantiator( TreeMultiset::create ); + KryoRegister.addRecheckClasses( kryo ); + KryoRegister.addUsedJdkClasses( kryo ); return kryo; } diff --git a/src/main/java/de/retest/recheck/persistence/bin/KryoRegister.java b/src/main/java/de/retest/recheck/persistence/bin/KryoRegister.java new file mode 100644 index 000000000..1f38b2c85 --- /dev/null +++ b/src/main/java/de/retest/recheck/persistence/bin/KryoRegister.java @@ -0,0 +1,65 @@ +package de.retest.recheck.persistence.bin; + +import com.esotericsoftware.kryo.kryo5.Kryo; + +public class KryoRegister { + + public static void addRecheckClasses( final Kryo kryo ) { + kryo.setRegistrationRequired( false ); // TODO remove, see #836 + kryo.setWarnUnregisteredClasses( true ); + + kryo.register( de.retest.recheck.ui.Path.class ); + kryo.register( de.retest.recheck.ui.PathElement.class ); + kryo.register( de.retest.recheck.ui.image.Screenshot.class ); + kryo.register( de.retest.recheck.ui.image.Screenshot.ImageType.class ); + kryo.register( de.retest.recheck.ui.review.GoldenMasterSource.class ); + + kryo.register( de.retest.recheck.ui.descriptors.GroundState.class ); + kryo.register( de.retest.recheck.ui.descriptors.RootElement.class ); + kryo.register( de.retest.recheck.ui.descriptors.Attributes.class ); + kryo.register( de.retest.recheck.ui.descriptors.Element.class ); + kryo.register( de.retest.recheck.ui.descriptors.IdentifyingAttributes.class ); + kryo.register( de.retest.recheck.ui.descriptors.OutlineAttribute.class ); + kryo.register( de.retest.recheck.ui.descriptors.PathAttribute.class ); + kryo.register( de.retest.recheck.ui.descriptors.SuffixAttribute.class ); + kryo.register( de.retest.recheck.ui.descriptors.TextAttribute.class ); + kryo.register( de.retest.recheck.ui.descriptors.StringAttribute.class ); + + kryo.register( de.retest.recheck.ui.diff.StateDifference.class ); + kryo.register( de.retest.recheck.ui.diff.RootElementDifference.class ); + kryo.register( de.retest.recheck.ui.diff.ElementDifference.class ); + kryo.register( de.retest.recheck.ui.diff.IdentifyingAttributesDifference.class ); + kryo.register( de.retest.recheck.ui.diff.AttributeDifference.class ); + kryo.register( de.retest.recheck.ui.diff.AttributesDifference.class ); + kryo.register( de.retest.recheck.ui.diff.meta.MetadataDifference.class ); + kryo.register( de.retest.recheck.ui.diff.meta.MetadataElementDifference.class ); + + kryo.register( de.retest.recheck.report.TestReport.class ); + kryo.register( de.retest.recheck.report.SuiteReplayResult.class ); + kryo.register( de.retest.recheck.report.TestReplayResult.class ); + kryo.register( de.retest.recheck.report.ActionReplayResult.class ); + + // TODO add more, see #836 + } + + public static void addUsedJdkClasses( final Kryo kryo ) { + kryo.register( java.util.ArrayList.class ); + kryo.register( java.util.Date.class ); + kryo.register( java.util.TreeMap.class ); + kryo.register( java.util.HashSet.class ); + kryo.register( java.util.LinkedHashSet.class ); + + kryo.register( java.util.Collections.EMPTY_LIST.getClass() ); + kryo.register( java.util.Collections.EMPTY_MAP.getClass() ); + kryo.register( java.util.Collections.EMPTY_SET.getClass() ); + + kryo.register( byte[].class ); + kryo.register( java.awt.Rectangle.class ); + + kryo.register( com.google.common.collect.TreeMultiset.class ) + .setInstantiator( com.google.common.collect.TreeMultiset::create ); + + // TODO add more, see #836 + } + +} From 51fcee93e71872d274641b2cba7d1048329daa0a Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 2 Jun 2021 09:01:34 +0200 Subject: [PATCH 153/160] Use Xlint:all for compiler --- pom.xml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 9af3dc0ff..38b6ec8ca 100644 --- a/pom.xml +++ b/pom.xml @@ -290,10 +290,7 @@ ${java.version} ${java.version} - - - - + -Xlint:all @@ -303,7 +300,7 @@ ${maven.surefire.and.failsafe.version} - + %regex[.*Test.class] From 78f18266510d9f521a55bc79bf9a8849f7f517ee Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 2 Jun 2021 09:02:13 +0200 Subject: [PATCH 154/160] Allow system props and user dir as config source --- CHANGELOG.md | 1 + src/main/java/de/retest/recheck/RecheckProperties.java | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8581aae5..d4e8e4514 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ Table of Contents ### New Features +* The recheck configuration is now additionally read from environment variables and from file `${user.home}/.retest/retest.properties`. * Metadata differences are now filterable via the recheck.ignore. New `volatile-metadata.filter` and `metadata.filter` filters have been added, where the first one filters metadata which is added for diagnosing purposes and too verbose to be displayed upon every change and the latter filters _all_ metadata. They can be imported with `import: volatile-metadata.filter` and `import: metadata.filter` in `recheck.ignore`. * Add `exclude()` filter expression to allow child elements to be excluded. Ignoring an element `matcher: type=body, exclude(matcher: type=button)` will ignore everything below the `body` element but still capture changes for `button` elements. * Add a `disableReportUpload` method. diff --git a/src/main/java/de/retest/recheck/RecheckProperties.java b/src/main/java/de/retest/recheck/RecheckProperties.java index 2197a00d7..be97f3eed 100644 --- a/src/main/java/de/retest/recheck/RecheckProperties.java +++ b/src/main/java/de/retest/recheck/RecheckProperties.java @@ -13,7 +13,8 @@ import de.retest.recheck.persistence.FileOutputFormat; @LoadPolicy( LoadType.MERGE ) -@Sources( { "system:properties", "file:${projectroot}/.retest/retest.properties" } ) +@Sources( { "system:properties", "system:env", "file:${projectroot}/.retest/retest.properties", + "file:${user.home}/.retest/retest.properties" } ) public interface RecheckProperties extends Reloadable { /* From 6459eb1e3c5457b4ffa9a21f1a74a1e5e19bb253 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Wed, 2 Jun 2021 10:22:41 +0200 Subject: [PATCH 155/160] Fix wrong checkout token on release actions --- .github/workflows/release-feature-start.yml | 2 ++ .github/workflows/release-hotfix-start.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/release-feature-start.yml b/.github/workflows/release-feature-start.yml index 1f18fba1a..9781c54d8 100644 --- a/.github/workflows/release-feature-start.yml +++ b/.github/workflows/release-feature-start.yml @@ -21,6 +21,8 @@ jobs: run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" - uses: actions/checkout@v2 + with: + token: ${{ secrets.TRIGGER_ACTIONS_GITHUB_TOKEN }} - uses: actions/setup-java@v1 with: diff --git a/.github/workflows/release-hotfix-start.yml b/.github/workflows/release-hotfix-start.yml index f4381f3cd..831d32fa5 100644 --- a/.github/workflows/release-hotfix-start.yml +++ b/.github/workflows/release-hotfix-start.yml @@ -21,6 +21,8 @@ jobs: run: "[[ $(echo ${{ github.event.inputs.approval }} | tr 'a-z' 'A-Z') == 'YES' ]]" - uses: actions/checkout@v2 + with: + token: ${{ secrets.TRIGGER_ACTIONS_GITHUB_TOKEN }} - uses: actions/setup-java@v1 with: From 36ac8db625c0173fd1e5571be9097127d0fa7b4f Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 4 Jun 2021 11:08:53 +0200 Subject: [PATCH 156/160] Faster equals, because hashCode is cached --- .../java/de/retest/recheck/ui/descriptors/Element.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/retest/recheck/ui/descriptors/Element.java b/src/main/java/de/retest/recheck/ui/descriptors/Element.java index 3c1790717..6c88beb1b 100644 --- a/src/main/java/de/retest/recheck/ui/descriptors/Element.java +++ b/src/main/java/de/retest/recheck/ui/descriptors/Element.java @@ -224,11 +224,7 @@ public Object getAttributeValue( final String attributeName ) { } final Object ordinaryAttribute = getAttributes().get( attributeName ); - if ( ordinaryAttribute != null ) { - return ordinaryAttribute; - } - - return null; + return ordinaryAttribute; } public String getRetestId() { @@ -285,6 +281,9 @@ public boolean equals( final Object obj ) { if ( obj == null || getClass() != obj.getClass() ) { return false; } + if ( this.hashCode() != obj.hashCode() ) { + return false; + } final Element other = (Element) obj; if ( !identifyingAttributes.equals( other.identifyingAttributes ) ) { return false; From 62ad9029794aab2d0883335aafb831371d3e54cd Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 4 Jun 2021 11:09:23 +0200 Subject: [PATCH 157/160] Fix wrong github action trigger for deploy --- .github/workflows/deploy-release.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-release.yml b/.github/workflows/deploy-release.yml index 39e598abc..5238e7698 100644 --- a/.github/workflows/deploy-release.yml +++ b/.github/workflows/deploy-release.yml @@ -1,8 +1,9 @@ name: Deploy releases on: - create: - tags: v* + push: + tags: + - 'v*' env: MVN_ARGS: --batch-mode --errors --fail-fast --no-transfer-progress From 6783db4fa89373148742a8d534300e49327dc09f Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 4 Jun 2021 11:29:18 +0200 Subject: [PATCH 158/160] Better alignment for pseudo elements --- .../de/retest/recheck/ui/diff/Alignment.java | 23 +++++-- .../ui/diff/AlignmentPseudoElementHack.java | 66 +++++++++++++++++++ 2 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java diff --git a/src/main/java/de/retest/recheck/ui/diff/Alignment.java b/src/main/java/de/retest/recheck/ui/diff/Alignment.java index fa794191b..9b9dc5360 100644 --- a/src/main/java/de/retest/recheck/ui/diff/Alignment.java +++ b/src/main/java/de/retest/recheck/ui/diff/Alignment.java @@ -22,7 +22,7 @@ @Slf4j public final class Alignment { - private static final double ELEMENT_MATCH_THRESHOLD = RecheckProperties.getInstance().elementMatchThreshold(); + static final double ELEMENT_MATCH_THRESHOLD = RecheckProperties.getInstance().elementMatchThreshold(); /** * A mapping from each child element (key) to its parent (value), based on the expected elements. @@ -35,30 +35,35 @@ public final class Alignment { private final Map alignment; + AlignmentPseudoElementHack pseudoElementHack = new AlignmentPseudoElementHack(); + public static Alignment createAlignment( final Element expected, final Element actual ) { return new Alignment( expected, actual ); } private Alignment( final Element expected, final Element actual ) { - final List expectedElements = flattenLeafElements( expected, expectedChildParentMapping ); - final List actualElements = flattenLeafElements( actual, actualChildParentMapping ); + final List expectedElements = + flattenLeafElements( expected, expectedChildParentMapping, pseudoElementHack.expectedPseudoElementsMapping ); + final List actualElements = + flattenLeafElements( actual, actualChildParentMapping, pseudoElementHack.actualPseudoElementsMapping ); log.debug( "Creating assignment of old to new elements, trying to find differences. We are comparing {} with {} elements.", expectedElements.size(), actualElements.size() ); alignment = createAlignment( expectedElements, toIdentityMapping( actualElements ) ); addParentAlignment(); + pseudoElementHack.alignPseudoElements( alignment ); } private static List flattenLeafElements( final Element element, - final Map childParentMapping ) { + final Map childParentMapping, final Map pseudoElementsMapping ) { final List flattened = new ArrayList<>(); for ( final Element childElement : element.getContainedElements() ) { childParentMapping.put( childElement, element ); - if ( !childElement.hasContainedElements() ) { + if ( AlignmentPseudoElementHack.isLeaf( childElement, pseudoElementsMapping ) ) { flattened.add( childElement ); } else { - flattened.addAll( flattenLeafElements( childElement, childParentMapping ) ); + flattened.addAll( flattenLeafElements( childElement, childParentMapping, pseudoElementsMapping ) ); } } @@ -151,11 +156,15 @@ private static NavigableSet getBestMatches( final Element expected, private void addParentAlignment() { final Map alignmentCopy = new HashMap<>( alignment ); for ( final Map.Entry alignmentPair : alignmentCopy.entrySet() ) { + final List expectedParents = getParents( alignmentPair.getKey(), expectedChildParentMapping ); final List actualParents = getParents( alignmentPair.getValue(), actualChildParentMapping ); + final Map parentAlignment = createAlignment( expectedParents, toIdentityMapping( actualParents ) ); + for ( final Map.Entry parentAlignmentPair : parentAlignment.entrySet() ) { + final Element aligned = alignment.get( parentAlignmentPair.getKey() ); if ( aligned == null ) { alignment.put( parentAlignmentPair.getKey(), parentAlignmentPair.getValue() ); @@ -186,7 +195,7 @@ static Map toIdentityMapping( final List actualElemen return actualElements.stream().collect( toMap( Function.identity(), Function.identity() ) ); } - private static double match( final Element expected, final Element bestMatch ) { + static double match( final Element expected, final Element bestMatch ) { return expected.getIdentifyingAttributes().match( bestMatch.getIdentifyingAttributes() ); } diff --git a/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java b/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java new file mode 100644 index 000000000..f51736515 --- /dev/null +++ b/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java @@ -0,0 +1,66 @@ +package de.retest.recheck.ui.diff; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import de.retest.recheck.ui.descriptors.Element; + +/** + * Hack to fix pseudo element handling. + * + * This class contains knowledge about HTML Pseudo Elements, but this should be in recheck-web only. + */ +class AlignmentPseudoElementHack { + + /** + * A mapping from each pseudo element (key) to its parent (value), based on the expected elements. + */ + final Map expectedPseudoElementsMapping = new HashMap<>(); + /** + * A mapping from each child element (key) to its parent (value), based on the actual elements. + */ + final Map actualPseudoElementsMapping = new HashMap<>(); + + void alignPseudoElements( final Map alignment ) { + expectedPseudoElementsMapping.forEach( ( expectedPseudo, expectedParent ) -> { + + final Element actualParent = alignment.get( expectedParent ); + if ( actualParent != null ) { + + actualPseudoElementsMapping.entrySet().stream() // + .filter( entry -> entry.getValue().equals( actualParent ) ) // + .map( Entry::getKey ) // + // here we have a list of candidates based on parent assignment + .map( actualPseudoCandidate -> match( expectedPseudo, actualPseudoCandidate ) ) // + .filter( match -> match.similarity > Alignment.ELEMENT_MATCH_THRESHOLD ) // + .sorted().findFirst() // + .ifPresent( m -> { + alignment.put( expectedPseudo, m.element ); + } ); + + } + + } ); + } + + static boolean isLeaf( final Element element, final Map pseudoElementsMapping ) { + boolean isLeaf = true; + for ( final Element child : element.getContainedElements() ) { + if ( isPseudoElement( child ) ) { + pseudoElementsMapping.put( child, element ); + } else { + isLeaf = false; + } + } + return isLeaf; + } + + private static boolean isPseudoElement( final Element e ) { + return e.getIdentifyingAttributes().getType().startsWith( "::" ); + } + + private static Match match( final Element expected, final Element actualCandidate ) { + return Match.of( Alignment.match( expected, actualCandidate ), actualCandidate ); + } +} From 71a5d05608d7e0c3862fdb59a6cbe42b0c103335 Mon Sep 17 00:00:00 2001 From: Martin Vietz Date: Fri, 4 Jun 2021 12:01:37 +0200 Subject: [PATCH 159/160] Better name for isLeafAndPrepareMapping --- src/main/java/de/retest/recheck/ui/diff/Alignment.java | 2 +- .../de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/retest/recheck/ui/diff/Alignment.java b/src/main/java/de/retest/recheck/ui/diff/Alignment.java index 9b9dc5360..2833a88bd 100644 --- a/src/main/java/de/retest/recheck/ui/diff/Alignment.java +++ b/src/main/java/de/retest/recheck/ui/diff/Alignment.java @@ -60,7 +60,7 @@ private static List flattenLeafElements( final Element element, for ( final Element childElement : element.getContainedElements() ) { childParentMapping.put( childElement, element ); - if ( AlignmentPseudoElementHack.isLeaf( childElement, pseudoElementsMapping ) ) { + if ( AlignmentPseudoElementHack.isLeafAndPrepareMapping( childElement, pseudoElementsMapping ) ) { flattened.add( childElement ); } else { flattened.addAll( flattenLeafElements( childElement, childParentMapping, pseudoElementsMapping ) ); diff --git a/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java b/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java index f51736515..f8ca4a343 100644 --- a/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java +++ b/src/main/java/de/retest/recheck/ui/diff/AlignmentPseudoElementHack.java @@ -44,7 +44,7 @@ void alignPseudoElements( final Map alignment ) { } ); } - static boolean isLeaf( final Element element, final Map pseudoElementsMapping ) { + static boolean isLeafAndPrepareMapping( final Element element, final Map pseudoElementsMapping ) { boolean isLeaf = true; for ( final Element child : element.getContainedElements() ) { if ( isPseudoElement( child ) ) { From 05fe5ba3dd331f0ea0bf0ff94b7352013148ad78 Mon Sep 17 00:00:00 2001 From: retest release github action Date: Thu, 24 Jun 2021 14:58:45 +0000 Subject: [PATCH 160/160] ci: Update for next development version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 38b6ec8ca..9f1923a41 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ de.retest recheck - 1.12.0-SNAPSHOT + 1.12.0 recheck Replace traditional assertions with a single check.