69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
from __future__ import print_function
|
||
|
|
||
|
import sys
|
||
|
sys.path.append(u'../ftplugin')
|
||
|
|
||
|
import unittest
|
||
|
import orgmode.settings
|
||
|
from orgmode.exceptions import PluginError
|
||
|
from orgmode._vim import ORGMODE
|
||
|
from orgmode.keybinding import MODE_ALL, Plug
|
||
|
|
||
|
import vim
|
||
|
|
||
|
from orgmode.py3compat.encode_compatibility import *
|
||
|
|
||
|
ORG_PLUGINS = ['ShowHide', '|', 'Navigator', 'EditStructure', '|', 'Hyperlinks', '|', 'Todo', 'TagsProperties', 'Date', 'Agenda', 'Misc', '|', 'Export']
|
||
|
|
||
|
|
||
|
class MappingTestCase(unittest.TestCase):
|
||
|
u"""Tests all plugins for overlapping mappings."""
|
||
|
def test_non_overlapping_plug_mappings(self):
|
||
|
def find_overlapping_mappings(kb, all_keybindings):
|
||
|
found_overlapping_mapping = False
|
||
|
for tkb in all_keybindings:
|
||
|
if kb.mode == tkb.mode or MODE_ALL in (kb.mode, tkb.mode):
|
||
|
if isinstance(kb._action, Plug) and isinstance(tkb._action, Plug):
|
||
|
akb = kb.action
|
||
|
atkb = tkb.action
|
||
|
if (akb.startswith(atkb) or atkb.startswith(akb)) and akb != atkb:
|
||
|
print(u'\nERROR: Found overlapping mapping: %s (%s), %s (%s)' % (kb.key, akb, tkb.key, atkb))
|
||
|
found_overlapping_mapping = True
|
||
|
|
||
|
if all_keybindings:
|
||
|
res = find_overlapping_mappings(all_keybindings[0], all_keybindings[1:])
|
||
|
if not found_overlapping_mapping:
|
||
|
return res
|
||
|
return found_overlapping_mapping
|
||
|
|
||
|
if self.keybindings:
|
||
|
self.assertFalse(find_overlapping_mappings(self.keybindings[0], self.keybindings[1:]))
|
||
|
|
||
|
def setUp(self):
|
||
|
self.keybindings = []
|
||
|
|
||
|
vim.EVALRESULTS = {
|
||
|
u'exists("g:org_debug")': 0,
|
||
|
u'exists("b:org_debug")': 0,
|
||
|
u'exists("*repeat#set()")': 0,
|
||
|
u'b:changedtick': 0,
|
||
|
u_encode(u'exists("b:org_plugins")'): 0,
|
||
|
u_encode(u'exists("g:org_plugins")'): 1,
|
||
|
u_encode(u'g:org_plugins'): ORG_PLUGINS,
|
||
|
}
|
||
|
for plugin in filter(lambda p: p != '|', ORG_PLUGINS):
|
||
|
try:
|
||
|
ORGMODE.register_plugin(plugin)
|
||
|
except PluginError:
|
||
|
pass
|
||
|
if plugin in ORGMODE._plugins:
|
||
|
self.keybindings.extend(ORGMODE._plugins[plugin].keybindings)
|
||
|
|
||
|
|
||
|
def suite():
|
||
|
return unittest.TestLoader().loadTestsFromTestCase(MappingTestCase)
|
||
|
|
||
|
# vi: noexpandtab
|