Search in sources :

Example 1 with AggregateTestReport

use of org.gradle.api.tasks.testing.AggregateTestReport 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());
            });
        });
    });
}
Also used : TestSuiteType(org.gradle.api.attributes.TestSuiteType) ProjectComponentIdentifier(org.gradle.api.artifacts.component.ProjectComponentIdentifier) TestingBasePlugin(org.gradle.testing.base.plugins.TestingBasePlugin) ReportingExtension(org.gradle.api.reporting.ReportingExtension) Project(org.gradle.api.Project) Category(org.gradle.api.attributes.Category) DefaultAggregateTestReport(org.gradle.api.internal.tasks.testing.DefaultAggregateTestReport) TestingExtension(org.gradle.testing.base.TestingExtension) Callable(java.util.concurrent.Callable) AggregateTestReport(org.gradle.api.tasks.testing.AggregateTestReport) FileCollection(org.gradle.api.file.FileCollection) JvmTestSuite(org.gradle.api.plugins.jvm.JvmTestSuite) Configuration(org.gradle.api.artifacts.Configuration) TestSuite(org.gradle.testing.base.TestSuite) VerificationType(org.gradle.api.attributes.VerificationType) ObjectFactory(org.gradle.api.model.ObjectFactory) DirectoryProperty(org.gradle.api.file.DirectoryProperty) ExtensiblePolymorphicDomainObjectContainer(org.gradle.api.ExtensiblePolymorphicDomainObjectContainer) Incubating(org.gradle.api.Incubating) Plugin(org.gradle.api.Plugin) ReportingExtension(org.gradle.api.reporting.ReportingExtension) Category(org.gradle.api.attributes.Category) Configuration(org.gradle.api.artifacts.Configuration) TestingExtension(org.gradle.testing.base.TestingExtension) VerificationType(org.gradle.api.attributes.VerificationType) FileCollection(org.gradle.api.file.FileCollection) DirectoryProperty(org.gradle.api.file.DirectoryProperty) ObjectFactory(org.gradle.api.model.ObjectFactory) JvmTestSuite(org.gradle.api.plugins.jvm.JvmTestSuite) TestSuite(org.gradle.testing.base.TestSuite) DefaultAggregateTestReport(org.gradle.api.internal.tasks.testing.DefaultAggregateTestReport) AggregateTestReport(org.gradle.api.tasks.testing.AggregateTestReport) ProjectComponentIdentifier(org.gradle.api.artifacts.component.ProjectComponentIdentifier) JvmTestSuite(org.gradle.api.plugins.jvm.JvmTestSuite)

Aggregations

Callable (java.util.concurrent.Callable)1 ExtensiblePolymorphicDomainObjectContainer (org.gradle.api.ExtensiblePolymorphicDomainObjectContainer)1 Incubating (org.gradle.api.Incubating)1 Plugin (org.gradle.api.Plugin)1 Project (org.gradle.api.Project)1 Configuration (org.gradle.api.artifacts.Configuration)1 ProjectComponentIdentifier (org.gradle.api.artifacts.component.ProjectComponentIdentifier)1 Category (org.gradle.api.attributes.Category)1 TestSuiteType (org.gradle.api.attributes.TestSuiteType)1 VerificationType (org.gradle.api.attributes.VerificationType)1 DirectoryProperty (org.gradle.api.file.DirectoryProperty)1 FileCollection (org.gradle.api.file.FileCollection)1 DefaultAggregateTestReport (org.gradle.api.internal.tasks.testing.DefaultAggregateTestReport)1 ObjectFactory (org.gradle.api.model.ObjectFactory)1 JvmTestSuite (org.gradle.api.plugins.jvm.JvmTestSuite)1 ReportingExtension (org.gradle.api.reporting.ReportingExtension)1 AggregateTestReport (org.gradle.api.tasks.testing.AggregateTestReport)1 TestSuite (org.gradle.testing.base.TestSuite)1 TestingExtension (org.gradle.testing.base.TestingExtension)1 TestingBasePlugin (org.gradle.testing.base.plugins.TestingBasePlugin)1