Add some basic tests

This commit is contained in:
ZyX 2014-06-24 23:36:50 +04:00
parent f02807ffa4
commit 515df615bf
3 changed files with 163 additions and 14 deletions

View File

@ -4,6 +4,7 @@ from powerline.renderer import Renderer
from powerline.lib.config import ConfigLoader from powerline.lib.config import ConfigLoader
from powerline import Powerline from powerline import Powerline
from copy import deepcopy from copy import deepcopy
from time import sleep
from functools import wraps 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) 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): class TestPowerline(Powerline):
_created = False _created = False
@ -111,7 +121,12 @@ renderer = SimpleRenderer
def get_powerline(**kwargs): def get_powerline(**kwargs):
global renderer
watcher = Watcher() watcher = Watcher()
if kwargs.pop('simpler_renderer', False):
renderer = EvenSimplerRenderer
else:
renderer = SimpleRenderer
pl = TestPowerline( pl = TestPowerline(
ext='test', ext='test',
renderer_module='tests.lib.config_mock', renderer_module='tests.lib.config_mock',
@ -138,3 +153,11 @@ def swap_attributes(cfg_container, powerline_module, replaces):
setattr(powerline_module, attr, val) setattr(powerline_module, attr, val)
replaces[attr] = old_val replaces[attr] = old_val
return replaces 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

View File

@ -1,10 +1,10 @@
# vim:fileencoding=utf-8:noet # vim:fileencoding=utf-8:noet
from __future__ import unicode_literals from __future__ import unicode_literals
import powerline as powerline_module import powerline as powerline_module
import time from time import sleep
from tests import TestCase from tests import TestCase
from tests.lib import replace_item 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 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): class TestConfigReload(TestCase):
def assertAccessEvents(self, *args): def assertAccessEvents(self, *args):
self.assertEqual(set(pop_events()), set(args)) self.assertEqual(set(pop_events()), set(args))

138
tests/test_configuration.py Normal file
View File

@ -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()