use of org.gradle.testing.base.TestSuite in project gradle by gradle.
the class JacocoReportAggregationPlugin method apply.
@Override
public void apply(Project project) {
project.getPluginManager().apply("org.gradle.reporting-base");
project.getPluginManager().apply("jvm-ecosystem");
project.getPluginManager().apply("jacoco");
Configuration jacocoAggregation = project.getConfigurations().create(JACOCO_AGGREGATION_CONFIGURATION_NAME);
jacocoAggregation.setDescription("Collects project dependencies for purposes of JaCoCo coverage report aggregation");
jacocoAggregation.setVisible(false);
jacocoAggregation.setCanBeConsumed(false);
jacocoAggregation.setCanBeResolved(false);
ObjectFactory objects = project.getObjects();
Configuration sourceDirectoriesConf = project.getConfigurations().create("allCodeCoverageReportSourceDirectories");
sourceDirectoriesConf.setDescription("Supplies the source directories used to produce all aggregated JaCoCo coverage data reports");
sourceDirectoriesConf.extendsFrom(jacocoAggregation);
sourceDirectoriesConf.setVisible(false);
sourceDirectoriesConf.setCanBeConsumed(false);
sourceDirectoriesConf.setCanBeResolved(true);
sourceDirectoriesConf.attributes(attributes -> {
attributes.attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.class, Bundling.EXTERNAL));
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.class, Category.VERIFICATION));
attributes.attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, objects.named(VerificationType.class, VerificationType.MAIN_SOURCES));
});
ArtifactView sourceDirectories = sourceDirectoriesConf.getIncoming().artifactView(view -> {
view.componentFilter(id -> id instanceof ProjectComponentIdentifier);
view.lenient(true);
});
Configuration classDirectoriesConf = project.getConfigurations().create("allCodeCoverageReportClassDirectories");
classDirectoriesConf.extendsFrom(jacocoAggregation);
classDirectoriesConf.setDescription("Supplies the class directories used to produce all aggregated JaCoCo coverage data reports");
classDirectoriesConf.setVisible(false);
classDirectoriesConf.setCanBeConsumed(false);
classDirectoriesConf.setCanBeResolved(true);
ArtifactView classDirectories = classDirectoriesConf.getIncoming().artifactView(view -> {
view.componentFilter(id -> id instanceof ProjectComponentIdentifier);
});
ReportingExtension reporting = project.getExtensions().getByType(ReportingExtension.class);
reporting.getReports().registerBinding(JacocoCoverageReport.class, DefaultJacocoCoverageReport.class);
// iterate and configure each user-specified report, creating a <reportName>ExecutionData configuration for each
reporting.getReports().withType(JacocoCoverageReport.class).all(report -> {
// A resolvable configuration to collect JaCoCo coverage data; typically named "testCodeCoverageReportExecutionData"
Configuration executionDataConf = project.getConfigurations().create(report.getName() + "ExecutionData");
executionDataConf.extendsFrom(jacocoAggregation);
executionDataConf.setDescription(String.format("Supplies JaCoCo coverage data to the %s. External library dependencies may appear as resolution failures, but this is expected behavior.", report.getName()));
executionDataConf.setVisible(false);
executionDataConf.setCanBeConsumed(false);
executionDataConf.setCanBeResolved(true);
executionDataConf.attributes(attributes -> {
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.class, Category.VERIFICATION));
attributes.attributeProvider(TestSuiteType.TEST_SUITE_TYPE_ATTRIBUTE, report.getTestType().map(tt -> objects.named(TestSuiteType.class, tt)));
attributes.attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, objects.named(VerificationType.class, VerificationType.JACOCO_RESULTS));
});
report.getReportTask().configure(task -> {
Callable<FileCollection> executionData = () -> executionDataConf.getIncoming().artifactView(view -> {
view.componentFilter(id -> id instanceof ProjectComponentIdentifier);
view.lenient(true);
}).getFiles();
configureReportTaskInputs(task, classDirectories, sourceDirectories, executionData);
});
});
// convention for synthesizing reports based on existing test suites in "this" project
project.getPlugins().withId("jvm-test-suite", plugin -> {
// Depend on this project for aggregation
project.getDependencies().add(JACOCO_AGGREGATION_CONFIGURATION_NAME, project);
TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
ExtensiblePolymorphicDomainObjectContainer<TestSuite> testSuites = testing.getSuites();
testSuites.withType(JvmTestSuite.class).all(testSuite -> {
reporting.getReports().create(testSuite.getName() + "CodeCoverageReport", JacocoCoverageReport.class, report -> {
report.getTestType().convention(testSuite.getTestType());
});
});
});
}
use of org.gradle.testing.base.TestSuite in project gradle by gradle.
the class JacocoPlugin method configureCoverageDataElementsVariants.
private void configureCoverageDataElementsVariants(Project project) {
project.getPlugins().withType(JvmTestSuitePlugin.class, p -> {
final TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
final ExtensiblePolymorphicDomainObjectContainer<TestSuite> testSuites = testing.getSuites();
testSuites.withType(JvmTestSuite.class).configureEach(suite -> {
suite.getTargets().configureEach(target -> {
createCoverageDataVariant(project, suite, target);
});
});
});
}
use of org.gradle.testing.base.TestSuite in project gradle by gradle.
the class JvmTestSuitePlugin method configureTestDataElementsVariants.
private void configureTestDataElementsVariants(Project project) {
final TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
final ExtensiblePolymorphicDomainObjectContainer<TestSuite> testSuites = testing.getSuites();
testSuites.withType(JvmTestSuite.class).configureEach(suite -> {
suite.getTargets().configureEach(target -> {
addTestResultsVariant(project, suite, target);
});
});
}
use of org.gradle.testing.base.TestSuite in project gradle by gradle.
the class TestReportAggregationPlugin method apply.
@Override
public void apply(Project project) {
project.getPluginManager().apply("org.gradle.reporting-base");
final Configuration testAggregation = project.getConfigurations().create(TEST_REPORT_AGGREGATION_CONFIGURATION_NAME);
testAggregation.setDescription("A configuration to collect test execution results");
testAggregation.setVisible(false);
testAggregation.setCanBeConsumed(false);
testAggregation.setCanBeResolved(false);
ReportingExtension reporting = project.getExtensions().getByType(ReportingExtension.class);
reporting.getReports().registerBinding(AggregateTestReport.class, DefaultAggregateTestReport.class);
ObjectFactory objects = project.getObjects();
final DirectoryProperty testReportDirectory = objects.directoryProperty().convention(reporting.getBaseDirectory().dir(TestingBasePlugin.TESTS_DIR_NAME));
// prepare testReportDirectory with a reasonable default, but override with JavaPluginExtension#testReportDirectory if available
project.getPlugins().withId("java-base", plugin -> {
JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
testReportDirectory.convention(javaPluginExtension.getTestReportDir());
});
// iterate and configure each user-specified report, creating a <reportName>Results configuration for each
reporting.getReports().withType(AggregateTestReport.class).all(report -> {
// A resolvable configuration to collect test results; typically named "testResults"
Configuration testResultsConf = project.getConfigurations().create(report.getName() + "Results");
testResultsConf.extendsFrom(testAggregation);
testResultsConf.setDescription(String.format("Supplies test result data to the %s. External library dependencies may appear as resolution failures, but this is expected behavior.", report.getName()));
testResultsConf.setVisible(false);
testResultsConf.setCanBeConsumed(false);
testResultsConf.setCanBeResolved(true);
testResultsConf.attributes(attributes -> {
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.class, Category.VERIFICATION));
attributes.attributeProvider(TestSuiteType.TEST_SUITE_TYPE_ATTRIBUTE, report.getTestType().map(tt -> objects.named(TestSuiteType.class, tt)));
attributes.attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, objects.named(VerificationType.class, VerificationType.TEST_RESULTS));
});
report.getReportTask().configure(task -> {
Callable<FileCollection> testResults = () -> testResultsConf.getIncoming().artifactView(view -> {
view.componentFilter(id -> id instanceof ProjectComponentIdentifier);
view.lenient(true);
}).getFiles();
task.getTestResults().from(testResults);
task.getDestinationDirectory().convention(testReportDirectory.dir(report.getTestType().map(tt -> tt + "/aggregated-results")));
});
});
// convention for synthesizing reports based on existing test suites in "this" project
project.getPlugins().withId("jvm-test-suite", plugin -> {
// Depend on this project for aggregation
project.getDependencies().add(TEST_REPORT_AGGREGATION_CONFIGURATION_NAME, project);
TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
ExtensiblePolymorphicDomainObjectContainer<TestSuite> testSuites = testing.getSuites();
testSuites.withType(JvmTestSuite.class).all(testSuite -> {
reporting.getReports().create(testSuite.getName() + "AggregateTestReport", AggregateTestReport.class, report -> {
report.getTestType().convention(testSuite.getTestType());
});
});
});
}
use of org.gradle.testing.base.TestSuite in project gradle by gradle.
the class JvmTestSuitePlugin method apply.
@Override
public void apply(Project project) {
project.getPluginManager().apply("org.gradle.test-suite-base");
project.getPluginManager().apply("org.gradle.java-base");
JavaPluginExtension java = project.getExtensions().getByType(JavaPluginExtension.class);
TestingExtension testing = project.getExtensions().getByType(TestingExtension.class);
ExtensiblePolymorphicDomainObjectContainer<TestSuite> testSuites = testing.getSuites();
testSuites.registerBinding(JvmTestSuite.class, DefaultJvmTestSuite.class);
// TODO: Deprecate this behavior?
// Why would any Test task created need to use the test source set's classes?
project.getTasks().withType(Test.class).configureEach(test -> {
// The test task may have already been created but the test sourceSet may not exist yet.
// So defer looking up the java extension and sourceSet until the convention mapping is resolved.
// See https://github.com/gradle/gradle/issues/18622
test.getConventionMapping().map("testClassesDirs", () -> project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().findByName(SourceSet.TEST_SOURCE_SET_NAME).getOutput().getClassesDirs());
test.getConventionMapping().map("classpath", () -> project.getExtensions().getByType(JavaPluginExtension.class).getSourceSets().findByName(SourceSet.TEST_SOURCE_SET_NAME).getRuntimeClasspath());
test.getModularity().getInferModulePath().convention(java.getModularity().getInferModulePath());
});
testSuites.withType(JvmTestSuite.class).all(testSuite -> {
testSuite.getTestType().convention(getDefaultTestType(testSuite));
testSuite.getTargets().all(target -> {
target.getTestTask().configure(test -> {
test.getConventionMapping().map("testClassesDirs", () -> testSuite.getSources().getOutput().getClassesDirs());
test.getConventionMapping().map("classpath", () -> testSuite.getSources().getRuntimeClasspath());
});
});
});
configureTestDataElementsVariants(project);
}
Aggregations