diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java index fd6643afb0f..b3fb579cc09 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.java @@ -47,8 +47,11 @@ import java.util.*; import java.util.regex.Pattern; import java.util.zip.ZipOutputStream; +import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName; + public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { private static final String PROJECT_NAME = "kotlinProject"; + private static final String ADDITIONAL_MODULE_NAME = "module2"; private static final String JDK_NAME = "IDEA_JDK"; private static final String[] EXCLUDE_FILES = { "Excluded.class", "YetAnotherExcluded.class" }; @@ -62,6 +65,12 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { "lib/kotlin.js", "lib/stdlib.meta.js" ); + private static final Set EXPECTED_JS_FILES_IN_OUTPUT_FOR_MODULE_STDLIB_ONLY = KotlinPackage.hashSetOf( + ADDITIONAL_MODULE_NAME + ".js", + ADDITIONAL_MODULE_NAME + ".meta.js", + "lib/kotlin.js", + "lib/stdlib.meta.js" + ); private static final Set EXPECTED_JS_FILES_IN_OUTPUT_NO_COPY = KotlinPackage.hashSetOf( PROJECT_NAME + ".js", PROJECT_NAME + ".meta.js" @@ -90,6 +99,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { "custom/META-INF-ex/file2.js", "custom/res0.js", "custom/resdir/res1.js"); + @Override public void setUp() throws Exception { super.setUp(); @@ -148,6 +158,20 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { checkWhen(touch("src/test1.kt"), null, k2jsOutput(PROJECT_NAME)); } + public void testKotlinJavaScriptProjectWithTwoModules() { + initProject(); + addKotlinJavaScriptStdlibDependency(); + makeAll().assertSuccessful(); + + assertEquals(EXPECTED_JS_FILES_IN_OUTPUT_FOR_STDLIB_ONLY, contentOfOutputDir(PROJECT_NAME)); + assertEquals(EXPECTED_JS_FILES_IN_OUTPUT_FOR_MODULE_STDLIB_ONLY, contentOfOutputDir(ADDITIONAL_MODULE_NAME)); + + checkWhen(touch("src/test1.kt"), null, k2jsOutput(PROJECT_NAME)); + checkWhen(touch("module2/src/module2.kt"), null, k2jsOutput(ADDITIONAL_MODULE_NAME)); + checkWhen(new Action[]{ touch("src/test1.kt"), touch("module2/src/module2.kt")}, null, k2jsOutput(PROJECT_NAME, + ADDITIONAL_MODULE_NAME)); + } + public void testKotlinJavaScriptProjectWithDirectoryAsStdlib() { initProject(); File jslibJar = PathUtil.getKotlinPathsForDistDirectory().getJsStdLibJarPath(); @@ -408,11 +432,15 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { } @NotNull - private static String[] k2jsOutput(String moduleName) { - String outputDir = "out/production/" + moduleName; - String[] result = new String[2]; - result[0] = outputDir + "/" + moduleName + ".js"; - result[1] = outputDir + "/" + moduleName + ".meta.js"; + private static String[] k2jsOutput(String ...moduleNames) { + int length = moduleNames.length; + String[] result = new String[2 * length]; + int index = 0; + for(String moduleName : moduleNames) { + File outputDir = new File("out/production/" + moduleName); + result[index++] = toSystemIndependentName(JpsJsModuleUtils.getOutputFile(outputDir, moduleName).getPath()); + result[index++] = toSystemIndependentName(JpsJsModuleUtils.getOutputMetaFile(outputDir, moduleName).getPath()); + } return result; } @@ -425,7 +453,7 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { for(File file : files) { String relativePath = FileUtil.getRelativePath(baseDir, file); assert relativePath != null : "relativePath should not be null"; - result.add(FileUtil.toSystemIndependentName(relativePath)); + result.add(toSystemIndependentName(relativePath)); } return result; } diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/kotlinProject.iml new file mode 100644 index 00000000000..11fe0ade95d --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/kotlinProject.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/kotlinProject.ipr new file mode 100644 index 00000000000..b02ca501ac3 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/kotlinProject.ipr @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/module2/module2.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/module2/module2.iml new file mode 100644 index 00000000000..e9637fef0b3 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/module2/module2.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/module2/src/module2.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/module2/src/module2.kt new file mode 100644 index 00000000000..3a30f60150a --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/module2/src/module2.kt @@ -0,0 +1,5 @@ +package module2 + +fun foo() {} + +public class Module2Class \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/src/test1.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/src/test1.kt new file mode 100644 index 00000000000..8f001cc1b99 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoModules/src/test1.kt @@ -0,0 +1,5 @@ +import module2.Module2Class + +fun foo() { + val tmp = Module2Class() +} \ No newline at end of file