Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: test validating that Issue-1172 is a non-issue. #1181

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/functionalTest/groovy/com/autonomousapps/jvm/KotlinSpec.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.autonomousapps.jvm

import com.autonomousapps.jvm.projects.KotlinPrivateValProject

import static com.autonomousapps.utils.Runner.build
import static com.google.common.truth.Truth.assertThat

final class KotlinSpec extends AbstractJvmSpec {

def "private vals are not part of the ABI (#gradleVersion)"() {
given:
def project = new KotlinPrivateValProject()
gradleProject = project.gradleProject

when:
build(gradleVersion, gradleProject.rootDir, ':consumer:reason', '--id', ':producer')
build(gradleVersion, gradleProject.rootDir, 'buildHealth')

then:
assertThat(project.actualBuildHealth()).containsExactlyElementsIn(project.expectedBuildHealth)

where:
gradleVersion << gradleVersions()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package com.autonomousapps.jvm.projects

import com.autonomousapps.AbstractProject
import com.autonomousapps.kit.GradleProject
import com.autonomousapps.kit.Source
import com.autonomousapps.kit.gradle.GradleProperties
import com.autonomousapps.model.ProjectAdvice

import static com.autonomousapps.AdviceHelper.actualProjectAdvice
import static com.autonomousapps.AdviceHelper.emptyProjectAdviceFor
import static com.autonomousapps.kit.gradle.Dependency.project
import static com.autonomousapps.kit.gradle.dependencies.Dependencies.kotlinStdLib

/**
* https://github.com/autonomousapps/dependency-analysis-gradle-plugin/issues/1172
*/
final class KotlinPrivateValProject extends AbstractProject {

final GradleProject gradleProject

KotlinPrivateValProject() {
this.gradleProject = build()
}

private GradleProject build() {
return newGradleProjectBuilder()
.withRootProject { r ->
r.gradleProperties += GradleProperties.kotlinStdlibNoDefaultDeps()
}
.withSubproject('consumer') { s ->
s.sources = consumerSources
s.withBuildScript { bs ->
bs.plugins(kotlin)
bs.dependencies(
project('implementation', ':producer'),
kotlinStdLib('api'),
)
}
}
.withSubproject('producer') { s ->
s.sources = producerSources
s.withBuildScript { bs ->
bs.plugins(kotlin)
bs.dependencies(kotlinStdLib('api'))
}
}
.write()
}

private List<Source> consumerSources = [
Source.kotlin(
'''\
package com.example.consumer

import com.example.producer.ExternalEnum

private val FOO_ENUMS = ExternalEnum.entries.filter { it.name.startsWith("FOO") }

internal class Consumer(private val foos: List<ExternalEnum> = FOO_ENUMS)
'''.stripMargin()
)
.withPath('com.example.consumer', 'Consumer')
.build()
]

private List<Source> producerSources = [
Source.kotlin(
'''\
package com.example.producer

enum class ExternalEnum {
FOO_ONE,
FOO_TWO,
BAR,
;
}
'''.stripMargin()
)
.withPath('com.example.producer', 'ExternalEnum')
.build()
]

Set<ProjectAdvice> actualBuildHealth() {
return actualProjectAdvice(gradleProject)
}

final Set<ProjectAdvice> expectedBuildHealth = [
emptyProjectAdviceFor(':consumer'),
emptyProjectAdviceFor(':producer'),
]
}
Loading