mirror of
https://github.com/python/cpython.git
synced 2025-10-04 22:20:46 +00:00
bpo-29615: backport to 3.5 (#479)
This commit is contained in:
parent
171b674c8b
commit
c6e199f2e9
3 changed files with 117 additions and 20 deletions
|
@ -295,6 +295,94 @@ class XMLRPCTestCase(unittest.TestCase):
|
|||
self.assertEqual(p.method(), 5)
|
||||
self.assertEqual(p.method(), 5)
|
||||
|
||||
|
||||
class SimpleXMLRPCDispatcherTestCase(unittest.TestCase):
|
||||
class DispatchExc(Exception):
|
||||
"""Raised inside the dispatched functions when checking for
|
||||
chained exceptions"""
|
||||
|
||||
def test_call_registered_func(self):
|
||||
"""Calls explicitly registered function"""
|
||||
# Makes sure any exception raised inside the function has no other
|
||||
# exception chained to it
|
||||
|
||||
exp_params = 1, 2, 3
|
||||
|
||||
def dispatched_func(*params):
|
||||
raise self.DispatchExc(params)
|
||||
|
||||
dispatcher = xmlrpc.server.SimpleXMLRPCDispatcher()
|
||||
dispatcher.register_function(dispatched_func)
|
||||
with self.assertRaises(self.DispatchExc) as exc_ctx:
|
||||
dispatcher._dispatch('dispatched_func', exp_params)
|
||||
self.assertEqual(exc_ctx.exception.args, (exp_params,))
|
||||
self.assertIsNone(exc_ctx.exception.__cause__)
|
||||
self.assertIsNone(exc_ctx.exception.__context__)
|
||||
|
||||
def test_call_instance_func(self):
|
||||
"""Calls a registered instance attribute as a function"""
|
||||
# Makes sure any exception raised inside the function has no other
|
||||
# exception chained to it
|
||||
|
||||
exp_params = 1, 2, 3
|
||||
|
||||
class DispatchedClass:
|
||||
def dispatched_func(self, *params):
|
||||
raise SimpleXMLRPCDispatcherTestCase.DispatchExc(params)
|
||||
|
||||
dispatcher = xmlrpc.server.SimpleXMLRPCDispatcher()
|
||||
dispatcher.register_instance(DispatchedClass())
|
||||
with self.assertRaises(self.DispatchExc) as exc_ctx:
|
||||
dispatcher._dispatch('dispatched_func', exp_params)
|
||||
self.assertEqual(exc_ctx.exception.args, (exp_params,))
|
||||
self.assertIsNone(exc_ctx.exception.__cause__)
|
||||
self.assertIsNone(exc_ctx.exception.__context__)
|
||||
|
||||
def test_call_dispatch_func(self):
|
||||
"""Calls the registered instance's `_dispatch` function"""
|
||||
# Makes sure any exception raised inside the function has no other
|
||||
# exception chained to it
|
||||
|
||||
exp_method = 'method'
|
||||
exp_params = 1, 2, 3
|
||||
|
||||
class TestInstance:
|
||||
def _dispatch(self, method, params):
|
||||
raise SimpleXMLRPCDispatcherTestCase.DispatchExc(
|
||||
method, params)
|
||||
|
||||
dispatcher = xmlrpc.server.SimpleXMLRPCDispatcher()
|
||||
dispatcher.register_instance(TestInstance())
|
||||
with self.assertRaises(self.DispatchExc) as exc_ctx:
|
||||
dispatcher._dispatch(exp_method, exp_params)
|
||||
self.assertEqual(exc_ctx.exception.args, (exp_method, exp_params))
|
||||
self.assertIsNone(exc_ctx.exception.__cause__)
|
||||
self.assertIsNone(exc_ctx.exception.__context__)
|
||||
|
||||
def test_registered_func_is_none(self):
|
||||
"""Calls explicitly registered function which is None"""
|
||||
|
||||
dispatcher = xmlrpc.server.SimpleXMLRPCDispatcher()
|
||||
dispatcher.register_function(None, name='method')
|
||||
with self.assertRaises(Exception, expected_regex='method'):
|
||||
dispatcher._dispatch('method', ('param',))
|
||||
|
||||
def test_instance_has_no_func(self):
|
||||
"""Attempts to call nonexistent function on a registered instance"""
|
||||
|
||||
dispatcher = xmlrpc.server.SimpleXMLRPCDispatcher()
|
||||
dispatcher.register_instance(object())
|
||||
with self.assertRaises(Exception, expected_regex='method'):
|
||||
dispatcher._dispatch('method', ('param',))
|
||||
|
||||
def test_cannot_locate_func(self):
|
||||
"""Calls a function that the dispatcher cannot locate"""
|
||||
|
||||
dispatcher = xmlrpc.server.SimpleXMLRPCDispatcher()
|
||||
with self.assertRaises(Exception, expected_regex='method'):
|
||||
dispatcher._dispatch('method', ('param',))
|
||||
|
||||
|
||||
class HelperTestCase(unittest.TestCase):
|
||||
def test_escape(self):
|
||||
self.assertEqual(xmlrpclib.escape("a&b"), "a&b")
|
||||
|
@ -1265,7 +1353,7 @@ def test_main():
|
|||
KeepaliveServerTestCase1, KeepaliveServerTestCase2,
|
||||
GzipServerTestCase, GzipUtilTestCase,
|
||||
MultiPathServerTestCase, ServerProxyTestCase, FailingServerTestCase,
|
||||
CGIHandlerTestCase)
|
||||
CGIHandlerTestCase, SimpleXMLRPCDispatcherTestCase)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue