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    def testFunctions(self):
41        p1 = NSPoint(1, 2)
42        p2 = NSPoint(3, 4)
43
44        s1 = NSSize(4, 5)
45        s2 = NSSize(7, 8)
46
47        r0 = NSRect(NSPoint(9, 10), NSSize(0, 0))
48        r1 = NSRect(NSPoint(0, 1), NSSize(4, 5))
49        r2 = NSRect(NSPoint(4.5, 5.5), NSSize(7.5, 8.5))
50
51
52
53        self.assertIs(NSEqualPoints(p1, p1), True)
54        self.assertIs(NSEqualPoints(p1, p2), False)
55        self.assertIs(NSEqualSizes(s1, s1), True)
56        self.assertIs(NSEqualSizes(s1, s2), False)
57        self.assertIs(NSEqualRects(r1, r1), True)
58        self.assertIs(NSEqualRects(r1, r2), False)
59        self.assertIs(NSIsEmptyRect(r0), True)
60        self.assertIs(NSIsEmptyRect(r1), False)
61        ra = NSInsetRect(r1, 2, 3)
62        self.assertEqual(ra, NSRect(NSPoint(2, 4), NSSize(0, -1)))
63
64        ra = NSIntegralRect(r2)
65        self.assertEqual(ra, NSRect(NSPoint(4, 5), NSSize(8, 9)))
66
67        ra = NSUnionRect(r1, r2)
68        self.assertEqual(ra, NSRect(NSPoint(0, 1), NSSize(12, 13)))
69
70        ra = NSIntersectionRect(r1, r2)
71        self.assertEqual(ra, NSRect(NSPoint(0, 0), NSSize(0, 0)))
72
73        ra = NSOffsetRect(r1, 5, 6)
74        self.assertEqual(ra, NSRect(NSPoint(5, 7), NSSize(4,5)))
75
76        slice, rem = NSDivideRect(r2, None, None, 1.5, NSMaxYEdge)
77        self.assertEqual(slice, NSRect(NSPoint(4.5, 12.5), NSSize(7.5, 1.5)))
78        self.assertEqual(rem, NSRect(NSPoint(4.5, 5.5), NSSize(7.5, 7.0)))
79
80        self.assertIs(NSPointInRect(p1, r1), True)
81        self.assertIs(NSMouseInRect(p1, r1, False), True)
82        self.assertIs(NSMouseInRect(p2, r2, True), False)
83        self.assertIs(NSContainsRect(r1, r2), False)
84        self.assertIs(NSIntersectsRect(r1, r2), False)
85        self.assertEqual(NSStringFromPoint(p1), u'{1, 2}')
86        self.assertEqual(NSStringFromSize(s1), u'{4, 5}')
87        self.assertEqual(NSStringFromRect(r1),  u'{{0, 1}, {4, 5}}')
88        v = NSPointFromString('{1, 2}')
89        self.assertEqual(v, p1)
90        v = NSSizeFromString('{4,5}')
91        self.assertEqual(v, s1)
92        v = NSRectFromString(u'{   {0,1}  , {  4, 5}}')
93        self.assertEqual(v, r1)
94
95    def testValueMethods(self):
96        v = NSValue.valueWithPoint_(NSPoint(2, 3))
97        w = v.pointValue()
98        self.assertIsInstance(w, NSPoint)
99        self.assertEqual(w, (2,3))
100
101        w = v.sizeValue()
102        self.assertIsInstance(w, NSSize)
103        self.assertEqual(w, (2,3))
104
105        v = NSValue.valueWithSize_(NSSize(9, 8))
106        w = v.sizeValue()
107        self.assertIsInstance(w, NSSize)
108        self.assertEqual(w, (9,8))
109
110        v = NSValue.valueWithRect_(NSRect(NSPoint(9, 10), NSSize(11, 12)))
111        w = v.rectValue()
112        self.assertIsInstance(w, NSRect)
113        self.assertEqual(w, ((9,10),(11,12)))
114
115        self.assertArgHasType(NSValue.valueWithPoint_, 0, NSPoint.__typestr__)
116        self.assertResultHasType(NSValue.pointValue, NSPoint.__typestr__)
117        self.assertArgHasType(NSValue.valueWithSize_, 0, NSSize.__typestr__)
118        self.assertResultHasType(NSValue.sizeValue, NSSize.__typestr__)
119        self.assertArgHasType(NSValue.valueWithRect_, 0, NSRect.__typestr__)
120        self.assertResultHasType(NSValue.rectValue, NSRect.__typestr__)
121
122
123    def testCoderMethods(self):
124        self.assertArgHasType(NSCoder.encodePoint_, 0, NSPoint.__typestr__)
125        self.assertResultHasType(NSCoder.decodePoint, NSPoint.__typestr__)
126        self.assertArgHasType(NSCoder.encodeSize_, 0, NSSize.__typestr__)
127        self.assertResultHasType(NSCoder.decodeSize, NSSize.__typestr__)
128        self.assertArgHasType(NSCoder.encodeRect_, 0, NSRect.__typestr__)
129        self.assertResultHasType(NSCoder.decodeRect, NSRect.__typestr__)
130
131
132if __name__ == "__main__":
133    main()
134