get rid of intellij.build.toolbox.litegen parameter and use BuildOptions.TOOLBOX_LITE...
[idea/community.git] / java / java-tests / testSrc / com / intellij / roots / ManagingContentRootsTest.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.roots;
17
18 import com.intellij.openapi.application.ApplicationManager;
19 import com.intellij.openapi.roots.*;
20 import com.intellij.openapi.roots.impl.ContentEntryImpl;
21 import com.intellij.openapi.roots.impl.ModuleRootManagerComponent;
22 import com.intellij.openapi.roots.impl.ModuleRootManagerImpl;
23 import com.intellij.openapi.util.JDOMUtil;
24 import com.intellij.openapi.vfs.LocalFileSystem;
25 import com.intellij.openapi.vfs.VirtualFile;
26 import com.intellij.testFramework.JavaProjectTestCase;
27 import com.intellij.testFramework.PsiTestUtil;
28 import org.jdom.Element;
29 import org.jdom.JDOMException;
30
31 import java.io.IOException;
32
33 import static com.intellij.testFramework.assertions.Assertions.assertThat;
34
35 public class ManagingContentRootsTest extends JavaProjectTestCase {
36   private VirtualFile dir;
37
38   @Override
39   protected void setUp() throws Exception {
40     super.setUp();
41     ApplicationManager.getApplication().runWriteAction(() -> {
42       try {
43         LocalFileSystem fs = LocalFileSystem.getInstance();
44         dir = fs.refreshAndFindFileByIoFile(createTempDirectory());
45       }
46       catch (IOException e) {
47         throw new RuntimeException(e);
48       }
49     });
50   }
51
52   public void testCreationOfContentRootWithFile() {
53     VirtualFile root = createChildDirectory(dir, "root");
54     String url = root.getUrl();
55
56     PsiTestUtil.addContentRoot(myModule, root);
57
58
59     assertEquals(root, findContentEntry(url).getFile());
60
61     delete(root);
62     assertNotNull(findContentEntry(url));
63
64     root = createChildDirectory(dir, "root");
65     assertEquals(root, findContentEntry(url).getFile());
66   }
67
68   public void testCreationOfContentRootWithUrl() {
69     VirtualFile root = createChildDirectory(dir, "root");
70     String url = root.getUrl();
71     String path = root.getPath();
72     delete(root);
73
74     addContentRoot(path);
75
76     assertNotNull(findContentEntry(url));
77
78     root = createChildDirectory(dir, "root");
79     assertEquals(root, findContentEntry(url).getFile());
80   }
81
82   public void testCreationOfContentRootWithUrlWhenFileExists() {
83     VirtualFile root = createChildDirectory(dir, "root");
84     addContentRoot(root.getPath());
85     assertEquals(root, findContentEntry(root.getUrl()).getFile());
86   }
87
88   public void testGettingModifiableModelCorrectlySetsRootModelForContentEntries() {
89     ApplicationManager.getApplication().runWriteAction(() -> {
90       PsiTestUtil.addContentRoot(myModule, dir);
91
92       ModifiableRootModel m = getRootManager().getModifiableModel();
93       ContentEntry e = findContentEntry(dir.getUrl(), m);
94
95       assertSame(m, ((ContentEntryImpl)e).getRootModel());
96       m.dispose();
97     });
98   }
99
100   public void testAddExcludePattern() {
101     PsiTestUtil.addContentRoot(myModule, dir);
102     ModuleRootModificationUtil.updateModel(myModule, model -> findContentEntry(dir.getUrl(), model).addExcludePattern("*.txt"));
103     assertEquals("*.txt", assertOneElement(findContentEntry(dir.getUrl()).getExcludePatterns()));
104     ModuleRootModificationUtil.updateModel(myModule, model -> findContentEntry(dir.getUrl(), model).removeExcludePattern("*.txt"));
105     assertEmpty(findContentEntry(dir.getUrl()).getExcludePatterns());
106   }
107
108   public void testExcludePatternSerialization() {
109     PsiTestUtil.addContentRoot(myModule, dir);
110     ModuleRootModificationUtil.updateModel(myModule, model -> findContentEntry(dir.getUrl(), model).addExcludePattern("exc"));
111     Element entry = new Element(ContentEntryImpl.ELEMENT_NAME);
112     ((ContentEntryImpl)findContentEntry(dir.getUrl())).writeExternal(entry);
113     String elementText = "<content url=\"" + dir.getUrl() + "\">\n" +
114                          "  <excludePattern pattern=\"exc\" />\n" +
115                          "</content>";
116     assertThat(entry).isEqualTo(elementText);
117   }
118
119   public void testExcludePatternDeserialization() throws IOException, JDOMException {
120     ModuleRootManagerImpl.ModuleRootManagerState state = new ModuleRootManagerImpl.ModuleRootManagerState();
121     state.readExternal(JDOMUtil.load("<component name=\"NewModuleRootManager\">" +
122                                      "  <content url=\"" + dir.getUrl() + "\">\n" +
123                                      "    <excludePattern pattern=\"exc\" />\n" +
124                                      "  </content>" +
125                                      "</component>\n"));
126     ((ModuleRootManagerComponent)getRootManager()).loadState(state);
127     assertEquals("exc", assertOneElement(findContentEntry(dir.getUrl()).getExcludePatterns()));
128   }
129
130   private ContentEntry findContentEntry(String url) {
131     return findContentEntry(url, getRootManager());
132   }
133
134   private static ContentEntry findContentEntry(String url, ModuleRootModel m) {
135     for (ContentEntry e : m.getContentEntries()) {
136       if (e.getUrl().equals(url)) return e;
137     }
138     return null;
139   }
140
141   private void addContentRoot(final String path) {
142     ModuleRootModificationUtil.addContentRoot(getModule(), path);
143   }
144
145   private ModuleRootManager getRootManager() {
146     return ModuleRootManager.getInstance(myModule);
147   }
148 }