JS: add jps build test for Kotlin/Javascript two-module project

Original commit: 563ab47502
This commit is contained in:
Michael Nedzelsky
2015-03-26 17:59:48 +03:00
parent d6c1dc94b5
commit ee825b9cf3
6 changed files with 85 additions and 6 deletions
@@ -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<String> 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<String> 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;
}
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="kotlinProject" />
<orderEntry type="module" module-name="module2" />
</component>
</module>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
</component>
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/kotlinProject.iml" filepath="$PROJECT_DIR$/kotlinProject.iml" />
<module fileurl="file://$PROJECT_DIR$/module2/module2.iml" filepath="$PROJECT_DIR$/module2/module2.iml" />
</modules>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA_JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="IDEA_JDK" jdkType="JavaSDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="module2" />
</component>
</module>
@@ -0,0 +1,5 @@
package module2
fun foo() {}
public class Module2Class
@@ -0,0 +1,5 @@
import module2.Module2Class
fun foo() {
val tmp = Module2Class()
}