/** * Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Created on May 21, 2006 */ package org.python.pydev.editor.codecompletion.revisited; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.SortedMap; import java.util.TreeSet; import org.python.pydev.core.ModulesKey; import org.python.pydev.core.ModulesKeyForZip; import org.python.pydev.shared_core.io.FileUtils; import org.python.pydev.shared_core.structure.Tuple; public class ModulesManagerTest extends CodeCompletionTestsBase { public static void main(String[] args) { try { ModulesManagerTest test = new ModulesManagerTest(); test.setUp(); test.testRestoreContents2(); test.tearDown(); junit.textui.TestRunner.run(ModulesManagerTest.class); } catch (Exception e) { e.printStackTrace(); } } @Override public void setUp() throws Exception { super.setUp(); this.restorePythonPath(false); } public void __testIt() throws Exception { //change: returns itself too ProjectModulesManager modulesManager = (ProjectModulesManager) nature2.getAstManager().getModulesManager(); assertEquals(1 + 1, modulesManager.getManagersInvolved(false).length); assertEquals(2 + 1, modulesManager.getManagersInvolved(true).length); assertEquals(0 + 1, modulesManager.getRefencingManagersInvolved(false).length); assertEquals(1 + 1, modulesManager.getRefencingManagersInvolved(true).length); ProjectModulesManager modulesManager2 = (ProjectModulesManager) nature.getAstManager().getModulesManager(); assertEquals(0 + 1, modulesManager2.getManagersInvolved(false).length); assertEquals(1 + 1, modulesManager2.getManagersInvolved(true).length); assertEquals(1 + 1, modulesManager2.getRefencingManagersInvolved(false).length); assertEquals(2 + 1, modulesManager2.getRefencingManagersInvolved(true).length); } public void testDiffModules() { ModulesKey a = new ModulesKey("a", null); ModulesKey b = new ModulesKey("b", null); ModulesKey c = new ModulesKey("c", null); ProjectModulesManager manager = new ProjectModulesManager(); manager.addModule(a); manager.addModule(b); PyPublicTreeMap<ModulesKey, ModulesKey> m = new PyPublicTreeMap<>(); m.put(b, b); m.put(c, c); Tuple<List<ModulesKey>, List<ModulesKey>> delta = manager.diffModules(m); Set<ModulesKey> added = new TreeSet<>(); added.add(c); assertEqualContents(added, delta.o1); Set<ModulesKey> removed = new TreeSet<>(); removed.add(a); assertEqualContents(removed, delta.o2); } private void assertEqualContents(Collection<ModulesKey> s1, Collection<ModulesKey> s2) { assertTrue(s2.containsAll(s1)); assertTrue(s1.containsAll(s2)); } public void testLoad() throws Exception { SystemModulesManager manager = new SystemModulesManager(null); manager.addModule(new ModulesKey("bar", new File("bar.py"))); manager.addModule(new ModulesKey("foo", new File("foo.py"))); manager.addModule(new ModulesKey("empty", null)); manager.addModule(new ModulesKeyForZip("zip", new File("zip.zip"), "path", true)); PythonPathHelper pythonPathHelper = manager.getPythonPathHelper(); pythonPathHelper.setPythonPath("rara|boo"); assertEquals(Arrays.asList("rara", "boo"), manager.getPythonPathHelper().getPythonpath()); File f = new File("modules_manager_testing.temporary_dir"); try { FileUtils.deleteDirectoryTree(f); } catch (Exception e1) { //ignore } try { manager.saveToFile(f); SystemModulesManager loaded = new SystemModulesManager(null); SystemModulesManager.loadFromFile(loaded, f); ModulesKey[] onlyDirectModules = loaded.getOnlyDirectModules(); boolean found = false; for (ModulesKey modulesKey : onlyDirectModules) { if (modulesKey.name.equals("zip")) { ModulesKeyForZip z = (ModulesKeyForZip) modulesKey; assertEquals(z.zipModulePath, "path"); assertEquals(z.file, new File("zip.zip")); assertEquals(z.isFile, true); found = true; } } if (!found) { fail("Did not find ModulesKeyForZip."); } Set<String> set = new HashSet<String>(); set.add("bar"); set.add("foo"); set.add("empty"); set.add("zip"); assertEquals(set, loaded.getAllModuleNames(true, "")); assertEquals(Arrays.asList("rara", "boo"), loaded.getPythonPathHelper().getPythonpath()); } finally { FileUtils.deleteDirectoryTree(f); } } public void testRestoreContents() throws Exception { String contents = "" + "A|A.py\n" + "B\r\n" + "D|0|E|1" + ""; ProjectModulesManager manager = new ProjectModulesManager(); HashMap<Integer, String> intToString = new HashMap<Integer, String>(); intToString.put(0, "W.py"); ModulesManager.handleFileContents(manager, contents, intToString); assertEquals(3, manager.modulesKeys.size()); ModulesKey key = manager.modulesKeys.get(new ModulesKey("A", null)); assertEquals(key, new ModulesKey("A", null)); assertEquals(key.file, new File("A.py")); assertTrue(!(key instanceof ModulesKeyForZip)); key = manager.modulesKeys.get(new ModulesKey("B", null)); assertEquals(key, new ModulesKey("B", null)); assertNull(key.file); assertTrue(!(key instanceof ModulesKeyForZip)); key = manager.modulesKeys.get(new ModulesKey("D", null)); assertEquals(key, new ModulesKey("D", null)); assertEquals(key.file, new File("W.py")); assertTrue(key instanceof ModulesKeyForZip); ModulesKeyForZip kz = (ModulesKeyForZip) key; assertTrue(kz.isFile); assertEquals(kz.zipModulePath, "E"); } public void testRestoreContents2() throws Exception { String contents = "" + "A||A.py||\n" + "B|\r\n" + "D|0|E|1\n" + ""; ProjectModulesManager manager = new ProjectModulesManager(); HashMap<Integer, String> intToString = new HashMap<Integer, String>(); intToString.put(0, "W.py"); ModulesManager.handleFileContents(manager, contents, intToString); assertEquals(3, manager.modulesKeys.size()); ModulesKey key = manager.modulesKeys.get(new ModulesKey("A", null)); assertEquals(key, new ModulesKey("A", null)); assertEquals(key.file, new File("A.py")); assertTrue(!(key instanceof ModulesKeyForZip)); key = manager.modulesKeys.get(new ModulesKey("B", null)); assertEquals(key, new ModulesKey("B", null)); assertNull(key.file); assertTrue(!(key instanceof ModulesKeyForZip)); key = manager.modulesKeys.get(new ModulesKey("D", null)); assertEquals(key, new ModulesKey("D", null)); assertEquals(key.file, new File("W.py")); assertTrue(key instanceof ModulesKeyForZip); ModulesKeyForZip kz = (ModulesKeyForZip) key; assertTrue(kz.isFile); assertEquals(kz.zipModulePath, "E"); } public void testGetAllModuleNamesEmpty() { ProjectModulesManager manager = new ProjectModulesManager(); assertEquals(new HashSet<>(), manager.getAllModuleNames(false, "")); assertEquals(new HashSet<>(), manager.getAllModuleNames(false, "foobar")); } public void testGetAllModuleNames() { ModulesKey k1 = new ModulesKey("org.arabidopsis", null); ModulesKey k2 = new ModulesKey("org.hashcollision.devel", null); ModulesKey k3 = new ModulesKey("edu.wpi.study", null); ModulesKey k4 = new ModulesKey("edu.brown.visitor", null); ModulesKey k5 = new ModulesKey("com.google.worker", null); ProjectModulesManager manager = new ProjectModulesManager(); manager.addModule(k1); manager.addModule(k2); manager.addModule(k3); manager.addModule(k4); manager.addModule(k5); assertContainsAll(manager.getAllModuleNames(false, ""), "org.arabidopsis", "org.hashcollision.devel", "edu.wpi.study", "edu.brown.visitor", "com.google.worker"); assertContainsAll(manager.getAllModuleNames(false, "org"), "org.arabidopsis", "org.hashcollision.devel"); assertContainsAll(manager.getAllModuleNames(false, "dev"), "org.hashcollision.devel"); assertContainsAll(manager.getAllModuleNames(false, "nothere")); assertContainsAll(manager.getAllModuleNames(false, "pi")); assertContainsAll(manager.getAllModuleNames(false, "wpi"), "edu.wpi.study"); assertContainsAll(manager.getAllModuleNames(false, "w"), "edu.wpi.study", "com.google.worker"); // Checks that removal works: List<ModulesKey> modulesToRemove = new ArrayList<>(); modulesToRemove.add(k3); manager.removeModules(modulesToRemove); assertContainsAll(manager.getAllModuleNames(false, "edu"), "edu.brown.visitor"); assertContainsAll(manager.getAllModuleNames(false, "wpi")); } public void testGetAllModulesStartingWith() { ModulesKey k1 = new ModulesKey("fabioz", null); ProjectModulesManager manager = new ProjectModulesManager(); manager.addModule(k1); SortedMap<ModulesKey, ModulesKey> actual = manager.getAllDirectModulesStartingWith("fabio"); assertEquals(1, actual.size()); assertEquals(k1, actual.firstKey()); } public void testGetAllModulesStartingWithEdges1() { ModulesKey k1 = new ModulesKey("foo\uffffbar", null); ModulesKey k2 = new ModulesKey("food", null); ProjectModulesManager manager = new ProjectModulesManager(); manager.addModule(k1); manager.addModule(k2); SortedMap<ModulesKey, ModulesKey> actual = manager.getAllDirectModulesStartingWith("foo"); assertEquals(2, actual.size()); assertEquals(k2, actual.firstKey()); assertEquals(k1, actual.keySet().toArray()[1]); } public void testGetAllModulesStartingWithEdges2() { ModulesKey k1 = new ModulesKey("foo\uffffbar", null); ProjectModulesManager manager = new ProjectModulesManager(); manager.addModule(k1); SortedMap<ModulesKey, ModulesKey> actual = manager.getAllDirectModulesStartingWith("food"); assertEquals(0, actual.size()); } // Checks that removal is effective. public void testGetAllModulesStartingWithRemoval() { ModulesKey k1 = new ModulesKey("a", null); ModulesKey k2 = new ModulesKey("ab", null); ProjectModulesManager manager = new ProjectModulesManager(); manager.addModule(k1); manager.addModule(k2); List<ModulesKey> modulesToRemove = new ArrayList<>(); modulesToRemove.add(k2); manager.removeModules(modulesToRemove); SortedMap<ModulesKey, ModulesKey> actual = manager.getAllDirectModulesStartingWith("a"); assertEquals(1, actual.size()); assertEquals(k1, actual.firstKey()); assertEquals(0, manager.getAllDirectModulesStartingWith("ab").size()); } /** * Helper to check for membership. */ private void assertContainsAll(Set<String> result, String... expected) { assertEquals(expected.length, result.size()); for (String e : expected) { assertTrue(result.contains(e)); } } }