1from PyObjCTools.TestSupport import *
2from PyObjCTest.initialize import OC_TestInitialize
3
4class OC_TestInitializePython (OC_TestInitialize):
5    def init(self):
6        return super(OC_TestInitializePython, self).init()
7
8OBJECT_LIST=[]
9class OC_TestInitializePython2 (OC_TestInitialize):
10    def init(self):
11        self = super(OC_TestInitializePython2, self).init()
12        OBJECT_LIST.append(self)
13        return self
14
15class TestInitializing (TestCase):
16    #
17    # These tests make sure that we don't call retain/release on objects
18    # that are not yet initialized.
19    #
20    def testDontRetainUnitialized1(self):
21        start = OC_TestInitialize.numUninitialized()
22        self.assertEquals(start, 0)
23
24        o = OC_TestInitialize.alloc()
25        v = OC_TestInitialize.numUninitialized()
26        self.assertEquals(v, start)
27
28        o = o.init()
29        v = OC_TestInitialize.numUninitialized()
30        self.assertEquals(v, start)
31
32        s = o.dummy()
33        self.assertEquals(s, u"hello")
34        v = OC_TestInitialize.numUninitialized()
35        self.assertEquals(v, start)
36
37    def testDontRetainUnitialized2(self):
38        start = OC_TestInitialize.numUninitialized()
39        self.assertEquals(start, 0)
40
41        o = OC_TestInitialize.makeInstance()
42        self.assertIsInstance(o, OC_TestInitialize)
43        v = OC_TestInitialize.numUninitialized()
44        self.assertEquals(v, start)
45
46        s = o.dummy()
47        self.assertEquals(s, u"hello")
48        v = OC_TestInitialize.numUninitialized()
49        self.assertEquals(v, start)
50
51    def testDontRetainUnitialized3(self):
52        start = OC_TestInitialize.numUninitialized()
53        self.assertEquals(start, 0)
54
55        o = OC_TestInitializePython.makeInstance()
56        self.assertIsInstance(o, OC_TestInitializePython)
57        v = OC_TestInitialize.numUninitialized()
58        self.assertEquals(v, start)
59
60        s = o.dummy()
61        self.assertEquals(s, u"hello")
62        v = OC_TestInitialize.numUninitialized()
63        self.assertEquals(v, start)
64
65    def testDontRetainUnitialized4(self):
66        start = OC_TestInitialize.numUninitialized()
67        self.assertEquals(start, 0)
68
69        o = OC_TestInitializePython2.makeInstance()
70        self.assertIsInstance(o, OC_TestInitializePython2)
71        self.assertIs(OBJECT_LIST[-1], o)
72        del OBJECT_LIST[-1]
73
74        v = OC_TestInitialize.numUninitialized()
75        self.assertEquals(v, start)
76
77        s = o.dummy()
78        self.assertEquals(s, u"hello")
79        v = OC_TestInitialize.numUninitialized()
80        self.assertEquals(v, start)
81
82if __name__ == "__main__":
83    main()
84