diff --git a/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCase.java b/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCase.java index f2d080a7de4c..08e354e01323 100644 --- a/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCase.java +++ b/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCase.java @@ -19,29 +19,13 @@ import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; -import java.util.List; import java.util.Map; import java.util.Set; public abstract class KeymapsTestCase extends KeymapsTestCaseBase { - @Override - protected void collectKnownDuplicates(Map>> result) { - appendKnownDuplicates(result, DEFAULT_DUPLICATES); - } - - @Override - protected void collectUnknownActions(Set result) { - result.addAll(UNCNOWN_ACTION_IDS); - } - - @Override - protected Set getBoundActions() { - return DEFAULT_BOUND_ACTIONS; - } - // @formatter:off @NonNls @SuppressWarnings({"HardCodedStringLiteral"}) - private static final Map DEFAULT_DUPLICATES = new THashMap(){{ + protected static final Map DEFAULT_DUPLICATES = new THashMap(){{ put("$default", new String[][] { { "ADD", "ExpandTreeNode", "Graph.ZoomIn"}, { "BACK_SPACE", "EditorBackSpace", "Images.Thumbnails.UpFolder"}, @@ -357,7 +341,7 @@ public abstract class KeymapsTestCase extends KeymapsTestCaseBase { }}; // @formatter:on - @NonNls private static final Set UNCNOWN_ACTION_IDS = ContainerUtil.set( + @NonNls protected static final Set DEFAULT_UNKNOWN_ACTION_IDS = ContainerUtil.set( "ActivateVersionControlToolWindow", "ActivateFavoritesToolWindow", "ActivateCommanderToolWindow", "ActivateDebugToolWindow", "ActivateFindToolWindow", "ActivateHierarchyToolWindow", "ActivateMessagesToolWindow", "ActivateProjectToolWindow", "ActivateRunToolWindow", diff --git a/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCaseBase.java b/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCaseBase.java index 710cb7f70824..4298504731d6 100644 --- a/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCaseBase.java +++ b/platform/testFramework/extensions/src/com/intellij/keymap/KeymapsTestCaseBase.java @@ -49,13 +49,17 @@ public abstract class KeymapsTestCaseBase extends PlatformTestCase { private static final Set LINUX_KEYMAPS = ContainerUtil.newHashSet("Default for XWin", "Default for GNOME", "Default for KDE"); - protected abstract void collectKnownDuplicates(Map>> result); + /** + * @return Keymap -> Shortcut -> [ActionId] + */ + protected abstract Map>> getKnownDuplicates(); - protected abstract void collectUnknownActions(Set result); + protected abstract Set getUnknownActions(); protected abstract Set getBoundActions(); - protected static void appendKnownDuplicates(Map>> result, Map duplicates) { + protected static Map>> parseKnownDuplicates(Map duplicates) { + HashMap>> result = new HashMap<>(); for (Map.Entry eachKeymap : duplicates.entrySet()) { String keymapName = eachKeymap.getKey(); @@ -73,15 +77,31 @@ public abstract class KeymapsTestCaseBase extends PlatformTestCase { mapping.put(shortcuts[0], ContainerUtil.newArrayList(shortcuts, 1, shortcuts.length)); } } - } - - - private Map>> getKnownDuplicates() { - Map>> result = new LinkedHashMap<>(); - collectKnownDuplicates(result); return result; } + protected static Map>> parseKnownDuplicates(Map baseDuplicates, + Map ideDuplicates) { + Map>> baseMap = parseKnownDuplicates(baseDuplicates); + baseMap.keySet().retainAll(ContainerUtil.map(KeymapManagerEx.getInstanceEx().getAllKeymaps(), Keymap::getName)); + + Map>> ideMap = parseKnownDuplicates(ideDuplicates); + + Map>> result = new HashMap<>(); + for (String keymap : ContainerUtil.union(baseMap.keySet(), ideMap.keySet())) { + Map> mapping = new HashMap<>(); + result.put(keymap, mapping); + + Map> baseMapping = baseMap.get(keymap); + Map> ideMapping = ideMap.get(keymap); + + if (baseMapping != null) mapping.putAll(baseMapping); + if (ideMapping != null) mapping.putAll(ideMapping); + } + return result; + } + + public void testDuplicateShortcuts() { StringBuilder failMessage = new StringBuilder(); Map>> knownDuplicates = getKnownDuplicates(); @@ -202,8 +222,7 @@ public abstract class KeymapsTestCaseBase extends PlatformTestCase { } public void testValidActionIds() { - THashSet unknownActions = new THashSet<>(); - collectUnknownActions(unknownActions); + Set unknownActions = getUnknownActions(); @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") Map> missingActions = new FactoryMap>() {