Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.

Commit 608e278

Browse files
committed
New MPP project test
1 parent 41ace55 commit 608e278

File tree

1 file changed

+237
-0
lines changed
  • kotlin-frontend/src/test/kotlin/org/jetbrains/kotlin/gradle/frontend

1 file changed

+237
-0
lines changed
Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
package org.jetbrains.kotlin.gradle.frontend
2+
3+
import org.gradle.testkit.runner.GradleRunner
4+
import org.gradle.testkit.runner.TaskOutcome
5+
import org.jetbrains.kotlin.gradle.frontend.util.mkdirsOrFail
6+
import org.junit.Before
7+
import org.junit.Rule
8+
import org.junit.Test
9+
import org.junit.rules.TemporaryFolder
10+
import org.junit.rules.TestName
11+
import org.junit.rules.TestWatcher
12+
import org.junit.runner.Description
13+
import java.io.File
14+
import kotlin.test.assertEquals
15+
import kotlin.test.assertTrue
16+
17+
class NewMppTest {
18+
private val gradleVersion: String = "4.10.3"
19+
private val kotlinVersion: String = "1.3.10"
20+
21+
private val port = 8098
22+
private val builder = BuildScriptBuilder()
23+
24+
private lateinit var settingsGradleFile: File
25+
private lateinit var buildGradleFile: File
26+
private lateinit var runner: GradleRunner
27+
28+
@get:Rule
29+
val testName = TestName()
30+
31+
@get:Rule
32+
val failedRule = object : TestWatcher() {
33+
override fun failed(e: Throwable?, description: Description?) {
34+
val dst = File("build/tests/${testName.methodName.replace("[", "-").replace("]", "")}").apply { mkdirsOrFail() }
35+
projectDir.root.copyRecursively(dst, true) { file, copyError ->
36+
System.err.println("Failed to copy $file due to ${copyError.message}")
37+
OnErrorAction.SKIP
38+
}
39+
println("Copied project to ${dst.absolutePath}")
40+
}
41+
42+
/*
43+
// useful for debugging
44+
override fun succeeded(description: Description?) {
45+
failed(null, description)
46+
}
47+
// */
48+
}
49+
50+
@get:Rule
51+
val projectDir = TemporaryFolder()
52+
53+
val D = "$"
54+
55+
fun File.makeParentsAndWriteText(text: String) {
56+
parentFile.mkdirsOrFail()
57+
writeText(text)
58+
}
59+
60+
@Before
61+
fun setUp() {
62+
projectDir.create()
63+
projectDir.root.resolve("build/kotlin-build/caches").mkdirsOrFail()
64+
65+
buildGradleFile = projectDir.root.resolve("build.gradle")
66+
settingsGradleFile = projectDir.root.resolve("settings.gradle")
67+
68+
projectDir.root.resolve("src/commonMain/kotlin/sample/Sample.kt").makeParentsAndWriteText("expect fun f(): Int")
69+
projectDir.root.resolve("src/commonTest/kotlin/sample/SampleTests.kt").makeParentsAndWriteText(
70+
"""
71+
class SampleTests {
72+
@Test
73+
fun testMe() {
74+
assertTrue(f() > 0)
75+
}
76+
}
77+
"""
78+
)
79+
80+
projectDir.root.resolve("src/jsMain/kotlin/sample/SampleJs.kt").makeParentsAndWriteText("actual fun f(): Int = 1")
81+
projectDir.root.resolve("src/jsTest/kotlin/sample/SampleTestsJs.kt").makeParentsAndWriteText(
82+
"""
83+
class SampleTestsJs {
84+
@Test
85+
fun testMe() {
86+
assertTrue(f() == 1)
87+
}
88+
}
89+
"""
90+
)
91+
92+
projectDir.root.resolve("src/jvmMain/kotlin/sample/SampleJvm.kt").makeParentsAndWriteText("actual fun f(): Int = 2")
93+
projectDir.root.resolve("src/jvmTest/kotlin/sample/SampleTestsJvm.kt").makeParentsAndWriteText(
94+
"""
95+
class SampleTestsJvm {
96+
@Test
97+
fun testMe() {
98+
assertTrue(f() == 2)
99+
}
100+
}
101+
"""
102+
)
103+
104+
buildGradleFile.parentFile.mkdirsOrFail()
105+
settingsGradleFile.parentFile.mkdirsOrFail()
106+
107+
runner = GradleRunner.create()
108+
.withProjectDir(projectDir.root)
109+
.withPluginClasspath()
110+
.withGradleVersion(gradleVersion)
111+
112+
settingsGradleFile.writeText(
113+
"""
114+
pluginManagement {
115+
resolutionStrategy {
116+
eachPlugin {
117+
if (requested.id.id == "kotlin-multiplatform") {
118+
useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:$D{requested.version}")
119+
}
120+
}
121+
}
122+
123+
resolutionStrategy {
124+
eachPlugin {
125+
if (requested.id.id == "org.jetbrains.kotlin.frontend") {
126+
useModule('org.jetbrains.kotlin:kotlin-frontend-plugin:0.0.38-SNAPSHOT')
127+
}
128+
}
129+
}
130+
131+
repositories {
132+
mavenCentral()
133+
maven { url 'https://plugins.gradle.org/m2/' }
134+
}
135+
}
136+
137+
rootProject.name = 'new-mpp'
138+
"""
139+
)
140+
}
141+
142+
@Test
143+
fun testSimple() {
144+
buildGradleFile.writeText(
145+
"""
146+
plugins {
147+
id 'kotlin-multiplatform' version '$kotlinVersion'
148+
id 'org.jetbrains.kotlin.frontend'
149+
}
150+
151+
repositories {
152+
jcenter()
153+
maven { url "http://dl.bintray.com/kotlin/ktor" }
154+
mavenCentral()
155+
}
156+
157+
kotlin {
158+
targets {
159+
fromPreset(presets.jvm, 'jvm')
160+
fromPreset(presets.js, 'js') {
161+
configure([compilations.main, compilations.test]) {
162+
tasks.getByName(compileKotlinTaskName).kotlinOptions {
163+
sourceMap = true
164+
moduleKind = "commonjs"
165+
metaInfo = true
166+
}
167+
}
168+
169+
configure(compilations.main) {
170+
tasks.getByName(compileKotlinTaskName).kotlinOptions {
171+
main = "call"
172+
}
173+
}
174+
}
175+
}
176+
177+
sourceSets {
178+
commonMain {
179+
dependencies {
180+
implementation 'org.jetbrains.kotlin:kotlin-stdlib-common'
181+
}
182+
}
183+
commonTest {
184+
dependencies {
185+
implementation 'org.jetbrains.kotlin:kotlin-test-common'
186+
implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common'
187+
}
188+
}
189+
jvmMain {
190+
dependencies {
191+
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
192+
}
193+
}
194+
jvmTest {
195+
dependencies {
196+
implementation 'org.jetbrains.kotlin:kotlin-test'
197+
implementation 'org.jetbrains.kotlin:kotlin-test-junit'
198+
}
199+
}
200+
jsMain {
201+
dependencies {
202+
implementation 'org.jetbrains.kotlin:kotlin-stdlib-js'
203+
}
204+
}
205+
jsTest {
206+
dependencies {
207+
implementation 'org.jetbrains.kotlin:kotlin-test-js'
208+
}
209+
}
210+
}
211+
}
212+
213+
kotlinFrontend {
214+
npm {
215+
devDependency("karma")
216+
}
217+
218+
sourceMaps = true
219+
220+
webpackBundle {
221+
bundleName = "main"
222+
}
223+
}
224+
"""
225+
)
226+
227+
val result = runner.withArguments("bundle").build()
228+
229+
assertEquals(TaskOutcome.SUCCESS, result.task(":npm-preunpack")?.outcome)
230+
assertEquals(TaskOutcome.SUCCESS, result.task(":npm-install")?.outcome)
231+
assertEquals(TaskOutcome.SUCCESS, result.task(":webpack-config")?.outcome)
232+
assertEquals(TaskOutcome.SUCCESS, result.task(":webpack-bundle")?.outcome)
233+
234+
assertTrue { projectDir.root.resolve("build/classes/kotlin/js/main/new-mpp.js").isFile }
235+
assertTrue { projectDir.root.resolve("build/bundle/main.bundle.js").isFile }
236+
}
237+
}

0 commit comments

Comments
 (0)