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