IDEA-134502 Custom file templates are gone phpstorm/140.1301
authorDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Tue, 23 Dec 2014 10:42:09 +0000 (13:42 +0300)
committerDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Tue, 23 Dec 2014 10:48:14 +0000 (13:48 +0300)
java/java-tests/testSrc/com/intellij/ide/fileTemplates/impl/FileTemplateTestUtil.java
platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateManager.java
platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/FTManager.java
platform/platform-tests/testSrc/com/intellij/ide/fileTemplates/impl/LightFileTemplatesTest.java
platform/platform-tests/testSrc/com/intellij/ide/fileTemplates/impl/SimpleTemplatesTest.java [moved from java/java-tests/testSrc/com/intellij/ide/fileTemplates/SimpleTemplatesTest.java with 90% similarity]

index 305454563ab8f6baa9261f3cb1a0038c6200ea54..77be162dce7c0f123746f2b9148bea9cf3a0b891 100644 (file)
@@ -39,11 +39,6 @@ public class FileTemplateTestUtil {
     public File getConfigRoot(boolean create) {
       return myTestConfigDir;
     }
-
-    @Override
-    public void saveTemplates() {
-      super.saveTemplates();
-    }
   }
 
   public static void loadCustomizedContent(FTManager templateManager) {
index d8228a2650e5e9fa1005df25e1acad7376a61e1e..d5fc0944c8d18885c9fc465f348d6537cdc79311 100644 (file)
@@ -79,6 +79,9 @@ public abstract class FileTemplateManager{
 
   public abstract FileTemplate[] getTemplates(String category);
 
+  /**
+   *  Returns all templates from "Default" category.
+   */
   @NotNull
   public abstract FileTemplate[] getAllTemplates();
 
@@ -96,7 +99,7 @@ public abstract class FileTemplateManager{
   }
 
   /**
-   * Creates a new template with specified name.
+   * Creates a new template with specified name, and adds it to the list of default templates.
    * @return created template
    */
   @NotNull 
index e5c7b5e08fd409c16a1313f5dcdac7c45b5ebb7c..92085534bf985ba4c04d5e1548305fb54f940214 100644 (file)
@@ -45,6 +45,8 @@ class FTManager {
   private final String myName;
   private final boolean myInternal;
   private final String myTemplatesDir;
+  @Nullable
+  private final FTManager myOriginal;
   private FileTemplatesScheme myScheme = FileTemplatesScheme.DEFAULT;
   private final Map<String, FileTemplateBase> myTemplates = new HashMap<String, FileTemplateBase>();
   private volatile List<FileTemplateBase> mySortedTemplates;
@@ -58,9 +60,11 @@ class FTManager {
     myName = name;
     myInternal = internal;
     myTemplatesDir = defaultTemplatesDirName;
+    myOriginal = null;
   }
 
   FTManager(FTManager original) {
+    myOriginal = original;
     myName = original.getName();
     myTemplatesDir = original.myTemplatesDir;
     myInternal = original.myInternal;
@@ -265,6 +269,12 @@ class FTManager {
   }
 
   public void saveTemplates() {
+    if (myOriginal != null) {
+      myOriginal.myDefaultTemplates.clear();
+      myOriginal.myDefaultTemplates.addAll(myDefaultTemplates);
+      myOriginal.myTemplates.clear();
+      myOriginal.myTemplates.putAll(myTemplates);
+    }
     final File configRoot = getConfigRoot(true);
 
     final File[] files = configRoot.listFiles();
index 00f0c91b25b57b95f856492c48cc3ac723f672c6..3eba2bd1493edebb3d445e1494516f3b54201b0b 100644 (file)
@@ -18,18 +18,24 @@ package com.intellij.ide.fileTemplates.impl;
 import com.intellij.ide.fileTemplates.FileTemplate;
 import com.intellij.ide.fileTemplates.FileTemplateManager;
 import com.intellij.ide.fileTemplates.FileTemplatesScheme;
+import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectManager;
+import com.intellij.openapi.util.Disposer;
 import com.intellij.testFramework.LightPlatformTestCase;
 import com.intellij.testFramework.PlatformTestCase;
 import com.intellij.util.ArrayUtil;
 
+import java.io.File;
+import java.util.Arrays;
+
 /**
  * @author Dmitry Avdeev
  */
 public class LightFileTemplatesTest extends LightPlatformTestCase {
 
   public static final String TEST_TEMPLATE_TXT = "testTemplate.txt";
+  public static final String HI_THERE = "hi there";
 
   @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
   public LightFileTemplatesTest() {
@@ -40,15 +46,16 @@ public class LightFileTemplatesTest extends LightPlatformTestCase {
     assertEquals(FileTemplatesScheme.DEFAULT, myTemplateManager.getCurrentScheme());
 
     FileTemplate template = myTemplateManager.getTemplate(TEST_TEMPLATE_TXT);
-    assertEquals("hi there", template.getText());
-    template.setText("good bye");
-    assertEquals("good bye", myTemplateManager.getTemplate(TEST_TEMPLATE_TXT).getText());
+    assertEquals(HI_THERE, template.getText());
+    String newText = "good bye";
+    template.setText(newText);
+    assertEquals(newText, myTemplateManager.getTemplate(TEST_TEMPLATE_TXT).getText());
 
     myTemplateManager.setCurrentScheme(myTemplateManager.getProjectScheme());
-    assertEquals("hi there", myTemplateManager.getTemplate(TEST_TEMPLATE_TXT).getText());
+    assertEquals(HI_THERE, myTemplateManager.getTemplate(TEST_TEMPLATE_TXT).getText());
 
     myTemplateManager.setCurrentScheme(FileTemplatesScheme.DEFAULT);
-    assertEquals("good bye", myTemplateManager.getTemplate(TEST_TEMPLATE_TXT).getText());
+    assertEquals(newText, myTemplateManager.getTemplate(TEST_TEMPLATE_TXT).getText());
   }
 
   public void testDefaultProject() throws Exception {
@@ -86,6 +93,30 @@ public class LightFileTemplatesTest extends LightPlatformTestCase {
     }
   }
 
+  public void testPreserveCustomTemplates() throws Exception {
+    myTemplateManager.addTemplate("foo", "txt");
+    myTemplateManager.setTemplates(FileTemplateManager.DEFAULT_TEMPLATES_CATEGORY, Arrays.asList(myTemplateManager.getAllTemplates()));
+    assertNotNull(myTemplateManager.getTemplate("foo.txt"));
+
+    File foo = PlatformTestCase.createTempDir("foo");
+    final Project project = ProjectManager.getInstance().createProject("foo", foo.getPath());;
+    try {
+      assertNotNull(project);
+      assertNotNull(FileTemplateManager.getInstance(project).getTemplate("foo.txt"));
+    }
+    finally {
+      if (project != null) {
+        ProjectManager.getInstance().closeProject(project);
+        ApplicationManager.getApplication().runWriteAction(new Runnable() {
+          @Override
+          public void run() {
+            Disposer.dispose(project);
+          }
+        });
+      }
+    }
+  }
+
   private FileTemplateManagerImpl myTemplateManager;
 
   @Override
similarity index 90%
rename from java/java-tests/testSrc/com/intellij/ide/fileTemplates/SimpleTemplatesTest.java
rename to platform/platform-tests/testSrc/com/intellij/ide/fileTemplates/impl/SimpleTemplatesTest.java
index 193dd7d6be4ad9cf66be777bf7a9794f8c709321..7802540b6996f090c023c653978750d6731f99c5 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package com.intellij.ide.fileTemplates;
+package com.intellij.ide.fileTemplates.impl;
 
-import com.intellij.ide.fileTemplates.impl.CustomFileTemplate;
-import com.intellij.testFramework.IdeaTestCase;
 import com.intellij.testFramework.LightPlatformTestCase;
+import com.intellij.testFramework.PlatformTestCase;
 
 import java.util.Properties;
 
@@ -28,7 +27,7 @@ public class SimpleTemplatesTest extends LightPlatformTestCase {
 
   @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors")
   public SimpleTemplatesTest() {
-    IdeaTestCase.initPlatformPrefix();
+    PlatformTestCase.initPlatformLangPrefix();
   }
 
   public void testConditional() throws Exception {