jps model: use production output directory for tests if tests output isn't specified
authornik <Nikolay.Chashnikov@jetbrains.com>
Fri, 31 Aug 2012 06:01:59 +0000 (10:01 +0400)
committernik <Nikolay.Chashnikov@jetbrains.com>
Fri, 31 Aug 2012 06:01:59 +0000 (10:01 +0400)
jps/model-serialization/src/org/jetbrains/jps/model/serialization/java/JpsJavaModelSerializerExtension.java
jps/model-serialization/testData/sampleProject/.idea/modules.xml
jps/model-serialization/testData/sampleProject/xxx/xxx.iml [new file with mode: 0644]
jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsProjectSerializationTest.java

index 48ade2f7c6f0e60a678fba43db66ce7c27b8571a..e3eed18ef439355fe33a4085aefd6d3eded1cfb7 100644 (file)
@@ -1,6 +1,7 @@
 package org.jetbrains.jps.model.serialization.java;
 
 import com.intellij.openapi.util.JDOMUtil;
+import com.intellij.openapi.util.text.StringUtil;
 import org.jdom.Element;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.jps.model.JpsElementFactory;
@@ -121,13 +122,12 @@ public class JpsJavaModelSerializerExtension extends JpsModelSerializerExtension
   private static void loadJavaModuleExtension(JpsModule module, Element rootModelComponent) {
     final JpsJavaModuleExtension extension = getService().getOrCreateModuleExtension(module);
     final Element outputTag = rootModelComponent.getChild(OUTPUT_TAG);
-    if (outputTag != null) {
-      extension.setOutputUrl(outputTag.getAttributeValue(URL_ATTRIBUTE));
-    }
+    String outputUrl = outputTag != null ? outputTag.getAttributeValue(URL_ATTRIBUTE) : null;
+    extension.setOutputUrl(outputUrl);
     final Element testOutputTag = rootModelComponent.getChild(TEST_OUTPUT_TAG);
-    if (testOutputTag != null) {
-      extension.setTestOutputUrl(testOutputTag.getAttributeValue(URL_ATTRIBUTE));
-    }
+    String testOutputUrl = testOutputTag != null ? testOutputTag.getAttributeValue(URL_ATTRIBUTE) : null;
+    extension.setTestOutputUrl(StringUtil.isEmpty(testOutputUrl) ? outputUrl : testOutputUrl);
+
     extension.setInheritOutput(Boolean.parseBoolean(rootModelComponent.getAttributeValue(INHERIT_COMPILER_OUTPUT_ATTRIBUTE)));
     extension.setExcludeOutput(rootModelComponent.getChild(EXCLUDE_OUTPUT_TAG) != null);
 
index 49067b47ab535e5f88b1d3b2fced3e6b62b075eb..8024c0144276f9438efcd52cd13859dc30cbe49c 100644 (file)
@@ -4,6 +4,7 @@
     <modules>
       <module fileurl="file://$PROJECT_DIR$/main.iml" filepath="$PROJECT_DIR$/main.iml" />
       <module fileurl="file://$PROJECT_DIR$/util/util.iml" filepath="$PROJECT_DIR$/util/util.iml" />
+      <module fileurl="file://$PROJECT_DIR$/xxx/xxx.iml" filepath="$PROJECT_DIR$/xxx/xxx.iml" />
     </modules>
   </component>
 </project>
diff --git a/jps/model-serialization/testData/sampleProject/xxx/xxx.iml b/jps/model-serialization/testData/sampleProject/xxx/xxx.iml
new file mode 100644 (file)
index 0000000..36d6b2f
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="false">
+    <output url="file://$MODULE_DIR$/output" />
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/testSrc" isTestSource="true" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
index 0d946e278ba6e65de71384ce947856aa9d320d63..85bcc0cffe2cb5cd3e4bdf447ccd18200940b291 100644 (file)
@@ -4,6 +4,7 @@ import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.testFramework.PlatformTestUtil;
 import org.jdom.Element;
 import org.jetbrains.jps.model.JpsProject;
+import org.jetbrains.jps.model.java.JpsJavaExtensionService;
 import org.jetbrains.jps.model.java.JpsJavaSdkType;
 import org.jetbrains.jps.model.library.JpsLibrary;
 import org.jetbrains.jps.model.library.sdk.JpsSdkReference;
@@ -23,11 +24,13 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
   public void testLoadProject() {
     loadProject(SAMPLE_PROJECT_PATH);
     List<JpsModule> modules = myProject.getModules();
-    assertEquals(2, modules.size());
+    assertEquals(3, modules.size());
     JpsModule main = modules.get(0);
     assertEquals("main", main.getName());
     JpsModule util = modules.get(1);
     assertEquals("util", util.getName());
+    JpsModule xxx = modules.get(2);
+    assertEquals("xxx", xxx.getName());
 
     List<JpsLibrary> libraries = myProject.getLibraryCollection().getLibraries();
     assertEquals(3, libraries.size());
@@ -47,15 +50,18 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
     JpsSdkReference<?> projectSdkReference = inheritedSdkDependency.getSdkReference();
     assertNotNull(projectSdkReference);
     assertEquals("1.6", projectSdkReference.getSdkName());
+
+    assertEquals(getUrl("xxx/output"), JpsJavaExtensionService.getInstance().getOutputUrl(xxx, true));
+    assertEquals(getUrl("xxx/output"), JpsJavaExtensionService.getInstance().getOutputUrl(xxx, false));
   }
 
   public void testSaveProject() {
     loadProject(SAMPLE_PROJECT_PATH);
-    JpsModule main = myProject.getModules().get(0);
-    doTestSaveModule(main, "main.iml");
-
-    JpsModule util = myProject.getModules().get(1);
-    doTestSaveModule(util, "util/util.iml");
+    List<JpsModule> modules = myProject.getModules();
+    doTestSaveModule(modules.get(0), "main.iml");
+    doTestSaveModule(modules.get(1), "util/util.iml");
+    //tod[nik] remember that test output root wasn't specified and doesn't save it to avoid unnecessary modifications of iml files
+    //doTestSaveModule(modules.get(2), "xxx/xxx.iml");
 
     File[] libs = getFileInSampleProject(".idea/libraries").listFiles();
     assertNotNull(libs);