From 515df615bf0c7e15734d4d451d4164a4cc8b4043 Mon Sep 17 00:00:00 2001 From: ZyX Date: Tue, 24 Jun 2014 23:36:50 +0400 Subject: [PATCH] Add some basic tests --- tests/lib/config_mock.py | 23 ++++++ tests/test_config_reload.py | 16 +---- tests/test_configuration.py | 138 ++++++++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+), 14 deletions(-) create mode 100644 tests/test_configuration.py diff --git a/tests/lib/config_mock.py b/tests/lib/config_mock.py index a0c083df..1a27d7cd 100644 --- a/tests/lib/config_mock.py +++ b/tests/lib/config_mock.py @@ -4,6 +4,7 @@ from powerline.renderer import Renderer from powerline.lib.config import ConfigLoader from powerline import Powerline from copy import deepcopy +from time import sleep from functools import wraps @@ -96,6 +97,15 @@ class SimpleRenderer(Renderer): return '<{fg} {bg} {attr}>'.format(fg=fg and fg[0], bg=bg and bg[0], attr=attr) +class EvenSimplerRenderer(Renderer): + def hlstyle(self, fg=None, bg=None, attr=None): + return '{{{fg}{bg}{attr}}}'.format( + fg=fg and fg[0] or '-', + bg=bg and bg[0] or '-', + attr=attr if attr else '', + ) + + class TestPowerline(Powerline): _created = False @@ -111,7 +121,12 @@ renderer = SimpleRenderer def get_powerline(**kwargs): + global renderer watcher = Watcher() + if kwargs.pop('simpler_renderer', False): + renderer = EvenSimplerRenderer + else: + renderer = SimpleRenderer pl = TestPowerline( ext='test', renderer_module='tests.lib.config_mock', @@ -138,3 +153,11 @@ def swap_attributes(cfg_container, powerline_module, replaces): setattr(powerline_module, attr, val) replaces[attr] = old_val return replaces + + +def add_watcher_events(p, *args, **kwargs): + p._watcher._reset(args) + while not p._will_create_renderer(): + sleep(kwargs.get('interval', 0.1)) + if not kwargs.get('wait', True): + return diff --git a/tests/test_config_reload.py b/tests/test_config_reload.py index 282d611f..f3ce58aa 100644 --- a/tests/test_config_reload.py +++ b/tests/test_config_reload.py @@ -1,10 +1,10 @@ # vim:fileencoding=utf-8:noet from __future__ import unicode_literals import powerline as powerline_module -import time +from time import sleep from tests import TestCase from tests.lib import replace_item -from tests.lib.config_mock import swap_attributes, get_powerline, pop_events +from tests.lib.config_mock import swap_attributes, get_powerline, pop_events, add_watcher_events from copy import deepcopy @@ -92,18 +92,6 @@ config = { } -def sleep(interval): - time.sleep(interval) - - -def add_watcher_events(p, *args, **kwargs): - p._watcher._reset(args) - while not p._will_create_renderer(): - sleep(kwargs.get('interval', 0.1)) - if not kwargs.get('wait', True): - return - - class TestConfigReload(TestCase): def assertAccessEvents(self, *args): self.assertEqual(set(pop_events()), set(args)) diff --git a/tests/test_configuration.py b/tests/test_configuration.py new file mode 100644 index 00000000..ed6996ad --- /dev/null +++ b/tests/test_configuration.py @@ -0,0 +1,138 @@ +# vim:fileencoding=utf-8:noet +from __future__ import unicode_literals, absolute_import, division +import powerline as powerline_module +from tests import TestCase +from tests.lib import replace_item +from tests.lib.config_mock import swap_attributes, get_powerline, pop_events +from functools import wraps +from copy import deepcopy + + +config = { + 'config': { + 'common': { + 'dividers': { + 'left': { + 'hard': '>>', + 'soft': '>', + }, + 'right': { + 'hard': '<<', + 'soft': '<', + }, + }, + 'spaces': 0, + 'interval': 0, + }, + 'ext': { + 'test': { + 'theme': 'default', + 'colorscheme': 'default', + }, + }, + }, + 'colors': { + 'colors': { + 'col1': 1, + 'col2': 2, + 'col3': 3, + 'col4': 4, + }, + 'gradients': { + }, + }, + 'colorschemes/test/default': { + 'groups': { + 'str1': {'fg': 'col1', 'bg': 'col2', 'attr': ['bold']}, + 'str2': {'fg': 'col3', 'bg': 'col4', 'attr': ['underline']}, + }, + }, + 'themes/test/default': { + 'segments': { + 'left': [ + { + 'type': 'string', + 'contents': 's', + 'width': 'auto', + 'highlight_group': ['str1'], + }, + { + 'type': 'string', + 'contents': 'g', + 'highlight_group': ['str2'], + }, + ], + 'right': [ + { + 'type': 'string', + 'contents': 'f', + 'width': 'auto', + 'align': 'right', + 'highlight_group': ['str2'], + }, + ], + }, + }, +} + + +def add_p_arg(func): + @wraps(func) + def f(self): + with get_powerline(run_once=True, simpler_renderer=True) as p: + func(self, p) + return f + + +class TestSingleLine(TestCase): + def assertRenderEqual(self, p, output, **kwargs): + self.assertEqual(p.render(**kwargs).replace(' ', ' '), output) + + def assertRenderLinesEqual(self, p, output, **kwargs): + self.assertEqual([l.replace(' ', ' ') for l in p.render_above_lines(**kwargs)], output) + + @add_p_arg + def test_without_above(self, p): + self.assertRenderEqual(p, '{121} s{24}>>{344}g{34}>{34}<{344}f {--}') + self.assertRenderEqual(p, '{121} s {24}>>{344}g{34}>{34}<{344}f {--}', width=10) + # self.assertRenderEqual(p, '{121} s {24}>>{344}g{34}>{34}<{344} f {--}', width=11) + self.assertEqual(list(p.render_above_lines()), []) + + def test_with_above(self): + with replace_item(globals(), 'config', deepcopy(config)): + old_segments = deepcopy(config['themes/test/default']['segments']) + config['themes/test/default']['segments']['above'] = [old_segments] + with get_powerline(run_once=True, simpler_renderer=True) as p: + self.assertRenderLinesEqual(p, [ + '{121} s{24}>>{344}g{34}>{34}<{344}f {--}', + ]) + self.assertRenderLinesEqual(p, [ + '{121} s {24}>>{344}g{34}>{34}<{344}f {--}', + ], width=10) + + config['themes/test/default']['segments']['above'] = [old_segments] * 2 + with get_powerline(run_once=True, simpler_renderer=True) as p: + self.assertRenderLinesEqual(p, [ + '{121} s{24}>>{344}g{34}>{34}<{344}f {--}', + '{121} s{24}>>{344}g{34}>{34}<{344}f {--}', + ]) + self.assertRenderLinesEqual(p, [ + '{121} s {24}>>{344}g{34}>{34}<{344}f {--}', + '{121} s {24}>>{344}g{34}>{34}<{344}f {--}', + ], width=10) + + +replaces = {} + + +def setUpModule(): + global replaces + replaces = swap_attributes(globals(), powerline_module, replaces) + + +tearDownModule = setUpModule + + +if __name__ == '__main__': + from tests import main + main()