143 lines
3.0 KiB
Python
143 lines
3.0 KiB
Python
from ..dispatcher import Dispatcher
|
|
import sys
|
|
if sys.version_info < (2, 7):
|
|
import unittest2 as unittest
|
|
else:
|
|
import unittest
|
|
|
|
|
|
class Math:
|
|
|
|
def sum(self, a, b):
|
|
return a + b
|
|
|
|
def diff(self, a, b):
|
|
return a - b
|
|
|
|
|
|
class TestDispatcher(unittest.TestCase):
|
|
|
|
""" Test Dispatcher functionality."""
|
|
|
|
def test_getter(self):
|
|
d = Dispatcher()
|
|
|
|
with self.assertRaises(KeyError):
|
|
d["method"]
|
|
|
|
d["add"] = lambda *args: sum(args)
|
|
self.assertEqual(d["add"](1, 1), 2)
|
|
|
|
def test_in(self):
|
|
d = Dispatcher()
|
|
d["method"] = lambda: ""
|
|
self.assertIn("method", d)
|
|
|
|
def test_add_method(self):
|
|
d = Dispatcher()
|
|
|
|
@d.add_method
|
|
def add(x, y):
|
|
return x + y
|
|
|
|
self.assertIn("add", d)
|
|
self.assertEqual(d["add"](1, 1), 2)
|
|
|
|
def test_add_method_with_name(self):
|
|
d = Dispatcher()
|
|
|
|
@d.add_method(name="this.add")
|
|
def add(x, y):
|
|
return x + y
|
|
|
|
self.assertNotIn("add", d)
|
|
self.assertIn("this.add", d)
|
|
self.assertEqual(d["this.add"](1, 1), 2)
|
|
|
|
def test_add_class(self):
|
|
d = Dispatcher()
|
|
d.add_class(Math)
|
|
|
|
self.assertIn("math.sum", d)
|
|
self.assertIn("math.diff", d)
|
|
self.assertEqual(d["math.sum"](3, 8), 11)
|
|
self.assertEqual(d["math.diff"](6, 9), -3)
|
|
|
|
def test_add_object(self):
|
|
d = Dispatcher()
|
|
d.add_object(Math())
|
|
|
|
self.assertIn("math.sum", d)
|
|
self.assertIn("math.diff", d)
|
|
self.assertEqual(d["math.sum"](5, 2), 7)
|
|
self.assertEqual(d["math.diff"](15, 9), 6)
|
|
|
|
def test_add_dict(self):
|
|
d = Dispatcher()
|
|
d.add_dict({"sum": lambda *args: sum(args)}, "util")
|
|
|
|
self.assertIn("util.sum", d)
|
|
self.assertEqual(d["util.sum"](13, -2), 11)
|
|
|
|
def test_add_method_keep_function_definitions(self):
|
|
|
|
d = Dispatcher()
|
|
|
|
@d.add_method
|
|
def one(x):
|
|
return x
|
|
|
|
self.assertIsNotNone(one)
|
|
|
|
def test_del_method(self):
|
|
d = Dispatcher()
|
|
d["method"] = lambda: ""
|
|
self.assertIn("method", d)
|
|
|
|
del d["method"]
|
|
self.assertNotIn("method", d)
|
|
|
|
def test_to_dict(self):
|
|
d = Dispatcher()
|
|
|
|
def func():
|
|
return ""
|
|
|
|
d["method"] = func
|
|
self.assertEqual(dict(d), {"method": func})
|
|
|
|
def test_init_from_object_instance(self):
|
|
|
|
class Dummy():
|
|
|
|
def one(self):
|
|
pass
|
|
|
|
def two(self):
|
|
pass
|
|
|
|
dummy = Dummy()
|
|
|
|
d = Dispatcher(dummy)
|
|
|
|
self.assertIn("one", d)
|
|
self.assertIn("two", d)
|
|
self.assertNotIn("__class__", d)
|
|
|
|
def test_init_from_dictionary(self):
|
|
|
|
dummy = {
|
|
'one': lambda x: x,
|
|
'two': lambda x: x,
|
|
}
|
|
|
|
d = Dispatcher(dummy)
|
|
|
|
self.assertIn("one", d)
|
|
self.assertIn("two", d)
|
|
|
|
def test_dispatcher_representation(self):
|
|
|
|
d = Dispatcher()
|
|
self.assertEqual('{}', repr(d))
|