blob: 9af2222aac2bf5d98135265dba3fbe8d645ccd73 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/*
* Copyright 2021 Google LLC
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.devtools.ksp.gradle.testing
import java.io.File
/**
* Simple wrapper that represents a test project.
*/
class TestProject(
val rootDir: File,
val testConfig: TestConfig
) {
val processorModule = TestModule(
rootDir.resolve("processor")
).also {
it.plugins.add(PluginDeclaration.kotlin("jvm", testConfig.kotlinBaseVersion))
it.dependencies.add(
DependencyDeclaration.artifact(
"implementation",
"com.google.devtools.ksp:symbol-processing-api:${testConfig.kspVersion}"
)
)
// add gradle-plugin test classpath as a dependency to be able to load processors.
it.dependencies.add(
DependencyDeclaration.files(
"implementation",
testConfig.processorClasspath
)
)
}
val appModule = TestModule(
rootDir.resolve("app")
)
fun writeFiles() {
writeBuildFile()
writeSettingsFile()
appModule.writeBuildFile()
processorModule.writeBuildFile()
}
private fun writeSettingsFile() {
val contents = """
include("processor")
include("app")
pluginManagement {
repositories {
maven("${testConfig.mavenRepoDir}")
gradlePluginPortal()
google()
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/")
}
}
""".trimIndent()
rootDir.resolve("settings.gradle.kts").writeText(contents)
}
private fun writeBuildFile() {
val rootBuildFile = buildString {
appendln("plugins {")
val allPlugins = (processorModule.plugins + appModule.plugins).distinct()
allPlugins.forEach {
appendln(""" ${it.text} version "${it.version}" apply false """)
}
appendln("}")
appendln(
"""
repositories {
maven("${testConfig.mavenRepoDir}")
mavenCentral()
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/")
google()
}
configurations.all {
resolutionStrategy.eachDependency {
if (requested.group == "org.jetbrains.kotlin") {
useVersion("${testConfig.kotlinBaseVersion}")
}
}
}
subprojects {
repositories {
maven("${testConfig.mavenRepoDir}")
mavenCentral()
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/")
google()
}
configurations.all {
resolutionStrategy.eachDependency {
if (requested.group == "org.jetbrains.kotlin") {
useVersion("${testConfig.kotlinBaseVersion}")
}
}
}
}
""".trimIndent()
)
}
rootDir.resolve("build.gradle.kts").writeText(rootBuildFile)
}
}
|