1from PyObjCTools.TestSupport import *
2import sys
3from Foundation import *
4
5
6class TestNSObjCRuntime (TestCase):
7    def testConstants(self):
8        self.assertEquals(NSFoundationVersionNumber10_0,   397.40)
9        self.assertEquals(NSFoundationVersionNumber10_1,   425.00)
10        self.assertEquals(NSFoundationVersionNumber10_1_1, 425.00)
11        self.assertEquals(NSFoundationVersionNumber10_1_2, 425.00)
12        self.assertEquals(NSFoundationVersionNumber10_1_3, 425.00)
13        self.assertEquals(NSFoundationVersionNumber10_1_4, 425.00)
14        self.assertEquals(NSFoundationVersionNumber10_2,   462.00)
15        self.assertEquals(NSFoundationVersionNumber10_2_1, 462.00)
16        self.assertEquals(NSFoundationVersionNumber10_2_2, 462.00)
17        self.assertEquals(NSFoundationVersionNumber10_2_3, 462.00)
18        self.assertEquals(NSFoundationVersionNumber10_2_4, 462.00)
19        self.assertEquals(NSFoundationVersionNumber10_2_5, 462.00)
20        self.assertEquals(NSFoundationVersionNumber10_2_6, 462.00)
21        self.assertEquals(NSFoundationVersionNumber10_2_7, 462.70)
22        self.assertEquals(NSFoundationVersionNumber10_2_8, 462.70)
23        self.assertEquals(NSFoundationVersionNumber10_3,   500.00)
24        self.assertEquals(NSFoundationVersionNumber10_3_1, 500.00)
25        self.assertEquals(NSFoundationVersionNumber10_3_2, 500.30)
26        self.assertEquals(NSFoundationVersionNumber10_3_3, 500.54)
27        self.assertEquals(NSFoundationVersionNumber10_3_4, 500.56)
28        self.assertEquals(NSFoundationVersionNumber10_3_5, 500.56)
29        self.assertEquals(NSFoundationVersionNumber10_3_6, 500.56)
30        self.assertEquals(NSFoundationVersionNumber10_3_7, 500.56)
31        self.assertEquals(NSFoundationVersionNumber10_3_8, 500.56)
32        self.assertEquals(NSFoundationVersionNumber10_3_9, 500.58)
33        self.assertEquals(NSFoundationVersionNumber10_4,   567.00)
34        self.assertEquals(NSFoundationVersionNumber10_4_1, 567.00)
35        self.assertEquals(NSFoundationVersionNumber10_4_2, 567.12)
36        self.assertEquals(NSFoundationVersionNumber10_4_3, 567.21)
37        self.assertEquals(NSFoundationVersionNumber10_4_4_Intel,   567.23)
38        self.assertEquals(NSFoundationVersionNumber10_4_4_PowerPC, 567.21)
39        self.assertEquals(NSFoundationVersionNumber10_4_5, 567.25)
40        self.assertEquals(NSFoundationVersionNumber10_4_6, 567.26)
41        self.assertEquals(NSFoundationVersionNumber10_4_7, 567.27)
42        self.assertEquals(NSFoundationVersionNumber10_4_8, 567.28)
43        self.assertEquals(NSFoundationVersionNumber10_4_9, 567.29)
44        self.assertEquals(NSFoundationVersionNumber10_4_10,        567.29)
45        self.assertEquals(NSFoundationVersionNumber10_4_11,        567.36)
46
47        self.failUnless(isinstance(NSFoundationVersionNumber, float))
48        self.failUnless(isinstance(NSIntegerMax, (int, long)))
49        self.failUnless(isinstance(NSIntegerMin, (int, long)))
50        self.failUnless(isinstance(NSUIntegerMax, (int, long)))
51
52        if sys.maxint > 2 ** 32:
53            self.assertEquals(NSIntegerMax, 2 ** 63 -1)
54            self.assertEquals(NSIntegerMin, -(2 ** 63))
55            self.assertEquals(NSUIntegerMax, 2**64-1)
56
57        else:
58            self.assertEquals(NSIntegerMax, 2 ** 31 -1)
59            self.assertEquals(NSIntegerMin, -(2 ** 31))
60            self.assertEquals(NSUIntegerMax, 2**32-1)
61
62        self.failUnless(YES)
63        self.failIf(NO)
64
65        self.assertEquals(NSOrderedAscending, -1)
66        self.assertEquals(NSOrderedSame, 0)
67        self.assertEquals(NSOrderedDescending, 1)
68
69        self.assertEquals(NSNotFound, NSIntegerMax)
70
71
72    def testSelectorAccess(self):
73        v = NSStringFromSelector('description')
74        self.failUnless(isinstance(v, unicode))
75        self.assertEquals(v, 'description')
76
77        v = NSSelectorFromString(u"description")
78        self.failUnless(isinstance(v, str))
79        self.assertEquals(v, 'description')
80
81    def testClassAccess(self):
82        v = NSStringFromClass(NSObject)
83        self.failUnless(isinstance(v, unicode))
84        self.assertEquals(v, 'NSObject')
85
86        v = NSClassFromString('NSDictionary')
87        self.failUnless(isinstance(v, objc.objc_class))
88        self.assertEquals(v, NSDictionary)
89
90    def testProtocolAccess(self):
91        p = NSProtocolFromString('NSObject')
92        self.failUnless(isinstance(p, objc.formal_protocol))
93
94        v = NSStringFromProtocol(p)
95        self.failUnless(isinstance(v, unicode))
96        self.assertEquals(v, 'NSObject')
97
98    def testTypeInfo(self):
99        rest, size, align = NSGetSizeAndAlignment("ii", None, None)
100        self.assertEquals(rest, "i")
101        self.failUnless(isinstance(size, (int, long)))
102        self.failUnless(isinstance(align, (int, long)))
103
104    def testMinMax(self):
105        self.assertEquals(MAX(1, 2), 2)
106        self.assertEquals(MAX("a", "b"), "b")
107        self.assertEquals(MIN(1, 2), 1)
108        self.assertEquals(MIN("a", "b"), "a")
109        self.assertEquals(ABS(-1), 1)
110        self.assertEquals(ABS(-1.0), 1.0)
111
112if __name__ == "__main__":
113    main()
114