1from PyObjCTools.TestSupport import *
2
3from Foundation import *
4import Foundation
5
6
7class TestNSGeometry (TestCase):
8    def testConstants(self):
9        self.assertEqual(NSMinXEdge, 0)
10        self.assertEqual(NSMinYEdge, 1)
11        self.assertEqual(NSMaxXEdge, 2)
12        self.assertEqual(NSMaxYEdge, 3)
13
14        self.assertEqual(NSZeroPoint, NSPoint())
15        self.assertEqual(NSZeroSize, NSSize())
16        self.assertEqual(NSZeroRect, NSRect())
17
18    def testInlines(self):
19        self.assertEqual(NSMakePoint(1, 2), NSPoint(1, 2))
20        self.assertEqual(NSMakeSize(4, 5), NSSize(4, 5))
21        self.assertEqual(NSMakeRect(1, 2, 3, 4), NSRect(NSPoint(1, 2), NSSize(3, 4)))
22
23        rect = NSRect(NSPoint(1,2), NSSize(4,6))
24        self.assertEqual(NSMaxX(rect), 5)
25        self.assertEqual(NSMaxY(rect), 8)
26        self.assertEqual(NSMidX(rect), 3)
27        self.assertEqual(NSMidY(rect), 5)
28        self.assertEqual(NSMinX(rect), 1)
29        self.assertEqual(NSMinY(rect), 2)
30        self.assertEqual(NSWidth(rect), 4)
31        self.assertEqual(NSHeight(rect), 6)
32
33        # Cannot test these here, need to be tested in the Quartz unittests
34        self.assertHasAttr(Foundation, 'NSRectFromCGRect')
35        self.assertHasAttr(Foundation, 'NSRectToCGRect')
36        self.assertHasAttr(Foundation, 'NSPointFromCGPoint')
37        self.assertHasAttr(Foundation, 'NSPointToCGPoint')
38        self.assertHasAttr(Foundation, 'NSSizeFromCGSize')
39        self.assertHasAttr(Foundation, 'NSSizeToCGSize')
40
41    def testFunctions(self):
42        p1 = NSPoint(1, 2)
43        p2 = NSPoint(3, 4)
44
45        s1 = NSSize(4, 5)
46        s2 = NSSize(7, 8)
47
48        r0 = NSRect(NSPoint(9, 10), NSSize(0, 0))
49        r1 = NSRect(NSPoint(0, 1), NSSize(4, 5))
50        r2 = NSRect(NSPoint(4.5, 5.5), NSSize(7.5, 8.5))
51
52
53
54        self.assertIs(NSEqualPoints(p1, p1), True)
55        self.assertIs(NSEqualPoints(p1, p2), False)
56        self.assertIs(NSEqualSizes(s1, s1), True)
57        self.assertIs(NSEqualSizes(s1, s2), False)
58        self.assertIs(NSEqualRects(r1, r1), True)
59        self.assertIs(NSEqualRects(r1, r2), False)
60        self.assertIs(NSIsEmptyRect(r0), True)
61        self.assertIs(NSIsEmptyRect(r1), False)
62        ra = NSInsetRect(r1, 2, 3)
63        self.assertEqual(ra, NSRect(NSPoint(2, 4), NSSize(0, -1)))
64
65        ra = NSIntegralRect(r2)
66        self.assertEqual(ra, NSRect(NSPoint(4, 5), NSSize(8, 9)))
67
68        ra = NSUnionRect(r1, r2)
69        self.assertEqual(ra, NSRect(NSPoint(0, 1), NSSize(12, 13)))
70
71        ra = NSIntersectionRect(r1, r2)
72        self.assertEqual(ra, NSRect(NSPoint(0, 0), NSSize(0, 0)))
73
74        ra = NSOffsetRect(r1, 5, 6)
75        self.assertEqual(ra, NSRect(NSPoint(5, 7), NSSize(4,5)))
76
77        slice, rem = NSDivideRect(r2, None, None, 1.5, NSMaxYEdge)
78        self.assertEqual(slice, NSRect(NSPoint(4.5, 12.5), NSSize(7.5, 1.5)))
79        self.assertEqual(rem, NSRect(NSPoint(4.5, 5.5), NSSize(7.5, 7.0)))
80
81        self.assertIs(NSPointInRect(p1, r1), True)
82        self.assertIs(NSMouseInRect(p1, r1, False), True)
83        self.assertIs(NSMouseInRect(p2, r2, True), False)
84        self.assertIs(NSContainsRect(r1, r2), False)
85        self.assertIs(NSIntersectsRect(r1, r2), False)
86        self.assertEqual(NSStringFromPoint(p1), b'{1, 2}'.decode('ascii'))
87        self.assertEqual(NSStringFromSize(s1), b'{4, 5}'.decode('ascii'))
88        self.assertEqual(NSStringFromRect(r1),  b'{{0, 1}, {4, 5}}'.decode('ascii'))
89        v = NSPointFromString('{1, 2}')
90        self.assertEqual(v, p1)
91        v = NSSizeFromString('{4,5}')
92        self.assertEqual(v, s1)
93        v = NSRectFromString(b'{   {0,1}  , {  4, 5}}'.decode('ascii'))
94        self.assertEqual(v, r1)
95
96    def testValueMethods(self):
97        v = NSValue.valueWithPoint_(NSPoint(2, 3))
98        w = v.pointValue()
99        self.assertIsInstance(w, NSPoint)
100        self.assertEqual(w, (2,3))
101
102        w = v.sizeValue()
103        self.assertIsInstance(w, NSSize)
104        self.assertEqual(w, (2,3))
105
106        v = NSValue.valueWithSize_(NSSize(9, 8))
107        w = v.sizeValue()
108        self.assertIsInstance(w, NSSize)
109        self.assertEqual(w, (9,8))
110
111        v = NSValue.valueWithRect_(NSRect(NSPoint(9, 10), NSSize(11, 12)))
112        w = v.rectValue()
113        self.assertIsInstance(w, NSRect)
114        self.assertEqual(w, ((9,10),(11,12)))
115
116        self.assertArgHasType(NSValue.valueWithPoint_, 0, NSPoint.__typestr__)
117        self.assertResultHasType(NSValue.pointValue, NSPoint.__typestr__)
118        self.assertArgHasType(NSValue.valueWithSize_, 0, NSSize.__typestr__)
119        self.assertResultHasType(NSValue.sizeValue, NSSize.__typestr__)
120        self.assertArgHasType(NSValue.valueWithRect_, 0, NSRect.__typestr__)
121        self.assertResultHasType(NSValue.rectValue, NSRect.__typestr__)
122
123
124    def testCoderMethods(self):
125        self.assertArgHasType(NSCoder.encodePoint_, 0, NSPoint.__typestr__)
126        self.assertResultHasType(NSCoder.decodePoint, NSPoint.__typestr__)
127        self.assertArgHasType(NSCoder.encodePoint_forKey_, 0, NSPoint.__typestr__)
128        self.assertResultHasType(NSCoder.decodePointForKey_, NSPoint.__typestr__)
129
130        self.assertArgHasType(NSCoder.encodeSize_, 0, NSSize.__typestr__)
131        self.assertResultHasType(NSCoder.decodeSize, NSSize.__typestr__)
132        self.assertArgHasType(NSCoder.encodeSize_forKey_, 0, NSSize.__typestr__)
133        self.assertResultHasType(NSCoder.decodeSizeForKey_, NSSize.__typestr__)
134
135        self.assertArgHasType(NSCoder.encodeRect_, 0, NSRect.__typestr__)
136        self.assertResultHasType(NSCoder.decodeRect, NSRect.__typestr__)
137        self.assertArgHasType(NSCoder.encodeRect_forKey_, 0, NSRect.__typestr__)
138        self.assertResultHasType(NSCoder.decodeRectForKey_, NSRect.__typestr__)
139
140    @min_os_level('10.7')
141    def testConstants10_7(self):
142        self.assertEqual(NSAlignMinXInward, 1 << 0)
143        self.assertEqual(NSAlignMinYInward, 1 << 1)
144        self.assertEqual(NSAlignMaxXInward, 1 << 2)
145        self.assertEqual(NSAlignMaxYInward, 1 << 3)
146        self.assertEqual(NSAlignWidthInward, 1 << 4)
147        self.assertEqual(NSAlignHeightInward, 1 << 5)
148        self.assertEqual(NSAlignMinXOutward, 1 << 8)
149        self.assertEqual(NSAlignMinYOutward, 1 << 9)
150        self.assertEqual(NSAlignMaxXOutward, 1 << 10)
151        self.assertEqual(NSAlignMaxYOutward, 1 << 11)
152        self.assertEqual(NSAlignWidthOutward, 1 << 12)
153        self.assertEqual(NSAlignHeightOutward, 1 << 13)
154        self.assertEqual(NSAlignMinXNearest, 1 << 16)
155        self.assertEqual(NSAlignMinYNearest, 1 << 17)
156        self.assertEqual(NSAlignMaxXNearest, 1 << 18)
157        self.assertEqual(NSAlignMaxYNearest, 1 << 19)
158        self.assertEqual(NSAlignWidthNearest, 1 << 20)
159        self.assertEqual(NSAlignHeightNearest, 1 << 21)
160        self.assertEqual(NSAlignRectFlipped, 1 << 63)
161        self.assertEqual(NSAlignAllEdgesInward, NSAlignMinXInward|NSAlignMaxXInward|NSAlignMinYInward|NSAlignMaxYInward)
162        self.assertEqual(NSAlignAllEdgesOutward, NSAlignMinXOutward|NSAlignMaxXOutward|NSAlignMinYOutward|NSAlignMaxYOutward)
163        self.assertEqual(NSAlignAllEdgesNearest, NSAlignMinXNearest|NSAlignMaxXNearest|NSAlignMinYNearest|NSAlignMaxYNearest)
164
165    @min_os_level('10.7')
166    def testFunctions10_7(self):
167        r2 = NSRect(NSPoint(4.5, 5.5), NSSize(7.5, 8.5))
168        r = NSIntegralRectWithOptions(r2, NSAlignAllEdgesNearest)
169        self.assertIsInstance(r, NSRect)
170
171if __name__ == "__main__":
172    main()
173