diff --git a/build.gradle b/build.gradle index 7013bfb..79129aa 100644 --- a/build.gradle +++ b/build.gradle @@ -15,12 +15,7 @@ repositories { configurations { errorproneJavac - conformanceTestAssertions { - attributes { - attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, DocsType.SOURCES)) - } - } - conformanceTestDeps + conformanceTestSuite } ext { @@ -46,19 +41,8 @@ dependencies { testImplementation libs.jspecify.conformanceTestFramework testRuntimeOnly libs.jsr305 // jsr305 annotations are in some of the samples - conformanceTestAssertions("org.jspecify.conformance:conformance-tests:0.0.0-SNAPSHOT") { - capabilities { - // Depend on the assertion sources - requireCapability "org.jspecify.conformance:conformance-tests-assertions" - } - } - - conformanceTestDeps("org.jspecify.conformance:conformance-tests:0.0.0-SNAPSHOT") { - capabilities { - // Depend on the assertion dependencies - requireCapability "org.jspecify.conformance:conformance-tests-deps" - } - } + // TODO: Depend on a group:artifact:version rather than a file. + conformanceTestSuite files("${jspecify.projectDir}/conformance-tests/build/distributions/conformance-tests-0.0.0-SNAPSHOT.zip") errorproneJavac libs.errorProne.javac errorprone libs.errorProne.core @@ -132,31 +116,38 @@ tasks.register('jspecifySamplesTest', Test) { inputs.files("${jspecify.projectDir}/samples") } -tasks.register('unzipConformanceTestAssertions', Copy) { - dependsOn configurations.conformanceTestAssertions - from zipTree(configurations.conformanceTestAssertions.singleFile) +tasks.register('unzipConformanceTestSuite', Copy) { + // TODO: Don't explicitly depend on an included build's task. + dependsOn jspecify.task(':conformance-tests:build') + dependsOn configurations.conformanceTestSuite + from zipTree(configurations.conformanceTestSuite.singleFile) into layout.buildDirectory.dir("conformanceTests") } tasks.register('conformanceTests', Test) { group = 'verification' - dependsOn 'unzipConformanceTestAssertions', configurations.conformanceTestDeps include '**/ConformanceTest.class' // Conformance tests - def conformanceTestsDir = tasks.named('unzipConformanceTestAssertions', Copy).get().destinationDir - inputs.dir(conformanceTestsDir) + inputs.files(unzipConformanceTestSuite) inputs.files("tests/ConformanceTest-report.txt") - inputs.files(configurations.conformanceTestDeps) - systemProperty("JSpecifyConformanceTest.inputs", "$conformanceTestsDir/org/jspecify/conformance/tests") - systemProperty("JSpecifyConformanceTest.report", "tests/ConformanceTest-report.txt") - systemProperty("JSpecifyConformanceTest.deps", configurations.conformanceTestDeps.join(":")) + doFirst { + systemProperties([ + "JSpecifyConformanceTest.inputs": "${unzipConformanceTestSuite.destinationDir}/assertions/org/jspecify/conformance/tests", + "JSpecifyConformanceTest.report": "tests/ConformanceTest-report.txt", + "JSpecifyConformanceTest.deps" : fileTree("${unzipConformanceTestSuite.destinationDir}/deps").join(":") + ]) + } // Conformance tests run on the samples directory inputs.dir("${jspecify.projectDir}/samples") inputs.files("tests/ConformanceTestOnSamples-report.txt") - systemProperty("JSpecifyConformanceTest.samples.inputs", "${jspecify.projectDir}/samples") - systemProperty("JSpecifyConformanceTest.samples.report", "tests/ConformanceTestOnSamples-report.txt") + doFirst { + systemProperties([ + "JSpecifyConformanceTest.samples.inputs": "${jspecify.projectDir}/samples", + "JSpecifyConformanceTest.samples.report": "tests/ConformanceTestOnSamples-report.txt" + ]) + } } tasks.named('check').configure { diff --git a/src/test/java/tests/ConformanceTest.java b/src/test/java/tests/ConformanceTest.java index 4efae68..052b3e4 100644 --- a/src/test/java/tests/ConformanceTest.java +++ b/src/test/java/tests/ConformanceTest.java @@ -97,7 +97,7 @@ public final class ConformanceTest { private static final ImmutableList TEST_DEPS = Stream.ofNullable(System.getProperty("JSpecifyConformanceTest.deps")) - .flatMap(Splitter.on(':')::splitToStream) + .flatMap(Splitter.on(':').trimResults().omitEmptyStrings()::splitToStream) .map(Paths::get) .collect(toImmutableList()); diff --git a/tests/ConformanceTest-report.txt b/tests/ConformanceTest-report.txt index 5ddbf4d..65fadef 100644 --- a/tests/ConformanceTest-report.txt +++ b/tests/ConformanceTest-report.txt @@ -1,4 +1,4 @@ -# 10 pass; 6 fail; 16 total; 62.5% score +# 12 pass; 6 fail; 18 total; 66.7% score PASS: Basic.java:26 test:expression-type:Object?:nullable PASS: Basic.java:26 test:sink-type:Object!:return PASS: Basic.java:26 test:cannot-convert:Object? to Object! @@ -15,3 +15,5 @@ FAIL: Irrelevant.java:43 test:irrelevant-annotation:Nullable FAIL: Irrelevant.java:47 test:irrelevant-annotation:NullMarked FAIL: Irrelevant.java:49 test:irrelevant-annotation:NullUnmarked FAIL: Irrelevant.java: no unexpected facts +PASS: UsesDep.java:24 test:cannot-convert:null? to Dep* +PASS: UsesDep.java: no unexpected facts