From 87523bda63e02d8187e74e29581df4ca67dabee2 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 17 Sep 2012 17:57:01 +0400 Subject: [PATCH] external compiler: added test for forced recompilation of dependent modules --- .../markDirty/transitiveRecompile/build.log | 36 +++++++++++++++++++ .../transitiveRecompile/lib/src/y/Lib.java | 8 +++++ .../lib/src/y/Lib.java.new | 8 +++++ .../lib/testSrc/LibTest.java | 1 + .../markDirty/transitiveRecompile/src/A.java | 7 ++++ .../transitiveRecompile/testSrc/MyTest.java | 1 + .../transitiveRecompile/util/src/x/Util.java | 9 +++++ .../util/src/x/Util.java.new | 10 ++++++ .../util/testSrc/UtilTest.java | 1 + .../jetbrains/ether/IncrementalTestCase.java | 21 +++++++++-- .../org/jetbrains/ether/MarkDirtyTest.java | 27 +++++++------- 11 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new create mode 100644 java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log new file mode 100644 index 000000000000..6a5b0f3a07de --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/build.log @@ -0,0 +1,36 @@ +Cleaning output files: +out/production/lib/y/Lib.class +End of files +Compiling files: +lib/src/y/Lib.java +End of files +Cleaning output files: +out/production/lib/y/Lib.class +End of files +Compiling files: +lib/src/y/Lib.java +End of files +Cleaning output files: +out/test/lib/LibTest.class +End of files +Compiling files: +lib/testSrc/LibTest.java +End of files +Cleaning output files: +out/production/util/x/Util.class +End of files +Compiling files: +util/src/x/Util.java +End of files +Cleaning output files: +out/test/util/UtilTest.class +End of files +Compiling files: +util/testSrc/UtilTest.java +End of files +Cleaning output files: +out/production/TransitiveRecompile/A.class +End of files +Compiling files: +src/A.java +End of files diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java new file mode 100644 index 000000000000..84af745cb81b --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java @@ -0,0 +1,8 @@ +package y; + +public class Lib { + public static final int CONST = 239; + + public static void libMethod() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new new file mode 100644 index 000000000000..9f10ec541fcd --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/src/y/Lib.java.new @@ -0,0 +1,8 @@ +package y; + +public class Lib { + public static final int CONST = 241; + + public static void libMethod() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java new file mode 100644 index 000000000000..3f7cd173aae2 --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/lib/testSrc/LibTest.java @@ -0,0 +1 @@ +class LibTest { } \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java new file mode 100644 index 000000000000..433ebd41f166 --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/src/A.java @@ -0,0 +1,7 @@ +import x.Util; + +public class A { + A() { + Util.utilMethod(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java new file mode 100644 index 000000000000..4e2a15260bd0 --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/testSrc/MyTest.java @@ -0,0 +1 @@ +class MyTest {} \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java new file mode 100644 index 000000000000..5126db91a455 --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java @@ -0,0 +1,9 @@ +package x; + +import y.Lib; + +public class Util { + public static void utilMethod() { + Lib.libMethod(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new new file mode 100644 index 000000000000..9c081e893b2b --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/src/x/Util.java.new @@ -0,0 +1,10 @@ +package x; + +import y.Lib; + +public class Util { + public static int utilMethod() { + Lib.libMethod(); + return 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java new file mode 100644 index 000000000000..478bcf5874ba --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/markDirty/transitiveRecompile/util/testSrc/UtilTest.java @@ -0,0 +1 @@ +public class UtilTest {} \ No newline at end of file diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java index 4ed151e56c70..f237c3077b72 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -30,7 +30,11 @@ import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl; import org.jetbrains.jps.incremental.java.JavaBuilderLogger; import org.jetbrains.jps.model.JpsDummyElement; import org.jetbrains.jps.model.artifact.JpsArtifact; +import org.jetbrains.jps.model.java.JavaSourceRootType; import org.jetbrains.jps.model.java.JpsJavaExtensionService; +import org.jetbrains.jps.model.java.JpsJavaLibraryType; +import org.jetbrains.jps.model.library.JpsLibrary; +import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.model.library.sdk.JpsSdk; import org.jetbrains.jps.model.module.JpsModule; @@ -138,8 +142,11 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase { } protected JpsModule addModule() { - String moduleName = StringUtil.capitalize(getProjectName()); - String srcPath = getAbsolutePath("src"); + return addModule(StringUtil.capitalize(getProjectName()), "src"); + } + + protected JpsModule addModule(final String moduleName, final String srcRootRelativePath) { + String srcPath = getAbsolutePath(srcRootRelativePath); return addModule(moduleName, new String[]{srcPath}, null, getOrCreateJdk()); } @@ -211,6 +218,16 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase { return myJdk; } + protected JpsLibrary addLibrary(final String jarPath) { + JpsLibrary library = myJpsProject.addLibrary("l", JpsJavaLibraryType.INSTANCE); + library.addRoot(new File(getAbsolutePath(jarPath)), JpsOrderRootType.COMPILED); + return library; + } + + protected void addTestRoot(JpsModule module, final String testRootRelativePath) { + module.addSourceRoot(getUrl(testRootRelativePath), JavaSourceRootType.TEST_SOURCE); + } + private static class TestJavaBuilderLogger implements JavaBuilderLogger { private final String myRoot; private final StringBuilder myLog; diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/MarkDirtyTest.java b/jps/jps-builders/testSrc/org/jetbrains/ether/MarkDirtyTest.java index 7b2833009167..b633ef44d007 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/MarkDirtyTest.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/MarkDirtyTest.java @@ -1,15 +1,10 @@ package org.jetbrains.ether; import org.jetbrains.jps.model.JpsModuleRootModificationUtil; -import org.jetbrains.jps.model.java.JavaSourceRootType; import org.jetbrains.jps.model.java.JpsJavaDependencyScope; -import org.jetbrains.jps.model.java.JpsJavaLibraryType; import org.jetbrains.jps.model.library.JpsLibrary; -import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.model.module.JpsModule; -import java.io.File; - /** * Created by IntelliJ IDEA. * User: db @@ -22,21 +17,27 @@ public class MarkDirtyTest extends IncrementalTestCase { super("markDirty"); } - public void testRecompileDependent() throws Exception { + public void testRecompileDependent() { doTest(); } - public void testRecompileDependentTests() throws Exception { + public void testRecompileDependentTests() { JpsModule module = addModule(); - module.addSourceRoot(getUrl("testSrc"), JavaSourceRootType.TEST_SOURCE); - JpsLibrary library = addLibrary(); + addTestRoot(module, "testSrc"); + JpsLibrary library = addLibrary("lib/a.jar"); JpsModuleRootModificationUtil.addDependency(module, library, JpsJavaDependencyScope.TEST, false); doTestBuild().assertSuccessful(); } - private JpsLibrary addLibrary() { - JpsLibrary library = myJpsProject.addLibrary("l", JpsJavaLibraryType.INSTANCE); - library.addRoot(new File(getAbsolutePath("lib/a.jar")), JpsOrderRootType.COMPILED); - return library; + public void testTransitiveRecompile() { + JpsModule module = addModule(); + addTestRoot(module, "testSrc"); + JpsModule util = addModule("util", "util/src"); + addTestRoot(util, "util/testSrc"); + JpsModuleRootModificationUtil.addDependency(module, util); + JpsModule lib = addModule("lib", "lib/src"); + addTestRoot(lib, "lib/testSrc"); + JpsModuleRootModificationUtil.addDependency(util, lib); + doTestBuild().assertSuccessful(); } }