diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 135f296ae0e..d7ec1d4c7e3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -79,10 +79,10 @@ class Kotlin2JsGradlePluginIT : BaseGradleIT() { @Test fun testCompileTestCouldAccessProduction() { val project = Project("kotlin2JsProjectWithTests", "2.10") - + project.build("build") { assertSuccessful() - + assertContains( ":compileKotlin2Js", ":compileTestKotlin2Js" @@ -93,6 +93,23 @@ class Kotlin2JsGradlePluginIT : BaseGradleIT() { } } + @Test + fun testJsCustomSourceSet() { + val project = Project("kotlin2JsProjectWithCustomSourceset", "2.10") + + project.build("build") { + assertSuccessful() + + assertContains( + ":compileKotlin2Js", + ":compileIntegrationTestKotlin2Js" + ) + + assertFileExists("build/kotlin2js/main/module.js") + assertFileExists("build/kotlin2js/integrationTest/module-inttests.js") + } + } + @Test fun testKotlinJsBuiltins() { val project = Project("kotlinBuiltins", "3.2") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/build.gradle new file mode 100644 index 00000000000..2d57f0c95aa --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/build.gradle @@ -0,0 +1,42 @@ +buildscript { + repositories { + mavenLocal() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: 'kotlin2js' + +repositories { + mavenLocal() +} + +sourceSets { + integrationTest +} + +task integrationTest(type: Test) { + testClassesDir = sourceSets.integrationTest.output.classesDir + classpath = sourceSets.integrationTest.runtimeClasspath +} + +compileIntegrationTestKotlin2Js.dependsOn compileKotlin2Js + +compileKotlin2Js.kotlinOptions.outputFile = "${buildDir}/kotlin2js/main/module.js" +compileIntegrationTestKotlin2Js.kotlinOptions.outputFile = "${buildDir}/kotlin2js/integrationTest/module-inttests.js" + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" + integrationTestCompile files(file(compileKotlin2Js.kotlinOptions.outputFile).parent) + integrationTestCompile "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version" +} + +task jarSources(type: Jar) { + from sourceSets.main.allSource + classifier = 'source' +} +artifacts { + compile jarSources +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/src/integrationTest/kotlin/MainIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/src/integrationTest/kotlin/MainIT.kt new file mode 100644 index 00000000000..428acee24bc --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/src/integrationTest/kotlin/MainIT.kt @@ -0,0 +1,13 @@ +package test + +import example.MyProductionClass +import org.junit.Test + +class MainIT { + @Test + fun mySimpleTest() { + listOf(1, 2, 3).forEach { // check that stdlib is available + MyProductionClass().i = it // check that production code is available + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/src/main/kotlin/Main.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/src/main/kotlin/Main.kt new file mode 100644 index 00000000000..43634c402a3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithCustomSourceset/src/main/kotlin/Main.kt @@ -0,0 +1,5 @@ +package example + +class MyProductionClass { + var i = 0 +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/build.gradle index 27fe562dc9a..dbac0ebb2ce 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/build.gradle @@ -15,6 +15,7 @@ repositories { dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version" + testCompile "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version" } task jarSources(type: Jar) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/src/test/kotlin/MainTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/src/test/kotlin/MainTest.kt index 40303ede849..9ff980a3a51 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/src/test/kotlin/MainTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kotlin2JsProjectWithTests/src/test/kotlin/MainTest.kt @@ -4,7 +4,7 @@ import org.junit.Test import example.MyProductionClass class MyTest { - @Test + @Test fun mySimpleTest() { MyProductionClass().i = 10 } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index ef716261f0c..481db39cadd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -55,6 +55,11 @@ const val USING_EXPERIMENTAL_INCREMENTAL_MESSAGE = "Using experimental kotlin in abstract class AbstractKotlinCompile() : AbstractCompile(), CompilerArgumentAware { abstract protected fun populateCompilerArguments(): T + protected val additionalClasspath = arrayListOf() + protected val compileClasspath: Iterable + get() = (classpath + additionalClasspath) + .filterTo(LinkedHashSet(), File::exists) + override val serializedCompilerArguments: List get() { val arguments = populateCompilerArguments() @@ -166,10 +171,6 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl } private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null - private val additionalClasspath = arrayListOf() - private val compileClasspath: Iterable - get() = (classpath + additionalClasspath) - .filterTo(LinkedHashSet(), File::exists) internal val kaptOptions = KaptOptions() internal val pluginOptions = CompilerPluginOptions() @@ -342,7 +343,7 @@ open class Kotlin2JsCompile() : AbstractKotlinCompile(), ?.let { if (LibraryUtils.isKotlinJavascriptLibrary(it)) it else null } ?.absolutePath - val dependencies = project.configurations.getByName("compile") + val dependencies = compileClasspath .filter { LibraryUtils.isKotlinJavascriptLibrary(it) } .map { it.canonicalPath }