Added a tmux test running backend. This allows me to run tests on Mac and Linux with one command.
This commit is contained in:
parent
5d06271736
commit
ffb4a99ec9
63
test.py
63
test.py
@ -84,19 +84,14 @@ def no_unidecode_available():
|
|||||||
def random_string(n):
|
def random_string(n):
|
||||||
return ''.join(random.choice(string.ascii_lowercase) for x in range(n))
|
return ''.join(random.choice(string.ascii_lowercase) for x in range(n))
|
||||||
|
|
||||||
|
def silent_call(cmd):
|
||||||
|
"""Calls 'cmd' and returns the exit value."""
|
||||||
|
return subprocess.call(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
||||||
|
|
||||||
class VimInterface:
|
class VimInterface:
|
||||||
def focus(title=None):
|
def focus(title=None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def send_keystrokes(self, str, sleeptime):
|
|
||||||
"""
|
|
||||||
Send the keystrokes to vim via screen. Pause after each char, so
|
|
||||||
vim can handle this
|
|
||||||
"""
|
|
||||||
for c in str:
|
|
||||||
self.send(c)
|
|
||||||
time.sleep(sleeptime)
|
|
||||||
|
|
||||||
def get_buffer_data(self):
|
def get_buffer_data(self):
|
||||||
handle, fn = tempfile.mkstemp(prefix="UltiSnips_Test",suffix=".txt")
|
handle, fn = tempfile.mkstemp(prefix="UltiSnips_Test",suffix=".txt")
|
||||||
os.close(handle)
|
os.close(handle)
|
||||||
@ -130,7 +125,6 @@ class VimInterfaceScreen(VimInterface):
|
|||||||
if sys.version_info >= (3,0):
|
if sys.version_info >= (3,0):
|
||||||
s = s.encode("utf-8")
|
s = s.encode("utf-8")
|
||||||
|
|
||||||
silent_call = lambda cmd: subprocess.call(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
|
|
||||||
while True:
|
while True:
|
||||||
rv = 0
|
rv = 0
|
||||||
if len(s) > 30:
|
if len(s) > 30:
|
||||||
@ -154,6 +148,29 @@ class VimInterfaceScreen(VimInterface):
|
|||||||
if output != string:
|
if output != string:
|
||||||
self.need_screen_escapes = 1
|
self.need_screen_escapes = 1
|
||||||
|
|
||||||
|
class VimInterfaceTmux(VimInterface):
|
||||||
|
def __init__(self, session):
|
||||||
|
self.session = session
|
||||||
|
self._check_version()
|
||||||
|
|
||||||
|
def send(self, s):
|
||||||
|
# I did not find any documentation on what needs escaping when sending
|
||||||
|
# to tmux, but it seems like this is all that is needed for now.
|
||||||
|
s = s.replace(';', r'\;')
|
||||||
|
|
||||||
|
if sys.version_info >= (3,0):
|
||||||
|
s = s.encode("utf-8")
|
||||||
|
silent_call(["tmux", "send-keys", "-t", self.session, "-l", s])
|
||||||
|
|
||||||
|
def _check_version(self):
|
||||||
|
stdout, _ = subprocess.Popen(["tmux", "-V"],
|
||||||
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
|
||||||
|
if sys.version_info >= (3,0):
|
||||||
|
stdout = stdout.decode("utf-8")
|
||||||
|
m = re.match(r"tmux (\d+).(\d+)", stdout)
|
||||||
|
if not m or not (int(m.group(1)), int(m.group(2))) >= (1, 9):
|
||||||
|
raise RuntimeError("Need at least tmux 1.9, you have %s." % stdout.strip())
|
||||||
|
|
||||||
class VimInterfaceWindows(VimInterface):
|
class VimInterfaceWindows(VimInterface):
|
||||||
BRACES = re.compile("([}{])")
|
BRACES = re.compile("([}{])")
|
||||||
WIN_ESCAPES = ["+", "^", "%", "~", "[", "]", "<", ">", "(", ")"]
|
WIN_ESCAPES = ["+", "^", "%", "~", "[", "]", "<", ">", "(", ")"]
|
||||||
@ -253,9 +270,6 @@ class _VimTest(unittest.TestCase):
|
|||||||
else:
|
else:
|
||||||
self.send(":py3file %s\n" % temporary_file.name)
|
self.send(":py3file %s\n" % temporary_file.name)
|
||||||
|
|
||||||
def send_keystrokes(self,s):
|
|
||||||
self.vim.send_keystrokes(s, self.sleeptime)
|
|
||||||
|
|
||||||
def check_output(self):
|
def check_output(self):
|
||||||
wanted = self.text_before + self.wanted + self.text_after
|
wanted = self.text_before + self.wanted + self.text_after
|
||||||
if self.expected_error:
|
if self.expected_error:
|
||||||
@ -343,8 +357,10 @@ class _VimTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.send("i")
|
self.send("i")
|
||||||
|
|
||||||
# Execute the command
|
# Execute the command, but leave Vim some time to react.
|
||||||
self.send_keystrokes(self.keys)
|
for c in self.keys:
|
||||||
|
self.vim.send(c)
|
||||||
|
time.sleep(self.sleeptime)
|
||||||
|
|
||||||
self.send(ESC)
|
self.send(ESC)
|
||||||
|
|
||||||
@ -2549,7 +2565,7 @@ hi4"""
|
|||||||
def _options_off(self):
|
def _options_off(self):
|
||||||
self.send(":set langmap=\n")
|
self.send(":set langmap=\n")
|
||||||
|
|
||||||
# Test for bug 501727 #
|
# Test for https://bugs.launchpad.net/bugs/501727 #
|
||||||
class TestNonEmptyLangmapWithSemi_ExceptCorrectResult(_VimTest):
|
class TestNonEmptyLangmapWithSemi_ExceptCorrectResult(_VimTest):
|
||||||
snippets = ("testme",
|
snippets = ("testme",
|
||||||
"""my snipped ${1:some_default}
|
"""my snipped ${1:some_default}
|
||||||
@ -3121,12 +3137,15 @@ if __name__ == '__main__':
|
|||||||
def parse_args():
|
def parse_args():
|
||||||
p = optparse.OptionParser("%prog [OPTIONS] <test case names to run>")
|
p = optparse.OptionParser("%prog [OPTIONS] <test case names to run>")
|
||||||
|
|
||||||
p.set_defaults(session="vim", interrupt=False, verbose=False)
|
p.set_defaults(session="vim", interrupt=False,
|
||||||
|
verbose=False, interface="screen")
|
||||||
|
|
||||||
p.add_option("-v", "--verbose", dest="verbose", action="store_true",
|
p.add_option("-v", "--verbose", dest="verbose", action="store_true",
|
||||||
help="print name of tests as they are executed")
|
help="print name of tests as they are executed")
|
||||||
|
p.add_option("--interface", type=str,
|
||||||
|
help="interface to vim to use on Mac and or Linux [screen|tmux].")
|
||||||
p.add_option("-s", "--session", dest="session", metavar="SESSION",
|
p.add_option("-s", "--session", dest="session", metavar="SESSION",
|
||||||
help="send commands to screen session SESSION [%default]")
|
help="session parameters for the terminal multiplexer SESSION [%default]")
|
||||||
p.add_option("-i", "--interrupt", dest="interrupt",
|
p.add_option("-i", "--interrupt", dest="interrupt",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help="Stop after defining the snippet. This allows the user " \
|
help="Stop after defining the snippet. This allows the user " \
|
||||||
@ -3135,6 +3154,9 @@ if __name__ == '__main__':
|
|||||||
)
|
)
|
||||||
|
|
||||||
o, args = p.parse_args()
|
o, args = p.parse_args()
|
||||||
|
if o.interface not in ("screen", "tmux"):
|
||||||
|
p.error("--interface must be [screen|tmux].")
|
||||||
|
|
||||||
return o, args
|
return o, args
|
||||||
|
|
||||||
options,selected_tests = parse_args()
|
options,selected_tests = parse_args()
|
||||||
@ -3146,7 +3168,12 @@ if __name__ == '__main__':
|
|||||||
if platform.system() == "Windows":
|
if platform.system() == "Windows":
|
||||||
vim = VimInterfaceWindows()
|
vim = VimInterfaceWindows()
|
||||||
else:
|
else:
|
||||||
|
if options.interface == "screen":
|
||||||
vim = VimInterfaceScreen(options.session)
|
vim = VimInterfaceScreen(options.session)
|
||||||
|
elif options.interface == "tmux":
|
||||||
|
vim = VimInterfaceTmux(options.session)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
vim.focus()
|
vim.focus()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user