mirror of
https://github.com/kovidgoyal/kitty.git
synced 2026-10-10 05:45:35 +00:00
76 lines
3.9 KiB
Python
76 lines
3.9 KiB
Python
#!/usr/bin/env python
|
|
# License: GPLv3 Copyright: 2026, kitty contributors
|
|
|
|
from functools import partial
|
|
from types import SimpleNamespace
|
|
from unittest.mock import Mock, patch
|
|
|
|
from kitty.boss import Boss
|
|
from kitty.launch import load_watch_modules
|
|
from kitty.tabs import SpecialWindow
|
|
|
|
from .base import BaseTest
|
|
|
|
|
|
class IterableArgumentsTest(BaseTest):
|
|
def test_window_creation_with_iterable_arguments(self):
|
|
for method in ('_new_os_window', '_new_tab'):
|
|
for container in (list, tuple, iter):
|
|
for values in ((), ('/bin/echo', 'hello')):
|
|
with self.subTest(method=method, container=container, values=values):
|
|
tm = SimpleNamespace(new_tab=Mock())
|
|
boss = SimpleNamespace(active_window=None, os_window_map={1: tm}, active_tab_manager=tm, add_os_window=Mock(return_value=1))
|
|
boss.args_to_special_window = partial(Boss.args_to_special_window, boss)
|
|
with (
|
|
patch('kitty.boss.get_options'),
|
|
patch('kitty.boss.create_sessions', return_value=iter((SimpleNamespace(),))) as sessions,
|
|
):
|
|
getattr(Boss, method)(boss, container(values))
|
|
call = sessions.call_args if method == '_new_os_window' else tm.new_tab.call_args
|
|
special = call.kwargs['special_window']
|
|
if values:
|
|
self.ae(special.cmd, list(values))
|
|
else:
|
|
self.assertIsNone(special)
|
|
|
|
def test_special_window_arguments_are_preserved(self):
|
|
special = SpecialWindow(['/bin/echo', 'hello'])
|
|
tm = SimpleNamespace(new_tab=Mock())
|
|
boss = SimpleNamespace(os_window_map={1: tm}, active_tab_manager=tm, add_os_window=Mock(return_value=1))
|
|
with (
|
|
patch('kitty.boss.get_options'),
|
|
patch('kitty.boss.create_sessions', return_value=iter((SimpleNamespace(),))) as sessions,
|
|
):
|
|
Boss._new_os_window(boss, special)
|
|
Boss._new_tab(boss, special)
|
|
self.assertIs(sessions.call_args.kwargs['special_window'], special)
|
|
self.assertIs(tm.new_tab.call_args.kwargs['special_window'], special)
|
|
|
|
def test_config_error_iterable(self):
|
|
for container in (list, tuple, iter):
|
|
for values in ((), ('configuration error',)):
|
|
with self.subTest(container=container, values=values):
|
|
boss = SimpleNamespace(show_error=Mock())
|
|
Boss.show_bad_config_lines(boss, (), container(values))
|
|
message = boss.show_error.call_args.args[1]
|
|
self.ae(message, 'In final effective configuration:\nconfiguration error' if values else '')
|
|
|
|
def test_watcher_iterable(self):
|
|
for container in (list, tuple, iter):
|
|
for values in ((), ('watcher.py',)):
|
|
with self.subTest(container=container, values=values):
|
|
on_load, on_close = Mock(), Mock()
|
|
with (
|
|
patch('kitty.launch.get_boss', return_value=None),
|
|
patch('kitty.launch.resolve_custom_file', side_effect=lambda path: path),
|
|
patch.dict('kitty.launch.watcher_modules', {}, clear=True),
|
|
patch('runpy.run_path', return_value={'on_load': on_load, 'on_close': on_close}) as load,
|
|
):
|
|
watchers = load_watch_modules(container(values))
|
|
if values:
|
|
self.ae(watchers.on_close, [on_close])
|
|
load.assert_called_once_with('watcher.py', run_name='__kitty_watcher__')
|
|
on_load.assert_called_once_with(None, {})
|
|
else:
|
|
self.assertIsNone(watchers)
|
|
load.assert_not_called()
|