/Plugins/Ycm/Plugin/third_party/ycmd/third_party/bottle/test/test_plugins.py
Python | 213 lines | 176 code | 36 blank | 1 comment | 2 complexity | 5fbd7bad19ef3abed87b553732d13cc8 MD5 | raw file
- # -*- coding: utf-8 -*-
- import unittest
- import tools
- class MyPlugin(object):
- def __init__(self):
- self.app = None
- self.add_args = {}
- self.add_content = ''
- def setup(self, app):
- self.app = app
- def apply(self, func, config):
- def wrapper(*a, **ka):
- ka.update(self.add_args)
- self.lastcall = func, a, ka
- return ''.join(func(*a, **ka)) + self.add_content
- return wrapper
- def my_decorator(func):
- def wrapper(*a, **ka):
- return list(func(*a, **ka))[-1]
- class TestPluginManagement(tools.ServerTestBase):
- def verify_installed(self, plugin, otype, **config):
- self.assertEqual(type(plugin), otype)
- self.assertEqual(plugin.config, config)
- self.assertEqual(plugin.app, self.app)
- self.assertTrue(plugin in self.app.plugins)
- def test_install_plugin(self):
- plugin = MyPlugin()
- installed = self.app.install(plugin)
- self.assertEqual(plugin, installed)
- self.assertTrue(plugin in self.app.plugins)
- def test_install_decorator(self):
- installed = self.app.install(my_decorator)
- self.assertEqual(my_decorator, installed)
- self.assertTrue(my_decorator in self.app.plugins)
- def test_install_non_plugin(self):
- self.assertRaises(TypeError, self.app.install, 'I am not a plugin')
- def test_uninstall_by_instance(self):
- plugin = self.app.install(MyPlugin())
- plugin2 = self.app.install(MyPlugin())
- self.app.uninstall(plugin)
- self.assertTrue(plugin not in self.app.plugins)
- self.assertTrue(plugin2 in self.app.plugins)
- def test_uninstall_by_type(self):
- plugin = self.app.install(MyPlugin())
- plugin2 = self.app.install(MyPlugin())
- self.app.uninstall(MyPlugin)
- self.assertTrue(plugin not in self.app.plugins)
- self.assertTrue(plugin2 not in self.app.plugins)
- def test_uninstall_by_name(self):
- plugin = self.app.install(MyPlugin())
- plugin2 = self.app.install(MyPlugin())
- plugin.name = 'myplugin'
- self.app.uninstall('myplugin')
- self.assertTrue(plugin not in self.app.plugins)
- self.assertTrue(plugin2 in self.app.plugins)
- def test_uninstall_all(self):
- plugin = self.app.install(MyPlugin())
- plugin2 = self.app.install(MyPlugin())
- self.app.uninstall(True)
- self.assertFalse(self.app.plugins)
- def test_route_plugin(self):
- plugin = MyPlugin()
- plugin.add_content = ';foo'
- @self.app.route('/a')
- @self.app.route('/b', apply=[plugin])
- def a(): return 'plugin'
- self.assertBody('plugin', '/a')
- self.assertBody('plugin;foo', '/b')
- def test_plugin_oder(self):
- self.app.install(MyPlugin()).add_content = ';global-1'
- self.app.install(MyPlugin()).add_content = ';global-2'
- l1 = MyPlugin()
- l1.add_content = ';local-1'
- l2 = MyPlugin()
- l2.add_content = ';local-2'
- @self.app.route('/a')
- @self.app.route('/b', apply=[l1, l2])
- def a(): return 'plugin'
- self.assertBody('plugin;global-2;global-1', '/a')
- self.assertBody('plugin;local-2;local-1;global-2;global-1', '/b')
- def test_skip_by_instance(self):
- g1 = self.app.install(MyPlugin())
- g1.add_content = ';global-1'
- g2 = self.app.install(MyPlugin())
- g2.add_content = ';global-2'
- l1 = MyPlugin()
- l1.add_content = ';local-1'
- l2 = MyPlugin()
- l2.add_content = ';local-2'
- @self.app.route('/a', skip=[g2, l2])
- @self.app.route('/b', apply=[l1, l2], skip=[g2, l2])
- def a(): return 'plugin'
- self.assertBody('plugin;global-1', '/a')
- self.assertBody('plugin;local-1;global-1', '/b')
- def test_skip_by_class(self):
- g1 = self.app.install(MyPlugin())
- g1.add_content = ';global-1'
- @self.app.route('/a')
- @self.app.route('/b', skip=[MyPlugin])
- def a(): return 'plugin'
- self.assertBody('plugin;global-1', '/a')
- self.assertBody('plugin', '/b')
- def test_skip_by_name(self):
- g1 = self.app.install(MyPlugin())
- g1.add_content = ';global-1'
- g1.name = 'test'
- @self.app.route('/a')
- @self.app.route('/b', skip=['test'])
- def a(): return 'plugin'
- self.assertBody('plugin;global-1', '/a')
- self.assertBody('plugin', '/b')
- def test_skip_all(self):
- g1 = self.app.install(MyPlugin())
- g1.add_content = ';global-1'
- @self.app.route('/a')
- @self.app.route('/b', skip=[True])
- def a(): return 'plugin'
- self.assertBody('plugin;global-1', '/a')
- self.assertBody('plugin', '/b')
- def test_skip_nonlist(self):
- g1 = self.app.install(MyPlugin())
- g1.add_content = ';global-1'
- @self.app.route('/a')
- @self.app.route('/b', skip=g1)
- def a(): return 'plugin'
- self.assertBody('plugin;global-1', '/a')
- self.assertBody('plugin', '/b')
- class TestPluginAPI(tools.ServerTestBase):
- def setUp(self):
- super(TestPluginAPI, self).setUp()
- @self.app.route('/', test='plugin.cfg')
- def test(**args):
- return ', '.join('%s:%s' % (k,v) for k,v in args.items())
- def test_callable(self):
- def plugin(func):
- def wrapper(*a, **ka):
- return func(test='me', *a, **ka) + '; tail'
- return wrapper
- self.app.install(plugin)
- self.assertBody('test:me; tail', '/')
- def test_apply(self):
- class Plugin(object):
- def apply(self, func, cfg):
- def wrapper(*a, **ka):
- return func(test=cfg['config']['test'], *a, **ka) + '; tail'
- return wrapper
- def __call__(self, func):
- raise AssertionError("Plugins must not be called "\
- "if they implement 'apply'")
- self.app.install(Plugin())
- self.assertBody('test:plugin.cfg; tail', '/')
- def test_instance_method_wrapper(self):
- class Plugin(object):
- api=2
- def apply(self, callback, route):
- return self.b
- def b(self): return "Hello"
- self.app.install(Plugin())
- self.assertBody('Hello', '/')
- def test_setup(self):
- class Plugin(object):
- def __call__(self, func): return func
- def setup(self, app): self.app = app
- plugin = self.app.install(Plugin())
- self.assertEquals(getattr(plugin, 'app', None), self.app)
- def test_close(self):
- class Plugin(object):
- def __call__(self, func): return func
- def close(self): self.closed = True
- plugin = self.app.install(Plugin())
- plugin2 = self.app.install(Plugin())
- self.app.uninstall(plugin)
- self.assertTrue(getattr(plugin, 'closed', False))
- self.app.close()
- self.assertTrue(getattr(plugin2, 'closed', False))
- if __name__ == '__main__': #pragma: no cover
- unittest.main()