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) +}