Add some basic tests
This commit is contained in:
parent
f02807ffa4
commit
515df615bf
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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()
|
Loading…
Reference in New Issue