コード例 #1
0
    def _test(self, outer, inner, args, kwargs, expected, expected_get,
              exp_src, exp_src_get):
        outer_f = support.f(outer, name='outer')
        inner_f = support.f(inner, name='inner')
        forw = specifiers.forwards_to_function(inner_f, *args,
                                               **kwargs)(outer_f)

        sig = specifiers.signature(forw)
        self.assertSigsEqual(sig, support.s(expected))

        self.assertSourcesEqual(
            sig.sources, {
                'outer': exp_src[0],
                'inner': exp_src[1],
                '+depths': ['outer', 'inner']
            })

        sig_get = specifiers.signature(_util.safe_get(forw, object(), object))
        self.assertSigsEqual(sig_get, support.s(expected_get))

        self.assertSourcesEqual(
            sig_get.sources, {
                'outer': exp_src_get[0],
                'inner': exp_src_get[1],
                '+depths': ['outer', 'inner']
            })
コード例 #2
0
ファイル: test_specifiers.py プロジェクト: epsy/sigtools
 def test_call(self):
     outer = support.f('*args, **kwargs')
     inner = support.f('a, *, b')
     forw = specifiers.forwards_to_function(inner)(outer)
     instance = object()
     forw_get_prox = _util.safe_get(forw, instance, object)
     self.assertEqual(
         forw_get_prox(1, b=2),
         {'args': (instance, 1), 'kwargs': {'b': 2}})
コード例 #3
0
def forwards_tests(self, outer, inner, args, kwargs, expected, expected_get):
    outer_f = support.f(outer)
    inner_f = support.f(inner)
    forw = specifiers.forwards_to_function(inner_f, *args, **kwargs)(outer_f)

    self.assertSigsEqual(specifiers.signature(forw), support.s(expected))

    self.assertSigsEqual(
        specifiers.signature(_util.safe_get(forw, object(), object)),
        support.s(expected_get))
コード例 #4
0
ファイル: test_modifiers.py プロジェクト: epsy/sigtools
 def test_specifiers_sig_after(self):
     inner = f('a, b', name='inner')
     outer = f('x, y, z, *args, **kwargs', name='outer')
     pt = modifiers.kwoargs('z')(outer)
     pt = specifiers.forwards_to_function(inner)(pt)
     sig = specifiers.signature(pt)
     self.assertSigsEqual(sig, s('x, y, a, b, *, z'))
     self.assertSourcesEqual(
         sig.sources, {'inner': 'ab', 'outer': 'xyz',
                       '+depths': ['outer', 'inner']})
     self.assertEqual(sig.sources['x'], [pt])
コード例 #5
0
 def test_call(self):
     outer = support.f('*args, **kwargs')
     inner = support.f('a, *, b')
     forw = specifiers.forwards_to_function(inner)(outer)
     instance = object()
     forw_get_prox = _util.safe_get(forw, instance, object)
     self.assertEqual(forw_get_prox(1, b=2), {
         'args': (instance, 1),
         'kwargs': {
             'b': 2
         }
     })
コード例 #6
0
 def test_specifiers_sig_after(self):
     inner = f('a, b', name='inner')
     outer = f('x, y, z, *args, **kwargs', name='outer')
     pt = modifiers.kwoargs('z')(outer)
     pt = specifiers.forwards_to_function(inner)(pt)
     sig = specifiers.signature(pt)
     self.assertSigsEqual(sig, s('x, y, a, b, *, z'))
     self.assertSourcesEqual(sig.sources, {
         'inner': 'ab',
         'outer': 'xyz',
         '+depths': ['outer', 'inner']
     })
     self.assertEqual(sig.sources['x'], [pt])
コード例 #7
0
    def test_emulation(self):
        func = specifiers.forwards_to_method('abc', emulate=False)(_func)
        self.assertTrue(_func is func)

        func = specifiers.forwards_to_method('abc')(_func)
        self.assertTrue(_func is func)

        class Cls(object):
            func = specifiers.forwards_to_method('abc')(_func)

        func = getattr(Cls.func, '__func__', func)
        self.assertTrue(_func is func)
        self.assertTrue(_func is Cls().func.__func__)

        class Cls(object):
            def func(self, abc, *args, **kwargs):
                raise NotImplementedError

            def abc(self, x):
                raise NotImplementedError

        method = Cls().func
        func = specifiers.forwards_to_method('abc')(method)
        self.assertTrue(isinstance(func, specifiers._ForgerWrapper))
        self.assertEqual(func.__wrapped__, method)
        self.assertRaises(AttributeError,
                          specifiers.forwards_to_method('abc', emulate=False),
                          Cls().func)
        exp = support.s('abc, x')
        self.assertSigsEqual(signatures.signature(func), exp)
        self.assertSigsEqual(specifiers.signature(func), exp)

        class Emulator(object):
            def __init__(self, obj, forger):
                self.obj = obj
                self.forger = forger

        func = specifiers.forwards_to_function(func, emulate=Emulator)(_func)
        self.assertTrue(isinstance(func, Emulator))

        @specifiers.forwards_to_function(_func, emulate=True)
        def func(x, y, *args, **kwargs):
            return x + y

        self.assertEqual(5, func(2, 3))
コード例 #8
0
ファイル: test_specifiers.py プロジェクト: epsy/sigtools
    def _test(self, outer, inner, args, kwargs,
                    expected, expected_get, exp_src, exp_src_get):
        outer_f = support.f(outer, name='outer')
        inner_f = support.f(inner, name='inner')
        forw = specifiers.forwards_to_function(inner_f, *args, **kwargs)(outer_f)

        sig = specifiers.signature(forw)
        self.assertSigsEqual(sig, support.s(expected))

        self.assertSourcesEqual(sig.sources, {
                'outer': exp_src[0], 'inner': exp_src[1],
                '+depths': ['outer', 'inner']})

        sig_get = specifiers.signature(_util.safe_get(forw, object(), object))
        self.assertSigsEqual(sig_get, support.s(expected_get))

        self.assertSourcesEqual(sig_get.sources, {
                'outer': exp_src_get[0], 'inner': exp_src_get[1],
                '+depths': ['outer', 'inner']})
コード例 #9
0
ファイル: test_specifiers.py プロジェクト: epsy/sigtools
    def test_emulation(self):
        func = specifiers.forwards_to_method('abc', emulate=False)(_func)
        self.assertTrue(_func is func)

        func = specifiers.forwards_to_method('abc')(_func)
        self.assertTrue(_func is func)

        class Cls(object):
            func = specifiers.forwards_to_method('abc')(_func)
        func = getattr(Cls.func, '__func__', func)
        self.assertTrue(_func is func)
        self.assertTrue(_func is Cls().func.__func__)

        class Cls(object):
            def func(self, abc, *args, **kwargs):
                raise NotImplementedError
            def abc(self, x):
                raise NotImplementedError
        method = Cls().func
        func = specifiers.forwards_to_method('abc')(method)
        self.assertTrue(isinstance(func, specifiers._ForgerWrapper))
        self.assertEqual(func.__wrapped__, method)
        self.assertRaises(
            AttributeError,
            specifiers.forwards_to_method('abc', emulate=False), Cls().func)
        exp = support.s('abc, x')
        self.assertSigsEqual(signatures.signature(func), exp)
        self.assertSigsEqual(specifiers.signature(func), exp)

        class Emulator(object):
            def __init__(self, obj, forger):
                self.obj = obj
                self.forger = forger

        func = specifiers.forwards_to_function(func, emulate=Emulator)(_func)
        self.assertTrue(isinstance(func, Emulator))

        @specifiers.forwards_to_function(_func, emulate=True)
        def func(x, y, *args, **kwargs):
            return x + y
        self.assertEqual(5, func(2, 3))
コード例 #10
0
 def __init__(self):
     specifiers.forwards_to_function(function)(self)
コード例 #11
0
ファイル: test_specifiers.py プロジェクト: epsy/sigtools
 def __init__(self):
     specifiers.forwards_to_function(function)(self)