diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java
index f143abfa048..ec46b8e1073 100644
--- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java
+++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java
@@ -158,20 +158,63 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase {
checkWhen(touch("src/main.kt"), null, packageClasses("kotlinProject", "src/main.kt", "foo.FooPackage"));
checkWhen(touch("src/boo.kt"), null, packageClasses("kotlinProject", "src/boo.kt", "boo.BooPackage"));
- checkWhen(touch("src/Bar.kt"), null, new String[] {klass("kotlinProject", "foo.Bar")});
+ checkWhen(touch("src/Bar.kt"),
+ new String[] {"src/Bar.kt", "src/boo.kt", "src/main.kt"},
+ new String[] {klass("kotlinProject", "foo.Bar")});
- checkWhen(del("src/main.kt"), null, packageClasses("kotlinProject", "src/main.kt", "foo.FooPackage"));
+ checkWhen(del("src/main.kt"),
+ new String[] {"src/Bar.kt", "src/boo.kt"},
+ packageClasses("kotlinProject", "src/main.kt", "foo.FooPackage"));
+ assertFilesExistInOutput(module, "boo/BooPackage.class", "foo/Bar.class");
assertFilesNotExistInOutput(module, "foo/FooPackage.class");
checkWhen(touch("src/boo.kt"), null, packageClasses("kotlinProject", "src/boo.kt", "boo.BooPackage"));
checkWhen(touch("src/Bar.kt"), null, new String[] {klass("kotlinProject", "foo.Bar")});
}
+ public void testManyFilesForPackage() {
+ doTest();
+
+ JpsModule module = myProject.getModules().get(0);
+ assertFilesExistInOutput(module, "foo/FooPackage.class", "boo/BooPackage.class", "foo/Bar.class");
+
+ checkWhen(touch("src/main.kt"), null, packageClasses("kotlinProject", "src/main.kt", "foo.FooPackage"));
+ checkWhen(touch("src/boo.kt"), null, packageClasses("kotlinProject", "src/boo.kt", "boo.BooPackage"));
+ checkWhen(touch("src/Bar.kt"),
+ new String[] {"src/Bar.kt", "src/boo.kt", "src/main.kt"},
+ new String[] {
+ klass("kotlinProject", "foo.Bar"),
+ klass("kotlinProject", "foo.FooPackage"),
+ packagePartClass("kotlinProject", "src/Bar.kt", "foo.FooPackage")});
+
+ checkWhen(del("src/main.kt"),
+ new String[] {"src/Bar.kt", "src/boo.kt"},
+ packageClasses("kotlinProject", "src/main.kt", "foo.FooPackage"));
+ assertFilesExistInOutput(module, "foo/FooPackage.class", "boo/BooPackage.class", "foo/Bar.class");
+
+ checkWhen(touch("src/boo.kt"), null, packageClasses("kotlinProject", "src/boo.kt", "boo.BooPackage"));
+ checkWhen(touch("src/Bar.kt"), null,
+ new String[] {
+ klass("kotlinProject", "foo.Bar"),
+ klass("kotlinProject", "foo.FooPackage"),
+ packagePartClass("kotlinProject", "src/Bar.kt", "foo.FooPackage")
+ });
+ }
+
public void testKotlinProjectTwoFilesInOnePackage() {
doTest();
checkWhen(touch("src/test1.kt"), null, packageClasses("kotlinProject", "src/test1.kt", "_DefaultPackage"));
checkWhen(touch("src/test2.kt"), null, packageClasses("kotlinProject", "src/test2.kt", "_DefaultPackage"));
+
+ checkWhen(new Action[]{ del("src/test1.kt"), del("src/test2.kt") }, NOTHING,
+ new String[] {
+ packagePartClass("kotlinProject", "src/test1.kt", "_DefaultPackage"),
+ packagePartClass("kotlinProject", "src/test2.kt", "_DefaultPackage"),
+ klass("kotlinProject", "_DefaultPackage")
+ });
+
+ assertFilesNotExistInOutput(myProject.getModules().get(0), "_DefaultPackage.class");
}
public void testKotlinJavaProject() {
@@ -310,7 +353,14 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase {
}
private void checkWhen(Action action, @Nullable String[] pathsToCompile, @Nullable String[] pathsToDelete) {
- action.apply();
+ checkWhen(new Action[]{action}, pathsToCompile, pathsToDelete);
+ }
+
+ private void checkWhen(Action[] actions, @Nullable String[] pathsToCompile, @Nullable String[] pathsToDelete) {
+ for (Action action : actions) {
+ action.apply();
+ }
+
makeAll().assertSuccessful();
if (pathsToCompile != null) {
diff --git a/jps/jps-plugin/testData/general/ManyFilesForPackage/kotlinProject.iml b/jps/jps-plugin/testData/general/ManyFilesForPackage/kotlinProject.iml
new file mode 100644
index 00000000000..0c4fb67a3d4
--- /dev/null
+++ b/jps/jps-plugin/testData/general/ManyFilesForPackage/kotlinProject.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jps/jps-plugin/testData/general/ManyFilesForPackage/kotlinProject.ipr b/jps/jps-plugin/testData/general/ManyFilesForPackage/kotlinProject.ipr
new file mode 100644
index 00000000000..8226e21ade3
--- /dev/null
+++ b/jps/jps-plugin/testData/general/ManyFilesForPackage/kotlinProject.ipr
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jps/jps-plugin/testData/general/ManyFilesForPackage/src/Bar.kt b/jps/jps-plugin/testData/general/ManyFilesForPackage/src/Bar.kt
new file mode 100644
index 00000000000..ae9e0be1836
--- /dev/null
+++ b/jps/jps-plugin/testData/general/ManyFilesForPackage/src/Bar.kt
@@ -0,0 +1,5 @@
+package foo
+
+class Bar
+
+fun other() {}
diff --git a/jps/jps-plugin/testData/general/ManyFilesForPackage/src/boo.kt b/jps/jps-plugin/testData/general/ManyFilesForPackage/src/boo.kt
new file mode 100644
index 00000000000..e9a050624da
--- /dev/null
+++ b/jps/jps-plugin/testData/general/ManyFilesForPackage/src/boo.kt
@@ -0,0 +1,6 @@
+package boo
+
+import foo.Bar
+
+fun boo(bar: Bar) {
+}
diff --git a/jps/jps-plugin/testData/general/ManyFilesForPackage/src/main.kt b/jps/jps-plugin/testData/general/ManyFilesForPackage/src/main.kt
new file mode 100644
index 00000000000..cfcbc18690b
--- /dev/null
+++ b/jps/jps-plugin/testData/general/ManyFilesForPackage/src/main.kt
@@ -0,0 +1,8 @@
+package foo
+
+import boo.boo
+
+fun main(args: Array) {
+ val bar = Bar()
+ boo(bar)
+}