diff --git a/java/java-tests/testSrc/com/intellij/roots/ManagingContentRootsTest.java b/java/java-tests/testSrc/com/intellij/roots/ManagingContentRootsTest.java index 04ed4ceb87e5..c61bcce0c6e2 100644 --- a/java/java-tests/testSrc/com/intellij/roots/ManagingContentRootsTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/ManagingContentRootsTest.java @@ -15,23 +15,24 @@ */ package com.intellij.roots; +import com.intellij.configurationStore.StoreUtil; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.impl.ContentEntryImpl; -import com.intellij.openapi.roots.impl.ModuleRootManagerComponent; -import com.intellij.openapi.roots.impl.ModuleRootManagerImpl; import com.intellij.openapi.util.JDOMUtil; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.JavaProjectTestCase; import com.intellij.testFramework.PsiTestUtil; import org.jdom.Element; -import org.jdom.JDOMException; +import java.io.File; import java.io.IOException; -import static com.intellij.testFramework.assertions.Assertions.assertThat; - public class ManagingContentRootsTest extends JavaProjectTestCase { private VirtualFile dir; @@ -105,26 +106,36 @@ public class ManagingContentRootsTest extends JavaProjectTestCase { assertEmpty(findContentEntry(dir.getUrl()).getExcludePatterns()); } - public void testExcludePatternSerialization() { + public void testExcludePatternSerialization() throws Exception { PsiTestUtil.addContentRoot(myModule, dir); ModuleRootModificationUtil.updateModel(myModule, model -> findContentEntry(dir.getUrl(), model).addExcludePattern("exc")); - Element entry = new Element(ContentEntryImpl.ELEMENT_NAME); - ((ContentEntryImpl)findContentEntry(dir.getUrl())).writeExternal(entry); - String elementText = "\n" + + StoreUtil.saveSettings(myModule, false); + + Element root = JDOMUtil.load(new File(myModule.getModuleFilePath())); + String elementText = "\n" + " \n" + ""; - assertThat(entry).isEqualTo(elementText); + assertEquals(elementText, JDOMUtil.writeElement(root.getChild("component").getChild("content"))); } - public void testExcludePatternDeserialization() throws IOException, JDOMException { - ModuleRootManagerImpl.ModuleRootManagerState state = new ModuleRootManagerImpl.ModuleRootManagerState(); - state.readExternal(JDOMUtil.load("" + - " \n" + - " \n" + - " " + - "\n")); - ((ModuleRootManagerComponent)getRootManager()).loadState(state); - assertEquals("exc", assertOneElement(findContentEntry(dir.getUrl()).getExcludePatterns())); + public void testExcludePatternDeserialization() throws Exception { + File dir = createTempDir("module"); + String dirUrl = VfsUtilCore.fileToUrl(dir); + + File iml = new File("module.iml"); + FileUtil.writeToFile( + iml, + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + ""); + + Module module = WriteAction.computeAndWait(() -> ModuleManager.getInstance(myProject).loadModule(iml.getPath())); + assertEquals("exc", assertOneElement(findContentEntry(dirUrl, ModuleRootManager.getInstance(module)).getExcludePatterns())); } private ContentEntry findContentEntry(String url) { diff --git a/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java b/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java index 328417e301ae..85cd8f524ab2 100644 --- a/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/libraries/LibraryTest.java @@ -2,19 +2,23 @@ package com.intellij.roots.libraries; import com.intellij.ProjectTopics; +import com.intellij.configurationStore.StoreUtil; import com.intellij.java.codeInsight.daemon.quickFix.OrderEntryTest; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.roots.*; import com.intellij.openapi.roots.impl.OrderEntryUtil; -import com.intellij.openapi.roots.impl.libraries.*; +import com.intellij.openapi.roots.impl.libraries.LibraryEx; +import com.intellij.openapi.roots.impl.libraries.LibraryTableBase; +import com.intellij.openapi.roots.impl.libraries.LibraryTableImplUtil; +import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTableImpl; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryTable; import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; +import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.*; import com.intellij.psi.JavaPsiFacade; import com.intellij.psi.PsiClass; import com.intellij.psi.search.GlobalSearchScope; @@ -69,26 +73,33 @@ public class LibraryTest extends ModuleRootManagerTestCase { assertFalse(LibraryTableImplUtil.isValidLibrary(library)); } - public void testLibrarySerialization() { + public void testLibrarySerialization() throws IOException { final long moduleModificationCount = ModuleRootManagerEx.getInstanceEx(myModule).getModificationCountForTests(); - Library library = PsiTestUtil.addProjectLibrary(myModule, "junit", Collections.singletonList(getJDomJar()), - Collections.singletonList(getJDomSources())); + + File projectDir = new File(myProject.getBasePath()); + File localJDomJar = new File(projectDir, getJDomJar().getName()); + File localJDomSources = new File(projectDir, getJDomSources().getName()); + + FileUtil.copy(new File(getJDomJar().getPath().replace("!", "")), localJDomJar); + FileUtil.copy(new File(getJDomSources().getPath().replace("!", "")), localJDomSources); + + PsiTestUtil.addProjectLibrary( + myModule, "junit", + Collections.singletonList(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(localJDomJar)), + Collections.singletonList(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(localJDomSources))); assertThat(ModuleRootManagerEx.getInstanceEx(myModule).getModificationCountForTests()).isGreaterThan(moduleModificationCount); - Element element = serialize(library); - String classesUrl = getJDomJar().getUrl(); - String sourcesUrl = getJDomSources().getUrl(); - assertThat(element).isEqualTo("\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - ""); + assertThat(serializeLibraries()).isEqualTo( + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "" + ); } public void testResolveDependencyToAddedLibrary() { @@ -265,22 +276,21 @@ public class LibraryTest extends ModuleRootManagerTestCase { public void testNativePathSerialization() { LibraryTable table = getProjectLibraryTable(); - Library library = WriteAction.compute(()-> table.createLibrary("native")); + Library library = WriteAction.compute(() -> table.createLibrary("native")); Library.ModifiableModel model = library.getModifiableModel(); model.addRoot("file://native-lib-root", NativeLibraryOrderRootType.getInstance()); commit(model); - Element element = serialize(library); - assertThat(element).isEqualTo("\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - ""); + assertThat(serializeLibraries()).isEqualTo( + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "" + ); } @NotNull @@ -297,27 +307,41 @@ public class LibraryTest extends ModuleRootManagerTestCase { model.addJarDirectory("file://jar-dir-src", false, OrderRootType.SOURCES); commit(model); - assertThat(serialize(library)).isEqualTo("\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - ""); + assertThat(serializeLibraries()).isEqualTo( + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "" + ); } - private static Element serialize(Library library) { - Element element = new Element("root"); - library.writeExternal(element); - return element; + private String serializeLibraries() { + StoreUtil.saveSettings(myProject); + + try { + StringBuilder sb = new StringBuilder(); + Element root = JDOMUtil.load(new File(myProject.getProjectFilePath())); + for (Element componentElement : root.getChildren("component")) { + if ("libraryTable".equals(componentElement.getAttributeValue("name"))) { + for (Element libraryElement : componentElement.getChildren("library")) { + sb.append(JDOMUtil.writeElement(libraryElement)); + } + } + } + return sb.toString(); + } + catch (Exception e) { + throw new RuntimeException(e); + } } public void testAddRemoveJarDirectory() {