1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4
5class TestCGGeometry (TestCase):
6    def testStruct(self):
7        v = CGPoint()
8        self.assertIsInstance(v.x, float)
9        self.assertIsInstance(v.y, float)
10
11        v = CGSize()
12        self.assertIsInstance(v.width, float)
13        self.assertIsInstance(v.height, float)
14
15        v = CGRect()
16        self.assertIsInstance(v.origin, CGPoint)
17        self.assertIsInstance(v.size, CGSize)
18
19    def testConstants(self):
20        self.assertEqual(CGRectMinXEdge, 0)
21        self.assertEqual(CGRectMinYEdge, 1)
22        self.assertEqual(CGRectMaxXEdge, 2)
23        self.assertEqual(CGRectMaxYEdge, 3)
24
25        self.assertIsInstance(CGPointZero, CGPoint)
26        self.assertEqual(CGPointZero.x, 0.0)
27        self.assertEqual(CGPointZero.y, 0.0)
28
29        self.assertIsInstance(CGSizeZero, CGSize)
30        self.assertEqual(CGSizeZero.width, 0.0)
31        self.assertEqual(CGSizeZero.height, 0.0)
32
33        self.assertIsInstance(CGRectZero, CGRect)
34        self.assertEqual(CGRectZero.origin, CGPointZero)
35        self.assertEqual(CGRectZero.size, CGSizeZero)
36
37        self.assertIsInstance(CGRectNull, CGRect)
38        self.assertIsInstance(CGRectInfinite, CGRect)
39
40    def testFunctions(self):
41        v = CGPointMake(2.5, 3.5)
42        self.assertIsInstance(v, CGPoint)
43        self.assertEqual(v.x, 2.5)
44        self.assertEqual(v.y, 3.5)
45
46        v = CGSizeMake(2.5, 3.5)
47        self.assertIsInstance(v, CGSize)
48        self.assertEqual(v.width, 2.5)
49        self.assertEqual(v.height, 3.5)
50
51        v = CGRectMake(2.5, 3.5, 15.5, 25.5)
52        self.assertIsInstance(v, CGRect)
53        self.assertEqual(v.origin.x, 2.5)
54        self.assertEqual(v.origin.y, 3.5)
55        self.assertEqual(v.size.width, 15.5)
56        self.assertEqual(v.size.height, 25.5)
57        rect = v
58
59        v = CGRectGetMinX(rect)
60        self.assertEqual(v, min(rect.origin.x, rect.origin.x + rect.size.width))
61        v = CGRectGetMidX(rect)
62        self.assertEqual(v, rect.origin.x + (rect.size.width/2))
63
64        v = CGRectGetMaxX(rect)
65        self.assertEqual(v, max(rect.origin.x, rect.origin.x + rect.size.width))
66
67        v = CGRectGetMinY(rect)
68        self.assertEqual(v, min(rect.origin.y, rect.origin.y + rect.size.height))
69        v = CGRectGetMidY(rect)
70        self.assertEqual(v, rect.origin.y + (rect.size.height/2))
71
72        v = CGRectGetMaxY(rect)
73        self.assertEqual(v, max(rect.origin.y, rect.origin.y + rect.size.height))
74
75        self.assertEqual(CGRectGetWidth(rect), abs(rect.size.width))
76        self.assertEqual(CGRectGetHeight(rect), abs(rect.size.height))
77
78        self.assertResultHasType(CGPointEqualToPoint, objc._C_BOOL)
79        self.assertTrue(CGPointEqualToPoint((1, 1), (2, 2)) is False)
80        self.assertTrue(CGPointEqualToPoint((1, 1), (1, 1)) is True)
81
82        self.assertResultHasType(CGSizeEqualToSize, objc._C_BOOL)
83        self.assertTrue(CGSizeEqualToSize((1, 1), (2, 2)) is False)
84        self.assertTrue(CGSizeEqualToSize((1, 1), (1, 1)) is True)
85
86        self.assertResultHasType(CGRectEqualToRect, objc._C_BOOL)
87        self.assertTrue(CGRectEqualToRect(((1,1), (1,1)), ((2,2), (2,2))) is False)
88        self.assertTrue(CGRectEqualToRect(((1,1), (1,1)), ((1,1), (1,1))) is True)
89
90        v = CGRectStandardize(((90, 90), (-4, -5)))
91        self.assertIsInstance(v, CGRect)
92        self.assertEqual(v, CGRectMake(86, 85, 4, 5))
93
94        self.assertResultHasType(CGRectIsEmpty, objc._C_BOOL)
95        self.assertTrue(CGRectIsEmpty(rect) is False)
96        self.assertTrue(CGRectIsEmpty(CGRectZero) is True)
97
98        self.assertResultHasType(CGRectIsNull, objc._C_BOOL)
99        self.assertTrue(CGRectIsNull(rect) is False)
100        self.assertTrue(CGRectIsNull(CGRectNull) is True)
101
102        self.assertResultHasType(CGRectIsInfinite, objc._C_BOOL)
103        self.assertTrue(CGRectIsInfinite(rect) is False)
104        self.assertTrue(CGRectIsInfinite(CGRectInfinite) is True)
105
106        v = CGRectInset(rect, 2, 3)
107        self.assertIsInstance(v, CGRect)
108        self.assertEqual(v.origin.x, rect.origin.x + 2)
109        self.assertEqual(v.origin.y, rect.origin.y + 3)
110        self.assertEqual(v.size.width, rect.size.width - 4)
111        self.assertEqual(v.size.height, rect.size.height - 6)
112
113        v = CGRectIntegral(CGRectMake(1.5, 2.5, 3.5, 4.5))
114        self.assertIsInstance(v, CGRect)
115        self.assertEqual(v, ((1, 2), (4, 5)))
116
117        v = CGRectUnion(((1,1), (4,5)), ((99,5), (40, 40)))
118        self.assertIsInstance(v, CGRect)
119
120        v = CGRectIntersection(((1,1), (4,5)), ((99,5), (40, 40)))
121        self.assertIsInstance(v, CGRect)
122
123        r = CGRectOffset(rect, 9, -5)
124        self.assertIsInstance(v, CGRect)
125
126        self.assertArgIsOut(CGRectDivide, 1)
127        self.assertArgIsOut(CGRectDivide, 2)
128        slice, remainder = CGRectDivide(rect, None, None, 10, CGRectMinYEdge)
129        self.assertIsInstance(slice, CGRect)
130        self.assertIsInstance(remainder, CGRect)
131
132        self.assertResultHasType(CGRectContainsPoint, objc._C_BOOL)
133        self.assertResultHasType(CGRectContainsRect, objc._C_BOOL)
134        self.assertResultHasType(CGRectIntersectsRect, objc._C_BOOL)
135        self.assertTrue(CGRectContainsPoint(rect, rect.origin) is True)
136        self.assertTrue(CGRectContainsRect(rect, rect) is True)
137        self.assertTrue(CGRectIntersectsRect(rect, rect) is True)
138
139    @min_os_level('10.5')
140    def testFunctions10_5(self):
141        d = CGPointCreateDictionaryRepresentation((10, 5))
142        self.assertIsInstance(d, CFDictionaryRef)
143
144        ok, p = CGPointMakeWithDictionaryRepresentation(d, None)
145        self.assertTrue(ok is True)
146        self.assertIsInstance(p, CGPoint)
147        self.assertEqual(p.x, 10)
148        self.assertEqual(p.y, 5)
149
150        d = CGSizeCreateDictionaryRepresentation((10, 5))
151        self.assertIsInstance(d, CFDictionaryRef)
152
153        ok, p = CGSizeMakeWithDictionaryRepresentation(d, None)
154        self.assertTrue(ok is True)
155        self.assertIsInstance(p, CGSize)
156        self.assertEqual(p.width, 10)
157        self.assertEqual(p.height, 5)
158
159        d = CGRectCreateDictionaryRepresentation(CGRectMake(0, 10, 20, 30))
160        self.assertIsInstance(d, CFDictionaryRef)
161
162        ok, p = CGRectMakeWithDictionaryRepresentation(d, None)
163        self.assertTrue(ok is True)
164        self.assertIsInstance(p, CGRect)
165        self.assertEqual(p, CGRectMake(0, 10, 20, 30))
166
167
168
169if __name__ == "__main__":
170    main()
171