| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | from __future__ import absolute_import, unicode_literalsfrom celery.five import rangefrom celery.utils.dispatch.saferef import safe_refclass Class1(object):    def x(self):        passdef fun(obj):    passclass Class2(object):    def __call__(self, obj):        passclass test_safe_ref:    def setup(self):        ts = []        ss = []        for x in range(5000):            t = Class1()            ts.append(t)            s = safe_ref(t.x, self._closure)            ss.append(s)        ts.append(fun)        ss.append(safe_ref(fun, self._closure))        for x in range(30):            t = Class2()            ts.append(t)            s = safe_ref(t, self._closure)            ss.append(s)        self.ts = ts        self.ss = ss        self.closureCount = 0    def test_in(self):        """test_in        Test the "in" operator for safe references (cmp)        """        for t in self.ts[:50]:            assert safe_ref(t.x) in self.ss    def test_valid(self):        """test_value        Test that the references are valid (return instance methods)        """        for s in self.ss:            assert s()    def test_shortcircuit(self):        """test_shortcircuit        Test that creation short-circuits to reuse existing references        """        sd = {}        for s in self.ss:            sd[s] = 1        for t in self.ts:            if hasattr(t, 'x'):                assert safe_ref(t.x) in sd            else:                assert safe_ref(t) in sd    def test_representation(self):        """test_representation        Test that the reference object's representation works        XXX Doesn't currently check the results, just that no error            is raised        """        repr(self.ss[-1])    def _closure(self, ref):        """Dumb utility mechanism to increment deletion counter"""        self.closureCount += 1
 |