예제 #1
0
    def testWorksWithUnboundMethods(self):
        self.SetupTestAttributes()

        meth = self.C.f
        rf = WeakMethodRef(meth)
        pf = WeakMethodProxy(meth)
        assert meth(self.c) == 1
        assert rf()(self.c) == 1
        assert pf(self.c) == 1
        assert not rf.is_dead()
        assert not pf.is_dead()
예제 #2
0
    def testWorksWithUnboundMethods(self):
        self.SetupTestAttributes()

        meth = self.C.f
        rf = WeakMethodRef(meth)
        pf = WeakMethodProxy(meth)
        assert meth(self.c) == 1
        assert rf()(self.c) == 1
        assert pf(self.c) == 1
        assert not rf.is_dead()
        assert not pf.is_dead()
예제 #3
0
    def testProxyEq(self):
        self.SetupTestAttributes()

        pf1 = WeakMethodProxy(self.c.f)
        pf2 = WeakMethodProxy(self.c.f)
        pf3 = WeakMethodProxy(self.d.f)
        assert pf1 == pf2
        assert pf3 != pf2
        del self.c
        assert pf1 == pf2
        assert pf1.is_dead()
        assert pf2.is_dead()
예제 #4
0
    def testWorksWithFunctions(self):
        self.SetupTestAttributes()

        def foo(y):
            return y + 1
        rf = WeakMethodRef(foo)
        pf = WeakMethodProxy(foo)
        assert foo(1) == 2
        assert rf()(1) == 2
        assert pf(1) == 2
        assert not rf.is_dead()
        assert not pf.is_dead()
예제 #5
0
    def testWorksWithFunctions(self):
        self.SetupTestAttributes()

        def foo(y):
            return y + 1

        rf = WeakMethodRef(foo)
        pf = WeakMethodProxy(foo)
        assert foo(1) == 2
        assert rf()(1) == 2
        assert pf(1) == 2
        assert not rf.is_dead()
        assert not pf.is_dead()
예제 #6
0
    def testDies(self):
        self.SetupTestAttributes()

        rf = WeakMethodRef(self.c.f)
        pf = WeakMethodProxy(self.c.f)
        assert not rf.is_dead()
        assert not pf.is_dead()
        assert rf()() == 1
        assert pf(2) == 3
        self.c = None
        assert rf.is_dead()
        assert pf.is_dead()
        assert rf() == None
        with pytest.raises(ReferenceError):
            pf()
예제 #7
0
    def testDies(self):
        self.SetupTestAttributes()

        rf = WeakMethodRef(self.c.f)
        pf = WeakMethodProxy(self.c.f)
        assert not rf.is_dead()
        assert not pf.is_dead()
        assert rf()() == 1
        assert pf(2) == 3
        self.c = None
        assert rf.is_dead()
        assert pf.is_dead()
        assert rf() == None
        with pytest.raises(ReferenceError):
            pf()
예제 #8
0
    def testProxyEq(self):
        self.SetupTestAttributes()

        pf1 = WeakMethodProxy(self.c.f)
        pf2 = WeakMethodProxy(self.c.f)
        pf3 = WeakMethodProxy(self.d.f)
        assert pf1 == pf2
        assert pf3 != pf2
        del self.c
        assert pf1 == pf2
        assert pf1.is_dead()
        assert pf2.is_dead()
예제 #9
0
    def testRefcount(self):
        self.SetupTestAttributes()

        self.CustomAssertEqual(sys.getrefcount(
            self.c), 2)  # 2: one in self, and one as argument to getrefcount()
        cf = self.c.f
        self.CustomAssertEqual(sys.getrefcount(self.c),
                               3)  # 3: as above, plus cf
        rf = WeakMethodRef(self.c.f)
        pf = WeakMethodProxy(self.c.f)
        self.CustomAssertEqual(sys.getrefcount(self.c), 3)
        del cf
        self.CustomAssertEqual(sys.getrefcount(self.c), 2)
        rf2 = WeakMethodRef(self.c.f)
        self.CustomAssertEqual(sys.getrefcount(self.c), 2)
        del rf
        del rf2
        del pf
        self.CustomAssertEqual(sys.getrefcount(self.c), 2)