示例#1
0
    def test_complex_cast(self):
        class Object(object):
            def __complex__(self):
                return complex(10.333)

        o = Proxy(Object)
        assert o.__complex__() == complex(10.333)
示例#2
0
    def test_coerce(self):
        class Object(object):
            def __coerce__(self, other):
                return self, other

        o = Proxy(Object)
        assert o.__coerce__(3)
示例#3
0
    def test_index(self):
        class Object(object):
            def __index__(self):
                return 1

        o = Proxy(Object)
        assert o.__index__() == 1
示例#4
0
    def test_reduce(self):
        class X(object):
            def __reduce__(self):
                return 123

        x = Proxy(lambda: X())
        assert x.__reduce__() == 123
示例#5
0
    def test_maybe_evaluate(self):
        x = Proxy(lambda: 30, cache=True)
        assert not x.__evaluated__()
        assert maybe_evaluate(x) == 30
        assert maybe_evaluate(x) == 30

        assert maybe_evaluate(30) == 30
        assert x.__evaluated__()
示例#6
0
    def test_dir(self):
        class X(object):
            def __dir__(self):
                return ["a", "b", "c"]

        x = Proxy(lambda: X())
        assert dir(x) == ["a", "b", "c"]

        class Y(object):
            def __dir__(self):
                raise RuntimeError()

        y = Proxy(lambda: Y())
        assert dir(y) == []
示例#7
0
    def test_dir(self):
        class X(object):
            def __dir__(self):
                return ['a', 'b', 'c']

        x = Proxy(lambda: X())
        assert dir(x) == ['a', 'b', 'c']

        class Y(object):
            def __dir__(self):
                raise RuntimeError()

        y = Proxy(lambda: Y())
        assert dir(y) == []
示例#8
0
def test_Proxy_from_source__py37_class_argument():
    class AbstractSource(abc.ABC):
        @abc.abstractmethod
        def add(self, arg):
            ...

        @abc.abstractmethod
        def mul(self, arg):
            ...

    class ConcreteSource(AbstractSource):
        def __init__(self, value):
            self.value = value

        def add(self, arg):
            return self.value + arg

        def mul(self, arg):
            return self.value * arg

    class ProxySource(Proxy[AbstractSource], source=AbstractSource):
        ...

    on_final_mock = Mock()
    on_final = Proxy(on_final_mock)

    p = ProxySource(lambda: ConcreteSource(2))
    p._add_proxy_finalizer(on_final)
    assert p.add(4) == 6
    assert p.mul(4) == 8

    on_final_mock.assert_called_once_with()
示例#9
0
    def test_slots(self):
        class X(object):
            __slots__ = ()

        x = Proxy(X)
        with pytest.raises(AttributeError):
            x.__dict__
示例#10
0
    def test_name(self):
        def real():
            """real function"""
            return "REAL"

        x = Proxy(lambda: real, name="xyz")
        assert x.__name__ == "xyz"

        y = Proxy(lambda: real)
        assert y.__name__ == "real"

        assert x.__doc__ == "real function"

        assert x.__class__ == type(real)
        assert x.__dict__ == real.__dict__
        assert repr(x) == repr(real)
        assert x.__module__
示例#11
0
    def test_name(self):
        def real():
            """real function"""
            return 'REAL'

        x = Proxy(lambda: real, name='xyz')
        assert x.__name__ == 'xyz'

        y = Proxy(lambda: real)
        assert y.__name__ == 'real'

        assert x.__doc__ == 'real function'

        assert x.__class__ == type(real)
        assert x.__dict__ == real.__dict__
        assert repr(x) == repr(real)
        assert x.__module__
示例#12
0
    def test_bool(self):
        class X(object):
            def __bool__(self):
                return False

            __nonzero__ = __bool__

        x = Proxy(lambda: X())
        assert not x
示例#13
0
    def test_only_evaluated_once(self):
        class X(object):
            attr = 123
            evals = 0

            def __init__(self):
                self.__class__.evals += 1

        p = Proxy(X, cache=True)
        assert p.attr == 123
        assert p.attr == 123
        assert X.evals == 1
示例#14
0
    def test_getsetdel_attr(self):
        class X(object):
            a = 1
            b = 2
            c = 3

            def __dir__(self):
                return ["a", "b", "c"]

        v = X()

        x = Proxy(lambda: v)
        assert x.__members__ == ["a", "b", "c"]
        assert x.a == 1
        assert x.b == 2
        assert x.c == 3

        setattr(x, "a", 10)  # noqa: B010
        assert x.a == 10

        del x.a
        assert x.a == 1
示例#15
0
    def test_getsetdel_attr(self):
        class X(object):
            a = 1
            b = 2
            c = 3

            def __dir__(self):
                return ['a', 'b', 'c']

        v = X()

        x = Proxy(lambda: v)
        assert x.__members__ == ['a', 'b', 'c']
        assert x.a == 1
        assert x.b == 2
        assert x.c == 3

        setattr(x, 'a', 10)  # noqa: B010
        assert x.a == 10

        del (x.a)
        assert x.a == 1
示例#16
0
 def test_get_current_local(self):
     x = Proxy(lambda: 10)
     object.__setattr__(x, '_Proxy_local', Mock())
     assert x._get_current_object()
示例#17
0
    def test_doc(self):
        def real():
            pass

        x = Proxy(real, __doc__='foo')
        assert x.__doc__ == 'foo'
示例#18
0
    def test_qualname(self):
        class X:
            ...

        x = Proxy(lambda: X)
        assert x.__qualname__ == X.__qualname__
示例#19
0
    def test_hash(self):
        class X(object):
            def __hash__(self):
                return 1234

        assert hash(Proxy(lambda: X())) == 1234