1from PyObjCTools.TestSupport import *
2import sys
3from Foundation import *
4
5try:
6    unicode
7except NameError:
8    unicode = str
9
10
11try:
12    long
13except NameError:
14    long = int
15
16
17class TestNSObjCRuntime (TestCase):
18    def testConstants(self):
19        self.assertEqual(NSFoundationVersionNumber10_0,   397.40)
20        self.assertEqual(NSFoundationVersionNumber10_1,   425.00)
21        self.assertEqual(NSFoundationVersionNumber10_1_1, 425.00)
22        self.assertEqual(NSFoundationVersionNumber10_1_2, 425.00)
23        self.assertEqual(NSFoundationVersionNumber10_1_3, 425.00)
24        self.assertEqual(NSFoundationVersionNumber10_1_4, 425.00)
25        self.assertEqual(NSFoundationVersionNumber10_2,   462.00)
26        self.assertEqual(NSFoundationVersionNumber10_2_1, 462.00)
27        self.assertEqual(NSFoundationVersionNumber10_2_2, 462.00)
28        self.assertEqual(NSFoundationVersionNumber10_2_3, 462.00)
29        self.assertEqual(NSFoundationVersionNumber10_2_4, 462.00)
30        self.assertEqual(NSFoundationVersionNumber10_2_5, 462.00)
31        self.assertEqual(NSFoundationVersionNumber10_2_6, 462.00)
32        self.assertEqual(NSFoundationVersionNumber10_2_7, 462.70)
33        self.assertEqual(NSFoundationVersionNumber10_2_8, 462.70)
34        self.assertEqual(NSFoundationVersionNumber10_3,   500.00)
35        self.assertEqual(NSFoundationVersionNumber10_3_1, 500.00)
36        self.assertEqual(NSFoundationVersionNumber10_3_2, 500.30)
37        self.assertEqual(NSFoundationVersionNumber10_3_3, 500.54)
38        self.assertEqual(NSFoundationVersionNumber10_3_4, 500.56)
39        self.assertEqual(NSFoundationVersionNumber10_3_5, 500.56)
40        self.assertEqual(NSFoundationVersionNumber10_3_6, 500.56)
41        self.assertEqual(NSFoundationVersionNumber10_3_7, 500.56)
42        self.assertEqual(NSFoundationVersionNumber10_3_8, 500.56)
43        self.assertEqual(NSFoundationVersionNumber10_3_9, 500.58)
44        self.assertEqual(NSFoundationVersionNumber10_4,   567.00)
45        self.assertEqual(NSFoundationVersionNumber10_4_1, 567.00)
46        self.assertEqual(NSFoundationVersionNumber10_4_2, 567.12)
47        self.assertEqual(NSFoundationVersionNumber10_4_3, 567.21)
48        self.assertEqual(NSFoundationVersionNumber10_4_4_Intel,   567.23)
49        self.assertEqual(NSFoundationVersionNumber10_4_4_PowerPC, 567.21)
50        self.assertEqual(NSFoundationVersionNumber10_4_5, 567.25)
51        self.assertEqual(NSFoundationVersionNumber10_4_6, 567.26)
52        self.assertEqual(NSFoundationVersionNumber10_4_7, 567.27)
53        self.assertEqual(NSFoundationVersionNumber10_4_8, 567.28)
54        self.assertEqual(NSFoundationVersionNumber10_4_9, 567.29)
55        self.assertEqual(NSFoundationVersionNumber10_4_10,        567.29)
56        self.assertEqual(NSFoundationVersionNumber10_4_11,        567.36)
57        self.assertEqual( NSFoundationVersionNumber10_5, 677.00)
58        self.assertEqual( NSFoundationVersionNumber10_5_1, 677.10)
59        self.assertEqual( NSFoundationVersionNumber10_5_2, 677.15)
60        self.assertEqual( NSFoundationVersionNumber10_5_3, 677.19)
61        self.assertEqual( NSFoundationVersionNumber10_5_4, 677.19)
62        self.assertEqual( NSFoundationVersionNumber10_5_5, 677.21)
63        self.assertEqual( NSFoundationVersionNumber10_5_6, 677.22)
64        self.assertEqual( NSFoundationVersionNumber10_5_7, 677.24)
65        self.assertEqual( NSFoundationVersionNumber10_5_8, 677.26)
66        self.assertEqual( NSFoundationVersionNumber10_6, 751.00)
67        self.assertEqual( NSFoundationVersionNumber10_6_1, 751.00)
68        self.assertEqual( NSFoundationVersionNumber10_6_2, 751.14)
69        self.assertEqual( NSFoundationVersionNumber10_6_3, 751.21)
70        self.assertEqual( NSFoundationVersionNumber10_6_4, 751.29)
71        self.assertEqual( NSFoundationVersionNumber10_6_5, 751.42)
72
73
74        self.assertIsInstance(NSFoundationVersionNumber, float)
75        self.assertIsInstance(NSIntegerMax, (int, long))
76        self.assertIsInstance(NSIntegerMin, (int, long))
77        self.assertIsInstance(NSUIntegerMax, (int, long))
78        if sys.maxsize > 2 ** 32:
79            self.assertEqual(NSIntegerMax, 2 ** 63 -1)
80            self.assertEqual(NSIntegerMin, -(2 ** 63))
81            self.assertEqual(NSUIntegerMax, 2**64-1)
82
83        else:
84            self.assertEqual(NSIntegerMax, 2 ** 31 -1)
85            self.assertEqual(NSIntegerMin, -(2 ** 31))
86            self.assertEqual(NSUIntegerMax, 2**32-1)
87
88        self.assertTrue(YES)
89        self.assertFalse(NO)
90
91        self.assertEqual(NSOrderedAscending, -1)
92        self.assertEqual(NSOrderedSame, 0)
93        self.assertEqual(NSOrderedDescending, 1)
94
95        self.assertEqual(NSNotFound, NSIntegerMax)
96
97    @min_os_level('10.6')
98    def testConstants10_6(self):
99        self.assertEqual(NSFoundationVersionNumber10_5, 677.00)
100        self.assertEqual(NSFoundationVersionNumber10_5_1, 677.10)
101        self.assertEqual(NSFoundationVersionNumber10_5_2, 677.15)
102        self.assertEqual(NSFoundationVersionNumber10_5_3, 677.19)
103        self.assertEqual(NSFoundationVersionNumber10_5_4, 677.19)
104        self.assertEqual(NSFoundationVersionNumber10_5_5, 677.21)
105        self.assertEqual(NSFoundationVersionNumber10_5_6, 677.22)
106
107        self.assertEqual(NSEnumerationConcurrent, 1<<0)
108        self.assertEqual(NSEnumerationReverse, 1<<1)
109        self.assertEqual(NSSortConcurrent, 1<<0)
110        self.assertEqual(NSSortStable, 1<<4)
111
112    @min_os_level('10.7')
113    def testConstants10_7(self):
114        self.assertEqual(NSFoundationVersionNumber10_7, 833.10)
115        self.assertEqual(NSFoundationVersionNumber10_7_1, 833.10)
116        self.assertEqual(NSFoundationVersionNumber10_7_2, 833.20)
117        self.assertEqual(NSFoundationVersionNumber10_7_3, 833.24)
118        self.assertEqual(NSFoundationVersionNumber10_7_4, 833.25)
119
120    def testSelectorAccess(self):
121        v = NSStringFromSelector('description')
122        self.assertIsInstance(v, unicode)
123        self.assertEqual(v, 'description')
124
125        v = NSSelectorFromString(b"description".decode('ascii'))
126        self.assertIsInstance(v, str)
127        self.assertEqual(v, 'description')
128
129    def testClassAccess(self):
130        v = NSStringFromClass(NSObject)
131        self.assertIsInstance(v, unicode)
132        self.assertEqual(v, 'NSObject')
133
134        v = NSClassFromString('NSDictionary')
135        self.assertIsInstance(v, objc.objc_class)
136        self.assertEqual(v, NSDictionary)
137
138    def testProtocolAccess(self):
139        p = NSProtocolFromString('NSObject')
140        self.assertIsInstance(p, objc.formal_protocol)
141        v = NSStringFromProtocol(p)
142        self.assertIsInstance(v, unicode)
143        self.assertEqual(v, 'NSObject')
144
145    def testTypeInfo(self):
146        rest, size, align = NSGetSizeAndAlignment(b"ii", None, None)
147        self.assertEqual(rest, b"i")
148        self.assertIsInstance(size, (int, long))
149        self.assertIsInstance(align, (int, long))
150
151    def testMinMax(self):
152        self.assertEqual(MAX(1, 2), 2)
153        self.assertEqual(MAX("a", "b"), "b")
154        self.assertEqual(MIN(1, 2), 1)
155        self.assertEqual(MIN("a", "b"), "a")
156        self.assertEqual(ABS(-1), 1)
157        self.assertEqual(ABS(-1.0), 1.0)
158
159    def testFunctions(self):
160        self.assertArgIsPrintf(NSLog, 0)
161
162if __name__ == "__main__":
163    main()
164