From dd789d04c6aaef913c60f0e114c6ca7f93beba05 Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Fri, 8 Oct 2021 15:02:26 +0300 Subject: [PATCH] avoid executing tests when ./gradlew assemble is called (via #76) --- .../src/it/adapter-assemble/build.gradle | 20 +++++++ .../src/test/java/tests/Junit5Test.java | 27 ++++++++++ .../gradle/adapter/AllureAdapterBasePlugin.kt | 18 +++++++ .../allure/gradle/adapter/AssembleTest.kt | 54 +++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 allure-adapter-plugin/src/it/adapter-assemble/build.gradle create mode 100644 allure-adapter-plugin/src/it/adapter-assemble/src/test/java/tests/Junit5Test.java create mode 100644 allure-adapter-plugin/src/test/kotlin/io/qameta/allure/gradle/adapter/AssembleTest.kt diff --git a/allure-adapter-plugin/src/it/adapter-assemble/build.gradle b/allure-adapter-plugin/src/it/adapter-assemble/build.gradle new file mode 100644 index 0000000..b49b65f --- /dev/null +++ b/allure-adapter-plugin/src/it/adapter-assemble/build.gradle @@ -0,0 +1,20 @@ +plugins { + id("java") + id("io.qameta.allure-adapter") +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation platform('org.junit:junit-bom:5.8.1') + testImplementation 'org.junit.jupiter:junit-jupiter' +} + +tasks.test { + useJUnitPlatform() + doLast { + throw new IllegalStateException("test task must not be called when executing ./gradlew assemble") + } +} diff --git a/allure-adapter-plugin/src/it/adapter-assemble/src/test/java/tests/Junit5Test.java b/allure-adapter-plugin/src/it/adapter-assemble/src/test/java/tests/Junit5Test.java new file mode 100644 index 0000000..6c4e60e --- /dev/null +++ b/allure-adapter-plugin/src/it/adapter-assemble/src/test/java/tests/Junit5Test.java @@ -0,0 +1,27 @@ +package tests; + +import io.qameta.allure.Attachment; +import io.qameta.allure.Step; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class Junit5Test { + + @Test + public void testWithAttachment() { + stepMethod(); + assertTrue(true); + } + + @Step("step") + public void stepMethod() { + attachment(); + } + + @Attachment(value = "attachment", type = "text/plain") + public String attachment() { + return "

HELLO

"; + } + +} \ No newline at end of file diff --git a/allure-adapter-plugin/src/main/kotlin/io/qameta/allure/gradle/adapter/AllureAdapterBasePlugin.kt b/allure-adapter-plugin/src/main/kotlin/io/qameta/allure/gradle/adapter/AllureAdapterBasePlugin.kt index aaf3954..12f094e 100644 --- a/allure-adapter-plugin/src/main/kotlin/io/qameta/allure/gradle/adapter/AllureAdapterBasePlugin.kt +++ b/allure-adapter-plugin/src/main/kotlin/io/qameta/allure/gradle/adapter/AllureAdapterBasePlugin.kt @@ -8,6 +8,7 @@ import io.qameta.allure.gradle.adapter.tasks.CopyCategories import io.qameta.allure.gradle.util.categoryDocumentation import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.Configuration import org.gradle.api.attributes.Usage import org.gradle.kotlin.dsl.* @@ -74,5 +75,22 @@ open class AllureAdapterBasePlugin : Plugin { copyCategoriesElements.outgoing.artifact(copyCategories.flatMap { it.markerFile }) { builtBy(copyCategories) } + + // Workaround for https://github.com/gradle/gradle/issues/6875 + target.afterEvaluate { + configurations.findByName("archives")?.let { archives -> + removeArtifactsFromArchives(archives, rawResultElements) + removeArtifactsFromArchives(archives, copyCategoriesElements) + } + } + } + + private fun Project.removeArtifactsFromArchives(archives: Configuration, elements: Configuration) { + val allureResultNames = elements.outgoing.artifacts.mapTo(mutableSetOf()) { it.name } + if (allureResultNames.isEmpty()) { + return + } + logger.debug("Will remove artifacts $allureResultNames (outgoing artifacts of $elements) from $archives configuration to workaround https://github.com/gradle/gradle/issues/6875") + archives.outgoing.artifacts.removeIf { it.name in allureResultNames } } } diff --git a/allure-adapter-plugin/src/test/kotlin/io/qameta/allure/gradle/adapter/AssembleTest.kt b/allure-adapter-plugin/src/test/kotlin/io/qameta/allure/gradle/adapter/AssembleTest.kt new file mode 100644 index 0000000..a2f1bb6 --- /dev/null +++ b/allure-adapter-plugin/src/test/kotlin/io/qameta/allure/gradle/adapter/AssembleTest.kt @@ -0,0 +1,54 @@ +package io.qameta.allure.gradle.adapter + +import io.qameta.allure.gradle.rule.GradleRunnerRule +import org.assertj.core.api.Assertions +import org.gradle.testkit.runner.TaskOutcome +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@RunWith(Parameterized::class) +class AssembleTest { + @Rule + @JvmField + val gradleRunner = GradleRunnerRule() + .version { version } + .project { project } + .tasks { tasks } + + @Parameterized.Parameter(0) + lateinit var version: String + + @Parameterized.Parameter(1) + lateinit var project: String + + @Parameterized.Parameter(2) + lateinit var tasks: Array + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "{1} [{0}]") + fun getFrameworks() = listOf( + arrayOf( + "7.0", + "src/it/adapter-assemble", + arrayOf("assemble") + ), + arrayOf( + "5.0", + "src/it/adapter-assemble", + arrayOf("assemble") + ) + ) + } + + @Test + fun `assemble should not execute tests`() { + Assertions.assertThat(gradleRunner.buildResult.tasks) + .`as`("assemble should succeed, and test must not be executed") + .filteredOn { task -> task.path == ":assemble" } + .extracting("outcome") + .containsAnyOf(TaskOutcome.SUCCESS, TaskOutcome.UP_TO_DATE) + } +}