Test that nothing is reloaded with run_once=True

This commit is contained in:
ZyX 2013-11-21 00:18:34 +04:00
parent 6a4b8bc49c
commit 95d13a334a
2 changed files with 35 additions and 3 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 functools import wraps
access_log = [] access_log = []
@ -34,13 +35,26 @@ def pop_events():
return r return r
def log_call(func):
@wraps(func)
def ret(self, *args, **kwargs):
self._calls.append((func.__name__, args, kwargs))
return func(self, *args, **kwargs)
return ret
class Watcher(object): class Watcher(object):
events = set() events = set()
lock = Lock() lock = Lock()
def __init__(self):
self._calls = []
@log_call
def watch(self, file): def watch(self, file):
pass pass
@log_call
def __call__(self, file): def __call__(self, file):
with self.lock: with self.lock:
if file in self.events: if file in self.events:
@ -48,11 +62,13 @@ class Watcher(object):
return True return True
return False return False
@log_call
def _reset(self, files): def _reset(self, files):
with self.lock: with self.lock:
self.events.clear() self.events.clear()
self.events.update(files) self.events.update(files)
@log_call
def unsubscribe(self): def unsubscribe(self):
pass pass
@ -100,7 +116,7 @@ def get_powerline(**kwargs):
ext='test', ext='test',
renderer_module='tests.lib.config_mock', renderer_module='tests.lib.config_mock',
logger=Logger(), logger=Logger(),
config_loader=ConfigLoader(load=load_json_config, watcher=Watcher()), config_loader=ConfigLoader(load=load_json_config, watcher=Watcher(), run_once=kwargs.get('run_once')),
**kwargs **kwargs
) )

View File

@ -97,7 +97,10 @@ def sleep(interval):
def add_watcher_events(p, *args, **kwargs): def add_watcher_events(p, *args, **kwargs):
try:
p.config_loader.watcher._reset(args) p.config_loader.watcher._reset(args)
except AttributeError:
return
while not p._will_create_renderer(): while not p._will_create_renderer():
sleep(kwargs.get('interval', 0.000001)) sleep(kwargs.get('interval', 0.000001))
if not kwargs.get('wait', True): if not kwargs.get('wait', True):
@ -118,7 +121,6 @@ class TestConfigReload(TestCase):
# When running once thread should not start # When running once thread should not start
self.assertEqual(p.render(), '<1 2 1> s<2 4 False>>><3 4 4>g<4 False False>>><None None None>') self.assertEqual(p.render(), '<1 2 1> s<2 4 False>>><3 4 4>g<4 False False>>><None None None>')
self.assertAccessEvents() self.assertAccessEvents()
self.assertEqual(p.logger._pop_msgs(), [])
# Without the following assertion test_reload_colors may fail for # Without the following assertion test_reload_colors may fail for
# unknown reason (with AssertionError telling about “config” accessed # unknown reason (with AssertionError telling about “config” accessed
# one more time then needed) # one more time then needed)
@ -253,6 +255,20 @@ class TestConfigReload(TestCase):
self.assertEqual(p.render(), '<1 2 1> col3<2 4 False>>><3 4 4>g<4 False False>>><None None None>') self.assertEqual(p.render(), '<1 2 1> col3<2 4 False>>><3 4 4>g<4 False False>>><None None None>')
self.assertAccessEvents('themes/test/default') self.assertAccessEvents('themes/test/default')
self.assertEqual(p.logger._pop_msgs(), []) self.assertEqual(p.logger._pop_msgs(), [])
self.assertTrue(p.config_loader.watcher._calls)
pop_events()
def test_run_once_no_theme_reload(self):
with replace_item(globals(), 'config', deepcopy(config)):
config['config']['common']['interval'] = None
with get_powerline(run_once=True) as p:
self.assertEqual(p.render(), '<1 2 1> s<2 4 False>>><3 4 4>g<4 False False>>><None None None>')
self.assertAccessEvents('config', 'colors', 'colorschemes/test/default', 'themes/test/default')
config['themes/test/default']['segments']['left'][0]['contents'] = 'col3'
add_watcher_events(p, 'themes/test/default', wait=False)
self.assertEqual(p.render(), '<1 2 1> s<2 4 False>>><3 4 4>g<4 False False>>><None None None>')
self.assertAccessEvents()
pop_events() pop_events()