diff --git a/plugin/src/integrationTest/fixtures2/src/testFixtures/kotlin/com/vanniktech/maven/publish/test/TestFixtureKotlinClass.kt b/plugin/src/integrationTest/fixtures2/src/testFixtures/kotlin/com/vanniktech/maven/publish/test/TestFixtureKotlinClass.kt new file mode 100644 index 00000000..71b8e07a --- /dev/null +++ b/plugin/src/integrationTest/fixtures2/src/testFixtures/kotlin/com/vanniktech/maven/publish/test/TestFixtureKotlinClass.kt @@ -0,0 +1,6 @@ +package com.vanniktech.maven.publish.test + +/** + * Just a test fixture class in Kotlin. + */ +public class TestFixtureKotlinClass diff --git a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt index 07409568..1a924abd 100644 --- a/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt +++ b/plugin/src/integrationTest/kotlin/com/vanniktech/maven/publish/MavenPublishPluginPlatformTest.kt @@ -76,7 +76,10 @@ class MavenPublishPluginPlatformTest { assertThat(result).artifact("jar").isSigned() assertThat(result).pom().exists() assertThat(result).pom().isSigned() - assertThat(result).pom().matchesExpectedPom(PomDependency("com.example", "test-artifact", "1.0.0", "compile", true)) + assertThat(result).pom().matchesExpectedPom( + // TODO: Gradle currently adds a self dependency when test fixtures are published https://github.com/gradle/gradle/issues/14936 + PomDependency("com.example", "test-artifact", "1.0.0", "compile", true), + ) assertThat(result).module().exists() assertThat(result).module().isSigned() assertThat(result).sourcesJar().exists() @@ -169,6 +172,42 @@ class MavenPublishPluginPlatformTest { assertThat(result).javadocJar().isSigned() } + @TestParameterInjectorTest + fun kotlinJvmWithTestFixturesProject(@TestParameter kotlinVersion: KotlinVersion) { + val default = kotlinJvmProjectSpec(kotlinVersion) + val project = default.copy( + plugins = default.plugins + javaTestFixturesPlugin, + sourceFiles = default.sourceFiles + listOf( + SourceFile("testFixtures", "java", "com/vanniktech/maven/publish/test/TestFixtureClass.java"), + SourceFile("testFixtures", "kotlin", "com/vanniktech/maven/publish/test/TestFixtureKotlinClass.kt"), + ) + ) + val result = project.run(fixtures, testProjectDir, testOptions) + + assertThat(result).outcome().succeeded() + assertThat(result).artifact("jar").exists() + assertThat(result).artifact("jar").isSigned() + assertThat(result).pom().exists() + assertThat(result).pom().isSigned() + assertThat(result).pom().matchesExpectedPom( + kotlinStdlibJdk(kotlinVersion), + // TODO: Gradle currently adds a self dependency when test fixtures are published https://github.com/gradle/gradle/issues/14936 + PomDependency("com.example", "test-artifact", "1.0.0", "compile", true), + ) + assertThat(result).module().exists() + assertThat(result).module().isSigned() + assertThat(result).sourcesJar().exists() + assertThat(result).sourcesJar().isSigned() + assertThat(result).sourcesJar().containsSourceSetFiles("main") + assertThat(result).javadocJar().exists() + assertThat(result).javadocJar().isSigned() + assertThat(result).artifact("test-fixtures", "jar").exists() + assertThat(result).artifact("test-fixtures", "jar").isSigned() + assertThat(result).sourcesJar("test-fixtures").exists() + assertThat(result).sourcesJar("test-fixtures").isSigned() + assertThat(result).sourcesJar("test-fixtures").containsSourceSetFiles("testFixtures") + } + @TestParameterInjectorTest fun kotlinJsProject(@TestParameter kotlinVersion: KotlinVersion) { val project = kotlinJsProjectSpec(kotlinVersion) diff --git a/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt b/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt index 0e57694a..3134f4d3 100644 --- a/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt +++ b/plugin/src/main/kotlin/com/vanniktech/maven/publish/Platform.kt @@ -57,14 +57,7 @@ data class JavaLibrary @JvmOverloads constructor( it.withJavadocJar { project.javadocJarTask(javadocJar) } } - if (sourcesJar) { - // TODO: remove after https://github.com/gradle/gradle/issues/20539 is resolved - project.plugins.withId("java-test-fixtures") { - project.serviceOf().createJvmVariant("testFixtures") { - it.withSourcesJar().published() - } - } - } + setupTestFixtures(project, sourcesJar) } } @@ -278,6 +271,8 @@ data class KotlinJvm @JvmOverloads constructor( it.withSourcesJar { project.javaSourcesJar(sourcesJar) } it.withJavadocJar { project.javadocJarTask(javadocJar) } } + + setupTestFixtures(project, sourcesJar) } } @@ -430,6 +425,24 @@ private fun MavenPublication.withJavadocJar(factory: () -> TaskProvider<*>?) { } } +private fun setupTestFixtures(project: Project, sourcesJar: Boolean) { + project.plugins.withId("java-test-fixtures") { + if (sourcesJar) { + // TODO: remove after https://github.com/gradle/gradle/issues/20539 is resolved + project.serviceOf().createJvmVariant("testFixtures") { + it.withSourcesJar().published() + } + } + + // test fixtures can't be mapped to the POM because there is no equivalent concept in Maven + project.mavenPublications { + it.suppressPomMetadataWarningsFor("testFixturesApiElements") + it.suppressPomMetadataWarningsFor("testFixturesRuntimeElements") + it.suppressPomMetadataWarningsFor("testFixturesSourcesElements") + } + } +} + private class MissingVariantException(name: String) : RuntimeException( "Invalid MavenPublish Configuration. Unable to find variant to publish named $name." + " Try setting the 'androidVariantToPublish' property in the mavenPublish" +