diff --git a/build.gradle b/build.gradle index cbfeb75..5338701 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ dependencies { compileOnly 'com.android.tools.build:gradle:7.4.0' compileOnly 'org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21' + testImplementation 'io.github.java-diff-utils:java-diff-utils:4.15' testImplementation('org.spockframework:spock-core:2.3-groovy-3.0') { exclude group: 'org.codehaus.groovy' } diff --git a/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/PrintAnimalsnifferSourceInfoTask.groovy b/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/PrintAnimalsnifferSourceInfoTask.groovy index 41d2a37..5ab1640 100644 --- a/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/PrintAnimalsnifferSourceInfoTask.groovy +++ b/src/main/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/PrintAnimalsnifferSourceInfoTask.groovy @@ -245,7 +245,7 @@ class PrintAnimalsnifferSourceInfoTask extends DefaultTask { println title(shift, msg) notCoveredByKotlin.each { println String.format(buildPrefix(shift + 1) + '%-70s (%s)', - it.canonicalPath.replace(getRootPath(rootProjectDir), ''), kotlinIdx[it]) + it.canonicalPath.replace(getRootPath(rootProjectDir), '').replace('\\', '/'), kotlinIdx[it]) } } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/AbstractKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/AbstractKitTest.groovy index b9ebb78..3516621 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/AbstractKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/AbstractKitTest.groovy @@ -1,11 +1,15 @@ package ru.vyarus.gradle.plugin.animalsniffer +import com.github.difflib.text.DiffRow +import com.github.difflib.text.DiffRowGenerator import org.apache.tools.ant.taskdefs.condition.Os import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import spock.lang.Specification import spock.lang.TempDir +import java.util.function.Function + /** * Base class for Gradle TestKit based tests. * Useful for full-cycle and files manipulation testing. @@ -99,6 +103,71 @@ abstract class AbstractKitTest extends Specification { runner } + public static final String RESET = '\u001B[0m' + public static final String RED = '\u001B[31m' + public static final String GREEN = '\u001B[32m' + public static final String YELLOW = '\u001B[33m' + public static final String BLUE = '\u001B[34m' + public static final String PURPLE = '\u001B[35m' + public static final String CYAN = '\u001B[36m' + + private static final String NL = '\n' + + protected boolean equalWithDiff(String expected, String actual) { + List original = Arrays.asList(expected.split(NL)) + List revised = Arrays.asList(actual.split(NL)) + + final String plus = '+' + final String minus = '-' + + DiffRowGenerator generator = DiffRowGenerator.create() + .showInlineDiffs(true) + .mergeOriginalRevised(true) + .ignoreWhiteSpaces(true) + .inlineDiffByWord(true) + .lineNormalizer { it } // to disable html escapes + .equalizer(DiffRowGenerator.IGNORE_WHITESPACE_EQUALIZER) + .oldTag({ it ? minus + RED : RESET + minus } as Function) + .newTag({ it ? plus + GREEN : RESET + plus } as Function) + .build() + List rows = generator.generateDiffRows(original, revised) + List showRows = [] + int last = -1 + for (int i = 0; i < rows.size(); i++) { + DiffRow row = rows.get(i) + if (DiffRow.Tag.EQUAL != row.tag) { + // show 2 rows before + int prev = Math.max(last + 1, i - 2) + for (int j = prev; j <= i; j++) { + showRows.add(j) + } + last = i + } + } + + StringBuilder res = new StringBuilder() + int prev = -1 + for (int i : showRows) { + DiffRow row = rows.get(i) + if (prev > 0 && prev != i - 1) { + // between blocks + res.append(NL) + } + res.append(String.format('%4s | ', i)).append(row.oldLine).append(NL) + prev = i + } + + if (!res.empty) { + println "\n!!!!!!!!! Strings difference: \n\n" + res.toString() + } + + return res.empty + } + + protected String unifyStringLinSlashes(String input) { + return unifyString(input).replace('\\', '/') + } + protected String unifyString(String input) { return input // cleanup win line break for simpler comparisons diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/cache/configuration/UpstreamDebugOptionConfigurationCacheKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/cache/configuration/UpstreamDebugOptionConfigurationCacheKitTest.groovy index 45125b2..b44eac3 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/cache/configuration/UpstreamDebugOptionConfigurationCacheKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/cache/configuration/UpstreamDebugOptionConfigurationCacheKitTest.groovy @@ -48,7 +48,7 @@ class UpstreamDebugOptionConfigurationCacheKitTest extends AbstractAndroidKitTes then: "task successful" result.task(':animalsnifferMain').outcome == TaskOutcome.SUCCESS result.output.contains('2 AnimalSniffer violations were found in 1 files') - result.output.replace('\r', '').contains('\tsignatures:\n' + + unifyStringLinSlashes(result.output).contains('\tsignatures:\n' + '\t\tjava16-sun-1.0.signature\n' + '\n' + '\tsources:\n' + @@ -134,7 +134,7 @@ class UpstreamDebugOptionConfigurationCacheKitTest extends AbstractAndroidKitTes result.task(':animalsnifferDebug').outcome == TaskOutcome.SUCCESS result.task(':animalsnifferRelease').outcome == TaskOutcome.SUCCESS result.output.contains('3 AnimalSniffer violations were found in 2 files') - result.output.replace('\r', '').contains('signatures:\n' + + unifyStringLinSlashes(result.output).contains('signatures:\n' + '\t\tjava18-1.0.signature\n' + '\t\tandroid-api-level-21-5.0.1_r2.signature\n' + '\n' + diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/AbstractDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/AbstractDebugKitTest.groovy index 98772b2..b8504ca 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/AbstractDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/AbstractDebugKitTest.groovy @@ -10,7 +10,7 @@ import ru.vyarus.gradle.plugin.animalsniffer.android.AbstractAndroidKitTest abstract class AbstractDebugKitTest extends AbstractAndroidKitTest { String extractReport(BuildResult result) { - String out = result.output.toString().replaceAll('\r', '') + String out = result.output int idx = out.indexOf('== [') if (idx > 0) { out = out.substring(idx) diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/GroovySourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/GroovySourcesDebugKitTest.groovy index ecfacb6..0f82b6a 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/GroovySourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/GroovySourcesDebugKitTest.groovy @@ -39,7 +39,7 @@ class GroovySourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation (no special groovy treatment)" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaModifiedSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaModifiedSourcesDebugKitTest.groovy index 9a1166a..664b410 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaModifiedSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaModifiedSourcesDebugKitTest.groovy @@ -52,7 +52,7 @@ class JavaModifiedSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaSourcesDebugKitTest.groovy index e17aaf4..125019d 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/JavaSourcesDebugKitTest.groovy @@ -39,7 +39,7 @@ class JavaSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } @@ -74,7 +74,7 @@ class JavaSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("lib") + equalWithDiff(extractReport(result), readReport("lib")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/KotlinSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/KotlinSourcesDebugKitTest.groovy index 2ef95bf..26cdeee 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/KotlinSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/KotlinSourcesDebugKitTest.groovy @@ -40,7 +40,7 @@ class KotlinSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/ScalaSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/ScalaSourcesDebugKitTest.groovy index cc1a7e9..dae7d72 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/ScalaSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/ScalaSourcesDebugKitTest.groovy @@ -39,7 +39,7 @@ class ScalaSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppJavaSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppJavaSourcesDebugKitTest.groovy index fa4c369..89d5f7e 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppJavaSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppJavaSourcesDebugKitTest.groovy @@ -67,7 +67,7 @@ class AndroidAppJavaSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppKotlinSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppKotlinSourcesDebugKitTest.groovy index 767a0b2..5c016dc 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppKotlinSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidAppKotlinSourcesDebugKitTest.groovy @@ -70,7 +70,7 @@ class AndroidAppKotlinSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibJavaSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibJavaSourcesDebugKitTest.groovy index de515c6..9f54337 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibJavaSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibJavaSourcesDebugKitTest.groovy @@ -65,7 +65,7 @@ class AndroidLibJavaSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibKotlinSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibKotlinSourcesDebugKitTest.groovy index 7e0a641..6f8abf8 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibKotlinSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/android/AndroidLibKotlinSourcesDebugKitTest.groovy @@ -66,7 +66,7 @@ class AndroidLibKotlinSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "report validation" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/custom/MultiplatformAndroidNoClasspathDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/custom/MultiplatformAndroidNoClasspathDebugKitTest.groovy index 2bb4dab..be33747 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/custom/MultiplatformAndroidNoClasspathDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/custom/MultiplatformAndroidNoClasspathDebugKitTest.groovy @@ -224,7 +224,7 @@ io.ktor.development=true then: "validate shared report" def report = extractReport(result) - report == readReport('shared') + equalWithDiff(report, readReport('shared')) !result.output.contains('WARN:') @@ -235,7 +235,7 @@ io.ktor.development=true result.task(':server:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate server report" - extractReport(result) == readReport('server') + equalWithDiff(extractReport(result), readReport('server')) !result.output.contains('WARN:') @@ -246,7 +246,7 @@ io.ktor.development=true result.task(':composeApp:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate compose report" - extractReport(result) == readReport('composeApp') + equalWithDiff(extractReport(result), readReport('composeApp')) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidAppSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidAppSourcesDebugKitTest.groovy index 4efc3ee..06715bc 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidAppSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidAppSourcesDebugKitTest.groovy @@ -82,7 +82,7 @@ class MultiplatformAndroidAppSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate report" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidLibSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidLibSourcesDebugKitTest.groovy index cf0601d..1459611 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidLibSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformAndroidLibSourcesDebugKitTest.groovy @@ -80,7 +80,7 @@ class MultiplatformAndroidLibSourcesDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate report" - extractReport(result) == readReport("repo") + equalWithDiff(extractReport(result), readReport("repo")) !result.output.contains('WARN:') } } \ No newline at end of file diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformDebugKitTest.groovy index 9222640..9ec8358 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformDebugKitTest.groovy @@ -49,7 +49,7 @@ class MultiplatformDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate report" - extractReport(result) == readReport("nojava") + equalWithDiff(extractReport(result), readReport("nojava")) !result.output.contains('WARN:') } @@ -89,7 +89,7 @@ class MultiplatformDebugKitTest extends AbstractDebugKitTest { result.task(':printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate report" - extractReport(result) == readReport("java") + equalWithDiff(extractReport(result), readReport("java")) !result.output.contains('WARN:') } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsAndroidSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsAndroidSourcesDebugKitTest.groovy index 63d2d8b..3097695 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsAndroidSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsAndroidSourcesDebugKitTest.groovy @@ -210,7 +210,7 @@ io.ktor.development=true then: "validate shared report" def report = extractReport(result) - report == readReport('shared') + equalWithDiff(report, readReport('shared')) !result.output.contains('WARN:') @@ -221,7 +221,7 @@ io.ktor.development=true result.task(':server:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate server report" - extractReport(result) == readReport('server') + equalWithDiff(extractReport(result), readReport('server')) !result.output.contains('WARN:') @@ -232,7 +232,7 @@ io.ktor.development=true result.task(':composeApp:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate compose report" - extractReport(result) == readReport('composeApp') + equalWithDiff(extractReport(result), readReport('composeApp')) !result.output.contains('WARN:') } } diff --git a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsSourcesDebugKitTest.groovy b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsSourcesDebugKitTest.groovy index 0d88958..cde1e8a 100644 --- a/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsSourcesDebugKitTest.groovy +++ b/src/test/groovy/ru/vyarus/gradle/plugin/animalsniffer/debug/task/multiplatform/MultiplatformMultiplePlatformsSourcesDebugKitTest.groovy @@ -134,7 +134,7 @@ compose.desktop { result.task(':shared:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate shared report" - extractReport(result) == readReport("shared") + equalWithDiff(extractReport(result), readReport("shared")) !result.output.contains('WARN:') @@ -145,7 +145,7 @@ compose.desktop { result.task(':server:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate server report" - extractReport(result) == readReport("server") + equalWithDiff(extractReport(result), readReport("server")) !result.output.contains('WARN:') @@ -156,7 +156,7 @@ compose.desktop { result.task(':composeApp:printAnimalsnifferSourceInfo').outcome == TaskOutcome.SUCCESS then: "validate compose report" - extractReport(result) == readReport("composeApp") + equalWithDiff(extractReport(result), readReport("composeApp")) !result.output.contains('WARN:') }