Kotlin2Js Gradle plugin tests
This commit is contained in:
committed by
Zalim Bashorov
parent
b1723668ce
commit
e08fa1cab2
+22
-1
@@ -11,6 +11,7 @@ import kotlin.test.assertFalse
|
|||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
import kotlin.test.fail
|
import kotlin.test.fail
|
||||||
import org.gradle.api.logging.LogLevel
|
import org.gradle.api.logging.LogLevel
|
||||||
|
import kotlin.test.assertFalse
|
||||||
|
|
||||||
open class BaseGradleIT(resourcesRoot: String = "src/test/resources") {
|
open class BaseGradleIT(resourcesRoot: String = "src/test/resources") {
|
||||||
|
|
||||||
@@ -59,8 +60,28 @@ open class BaseGradleIT(resourcesRoot: String = "src/test/resources") {
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun CompiledProject.fileInWorkingDir(path: String) = File(File(workingDir, project.projectName), path)
|
||||||
|
|
||||||
fun CompiledProject.assertReportExists(pathToReport: String = ""): CompiledProject {
|
fun CompiledProject.assertReportExists(pathToReport: String = ""): CompiledProject {
|
||||||
assertTrue(File(File(workingDir, project.projectName), pathToReport).exists(), "The report [$pathToReport] does not exist.")
|
assertTrue(fileInWorkingDir(pathToReport).exists(), "The report [$pathToReport] does not exist.")
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun CompiledProject.assertFileExists(path: String = ""): CompiledProject {
|
||||||
|
assertTrue(fileInWorkingDir(path).exists(), "The file [$path] does not exist.")
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun CompiledProject.assertNoSuchFile(path: String = ""): CompiledProject {
|
||||||
|
assertFalse(fileInWorkingDir(path).exists(), "The file [$path] exists.")
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
fun CompiledProject.assertFileContains(path: String, vararg expected: String): CompiledProject {
|
||||||
|
val text = fileInWorkingDir(path).readText()
|
||||||
|
expected.forEach {
|
||||||
|
assertTrue(text.contains(it), "$path should contain '$it', actual file contents:\n$text")
|
||||||
|
}
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
package org.jetbrains.kotlin.gradle
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import org.jetbrains.kotlin.gradle.BaseGradleIT.Project
|
||||||
|
|
||||||
|
|
||||||
|
class Kotlin2JsGradlePluginIT : BaseGradleIT() {
|
||||||
|
Test fun testBuildAndClean() {
|
||||||
|
val project = Project("kotlin2JsProject", "1.6")
|
||||||
|
|
||||||
|
project.build("build") {
|
||||||
|
assertSuccessful()
|
||||||
|
assertReportExists()
|
||||||
|
|
||||||
|
assertContains(":libraryProject:jarSources\n",
|
||||||
|
":mainProject:compileKotlin2Js\n", ":mainProject:copyKotlinJs\n",
|
||||||
|
":libraryProject:compileKotlin2Js\n", ":libraryProject:copyKotlinJs\n")
|
||||||
|
|
||||||
|
listOf("mainProject/web/js/app.js", "mainProject/web/js/lib/kotlin.js",
|
||||||
|
"libraryProject/build/kotlin2js/main/app.js", "libraryProject/build/kotlin2js/main/kotlin.js",
|
||||||
|
"mainProject/web/js/app.js.map"
|
||||||
|
).forEach { assertFileExists(it) }
|
||||||
|
|
||||||
|
|
||||||
|
// TODO Should be updated to `new _.example.library.Counter` once namespaced imports from libraryFiles are implemented
|
||||||
|
// TODO It would be better to test these by behavior instead of implementation, for example by loading the files
|
||||||
|
// into Rhino and running assertions on that. See https://github.com/abesto/kotlin/commit/120ec1bda3d95630189d4d33d0b2afb4253b5186
|
||||||
|
// for the (original) discussion on this.
|
||||||
|
assertFileContains("libraryProject/build/kotlin2js/main/app.js", "Counter: Kotlin.createClass")
|
||||||
|
assertFileContains("mainProject/web/js/app.js", "var counter = new Counter(counterText);")
|
||||||
|
}
|
||||||
|
|
||||||
|
project.build("build") {
|
||||||
|
assertSuccessful()
|
||||||
|
assertContains(":mainProject:compileKotlin2Js UP-TO-DATE", ":libraryProject:compileTestKotlin2Js UP-TO-DATE")
|
||||||
|
}
|
||||||
|
|
||||||
|
project.build("clean") {
|
||||||
|
assertSuccessful()
|
||||||
|
assertReportExists()
|
||||||
|
assertContains(":mainProject:cleanCompileKotlin2Js\n", ":mainProject:cleanCopyKotlinJs\n")
|
||||||
|
assertNoSuchFile("mainProject/web/js/app.js")
|
||||||
|
assertNoSuchFile("mainProject/web/js/lib/kotlin.js")
|
||||||
|
|
||||||
|
// Test that we don't accidentally remove the containing directory
|
||||||
|
// This would fail if we used the default clean task of the copy task
|
||||||
|
assertFileExists("mainProject/web/js/lib")
|
||||||
|
|
||||||
|
assertNoSuchFile("main/project/web/js/app.js.map")
|
||||||
|
assertNoSuchFile("main/project/web/js/example/main.kt")
|
||||||
|
}
|
||||||
|
|
||||||
|
project.build("clean") {
|
||||||
|
assertSuccessful()
|
||||||
|
assertReportExists()
|
||||||
|
assertContains(":mainProject:cleanCompileKotlin2Js UP-TO-DATE", ":mainProject:cleanCopyKotlinJs UP-TO-DATE")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Test fun testNoOutputFileFails() {
|
||||||
|
val project = Project("kotlin2JsNoOutputFileProject", "1.6")
|
||||||
|
project.build("build") {
|
||||||
|
assertReportExists()
|
||||||
|
assertContains("compileKotlin2Js.kotlinOptions.outputFile must be set to a string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
url "file://" + pathToKotlinPlugin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: "kotlin2js"
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url "file://" + pathToKotlinPlugin
|
||||||
|
}
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile "org.jetbrains.kotlin:kotlin-js-library:0.1-SNAPSHOT"
|
||||||
|
}
|
||||||
+4
@@ -0,0 +1,4 @@
|
|||||||
|
package example
|
||||||
|
|
||||||
|
class Dummy {}
|
||||||
|
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
url 'file://' + pathToKotlinPlugin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: 'kotlin2js'
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url 'file://' + pathToKotlinPlugin
|
||||||
|
}
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile "org.jetbrains.kotlin:kotlin-js-library:0.1-SNAPSHOT"
|
||||||
|
}
|
||||||
|
|
||||||
|
task jarSources(type:Jar){
|
||||||
|
from sourceSets.main.allSource
|
||||||
|
classifier = 'source'
|
||||||
|
}
|
||||||
|
artifacts {
|
||||||
|
compile jarSources
|
||||||
|
}
|
||||||
|
|
||||||
|
compileKotlin2Js.kotlinOptions.outputFile = "${buildDir}/kotlin2js/main/app.js"
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package example
|
||||||
|
|
||||||
|
class Adder {
|
||||||
|
public fun add(x: Int, y: Int): Int = x + y
|
||||||
|
}
|
||||||
|
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
package example.library
|
||||||
|
|
||||||
|
import org.w3c.dom.Text
|
||||||
|
import kotlin.js.dom.html.window
|
||||||
|
|
||||||
|
public class Counter(val el: Text) {
|
||||||
|
fun step(n: Int) {
|
||||||
|
el.replaceWholeText("Counter: ${n}")
|
||||||
|
window.setTimeout({step(n+1)}, 1000)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun start() {
|
||||||
|
step(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
url "file://" + pathToKotlinPlugin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
apply plugin: "kotlin2js"
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url "file://" + pathToKotlinPlugin
|
||||||
|
}
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile project(":libraryProject"),
|
||||||
|
"org.jetbrains.kotlin:kotlin-js-library:0.1-SNAPSHOT"
|
||||||
|
}
|
||||||
|
|
||||||
|
compileKotlin2Js.kotlinOptions.sourceMap = true
|
||||||
|
compileKotlin2Js.kotlinOptions.outputFile = "${projectDir}/web/js/app.js"
|
||||||
|
compileKotlin2Js.kotlinOptions.suppressWarnings = true
|
||||||
|
compileKotlin2Js.kotlinOptions.verbose = true
|
||||||
|
|
||||||
|
copyKotlinJs.into "${projectDir}/web/js/lib"
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package example
|
||||||
|
|
||||||
|
import kotlin.js.dom.html.document
|
||||||
|
import example.library.Counter
|
||||||
|
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
val el = document.createElement("div")
|
||||||
|
el.appendChild(document.createTextNode("Hello!"))
|
||||||
|
document.body.appendChild(el)
|
||||||
|
|
||||||
|
val counterDiv = document.createElement("div")
|
||||||
|
val counterText = document.createTextNode("Counter!")
|
||||||
|
counterDiv.appendChild(counterText)
|
||||||
|
document.body.appendChild(counterDiv)
|
||||||
|
|
||||||
|
val counter = Counter(counterText)
|
||||||
|
counter.start()
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
include 'mainProject', 'libraryProject'
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head lang="en">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title></title>
|
||||||
|
<script src="js/lib/kotlin.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="js/app.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user