1#
2# Tests for the struct-wrappers for NSPoint, NSSize, NSRange and NSRect.
3#
4from Foundation import *
5from PyObjCTools.TestSupport import *
6import operator
7
8def do_set_slice(op, start, stop, value):
9    op[start:stop] = value
10
11def do_del_slice(op, start, stop):
12    del op[start:stop]
13
14class TestNSPoint (TestCase):
15    def testConstructor(self):
16        p = NSPoint()
17        self.assert_(isinstance(p, NSPoint))
18        self.assertEqual(p.x, 0)
19        self.assertEqual(p.y, 0)
20
21        p = NSPoint(1,2)
22        self.assert_(isinstance(p, NSPoint))
23        self.assertEqual(p.x, 1)
24        self.assertEqual(p.y, 2)
25        self.assertEqual(p[0], 1)
26        self.assertEqual(p[1], 2)
27
28        p = NSPoint(y=1,x=2)
29        self.assert_(isinstance(p, NSPoint))
30        self.assertEqual(p.x, 2)
31        self.assertEqual(p.y, 1)
32        self.assertEqual(p[1], 1)
33        self.assertEqual(p[0], 2)
34
35        self.assertRaises(TypeError, NSPoint, 1, 2, 3)
36        self.assertRaises(TypeError, NSPoint, 1, 2, y=3)
37        self.assertRaises(TypeError, NSPoint, 1, x=3)
38        self.assertRaises(TypeError, NSPoint, x=3, z=4)
39
40    def testMakePoint(self):
41        p = NSMakePoint(1, 2)
42        self.assert_(isinstance(p, NSPoint))
43        self.assertEqual(p.x, 1)
44        self.assertEqual(p.y, 2)
45
46    def testHash(self):
47        p = NSMakePoint(1, 2)
48        self.assertRaises(TypeError, hash, p)
49
50    def testCompare(self):
51        p = NSMakePoint(1, 2)
52        q = NSMakePoint(2, 3)
53        P = (1, 2)
54        Q = (2, 3)
55
56        self.assert_(not (p < p))
57        self.assert_(not (p < P))
58        self.assert_(p < q)
59        self.assert_(p < Q)
60
61        self.assert_(p <= p)
62        self.assert_(p <= P)
63        self.assert_(p <= q)
64        self.assert_(p <= Q)
65
66        self.assert_(p == p)
67        self.assert_(p == P)
68        self.assert_(not (p == q))
69        self.assert_(not (p == Q))
70
71        self.assert_(p != q)
72        self.assert_(p != Q)
73        self.assert_(not(p != p))
74        self.assert_(not(p != P))
75
76        self.assert_(q >= p)
77        self.assert_(q >= P)
78        self.assert_(q >= q)
79        self.assert_(q >= Q)
80
81        self.assert_(not (q > q))
82        self.assert_(not (q > Q))
83        self.assert_(q > p)
84        self.assert_(q > P)
85
86    def testRepr(self):
87        p = NSPoint()
88        self.assertEqual(repr(p), "<NSPoint x=0.0 y=0.0>")
89
90        p = NSPoint(42, 98)
91        self.assertEqual(repr(p), "<NSPoint x=42 y=98>")
92
93        p.x = p
94        self.assertEqual(repr(p), "<NSPoint x=<NSPoint ...> y=98>")
95
96    def testStr(self):
97        p = NSPoint()
98        self.assertEqual(str(p), "<NSPoint x=0.0 y=0.0>")
99
100        p = NSPoint(42, 98)
101        self.assertEqual(str(p), "<NSPoint x=42 y=98>")
102
103        p.x = p
104        self.assertEqual(repr(p), "<NSPoint x=<NSPoint ...> y=98>")
105
106    def testSlice(self):
107        p = NSPoint(1,2)
108        q = p[:]
109
110        self.assert_(isinstance(q, tuple))
111        self.assertEqual(q, (1.0,2.0))
112
113    def testDeleteAttr(self):
114        p = NSPoint(1,2)
115        self.assertRaises(TypeError, delattr, p, 'x')
116
117    def testDeleteSlice(self):
118        p = NSPoint(1,2)
119        self.assertRaises(TypeError, operator.delitem, p, 0)
120
121    def testAssignSlice(self):
122        p = NSPoint(1,2)
123        p[:] = (4,5)
124
125        self.assert_(isinstance(p, NSPoint))
126        self.assertEqual(p.x, 4)
127        self.assertEqual(p.y, 5)
128
129        p[:] = p
130        self.assert_(isinstance(p, NSPoint))
131        self.assertEqual(p.x, 4)
132        self.assertEqual(p.y, 5)
133
134        self.assertRaises(TypeError, do_set_slice, p, 0, 2, [1,2,3])
135        self.assertRaises(TypeError, do_set_slice, p, 0, 2, [3])
136        self.assertRaises(TypeError, do_set_slice, p, 0, 3, [1,2,3])
137
138        self.assertRaises(TypeError, do_del_slice, p, 0, 0)
139        self.assertRaises(TypeError, do_del_slice, p, 0, 1)
140        self.assertRaises(TypeError, do_del_slice, p, 0, 2)
141
142class TestNSSize (TestCase):
143    def testConstructor(self):
144        p = NSSize()
145        self.assert_(isinstance(p, NSSize))
146        self.assertEqual(p.width, 0)
147        self.assertEqual(p.height, 0)
148
149        p = NSSize(1,2)
150        self.assert_(isinstance(p, NSSize))
151        self.assertEqual(p.width, 1)
152        self.assertEqual(p.height, 2)
153        self.assertEqual(p[0], 1)
154        self.assertEqual(p[1], 2)
155
156        p = NSSize(height=1,width=2)
157        self.assert_(isinstance(p, NSSize))
158        self.assertEqual(p.width, 2)
159        self.assertEqual(p.height, 1)
160        self.assertEqual(p[1], 1)
161        self.assertEqual(p[0], 2)
162
163        self.assertRaises(TypeError, NSSize, 1, 2, 3)
164        self.assertRaises(TypeError, NSSize, 1, 2, height=3)
165        self.assertRaises(TypeError, NSSize, 1, width=3)
166        self.assertRaises(TypeError, NSSize, width=3, z=4)
167
168    def testMakeSize(self):
169        p = NSMakeSize(1, 2)
170        self.assert_(isinstance(p, NSSize))
171        self.assertEqual(p.width, 1)
172        self.assertEqual(p.height, 2)
173
174class TestNSRange (TestCase):
175    def testConstructor(self):
176        p = NSRange()
177        self.assert_(isinstance(p, NSRange))
178        self.assertEqual(p.location, 0)
179        self.assertEqual(p.length, 0)
180
181        p = NSRange(1,2)
182        self.assert_(isinstance(p, NSRange))
183        self.assertEqual(p.location, 1)
184        self.assertEqual(p.length, 2)
185        self.assertEqual(p[0], 1)
186        self.assertEqual(p[1], 2)
187
188        p = NSRange(length=1,location=2)
189        self.assert_(isinstance(p, NSRange))
190        self.assertEqual(p.location, 2)
191        self.assertEqual(p.length, 1)
192        self.assertEqual(p[1], 1)
193        self.assertEqual(p[0], 2)
194
195        self.assertRaises(TypeError, NSRange, 1, 2, 3)
196        self.assertRaises(TypeError, NSRange, 1, 2, length=3)
197        self.assertRaises(TypeError, NSRange, 1, location=3)
198        self.assertRaises(TypeError, NSRange, location=3, z=4)
199
200    def testMakeSize(self):
201        p = NSMakeSize(1, 2)
202        self.assert_(isinstance(p, NSSize))
203        self.assertEqual(p.width, 1)
204        self.assertEqual(p.height, 2)
205
206class TestNSRect (TestCase):
207    def testConstructor(self):
208        p = NSRect()
209        self.assert_(isinstance(p, NSRect))
210        self.assert_(p.origin is not None)
211        self.assert_(p.size is not None)
212        self.assertEqual(p.origin, NSPoint(0, 0))
213        self.assertEqual(p.size, NSSize(0, 0))
214
215        p = NSRect(1,2)
216        self.assert_(isinstance(p, NSRect))
217        self.assertEqual(p.origin, 1)
218        self.assertEqual(p.size, 2)
219        self.assertEqual(p[0], 1)
220        self.assertEqual(p[1], 2)
221
222        p = NSRect(size=1,origin=2)
223        self.assert_(isinstance(p, NSRect))
224        self.assertEqual(p.origin, 2)
225        self.assertEqual(p.size, 1)
226        self.assertEqual(p[1], 1)
227        self.assertEqual(p[0], 2)
228
229        self.assertRaises(TypeError, NSRect, 1, 2, 3)
230        self.assertRaises(TypeError, NSRect, 1, 2, origin=3)
231        self.assertRaises(TypeError, NSRect, 1, origin=3)
232        self.assertRaises(TypeError, NSRect, origin=3, z=4)
233
234    def testMakeRect(self):
235        p = NSMakeRect(1, 2, 3, 4)
236        self.assert_(isinstance(p, NSRect))
237        self.assertEqual(p.origin, (1, 2))
238        self.assertEqual(p.size, (3,4))
239        self.assertEqual(p.origin.x, 1)
240        self.assertEqual(p.origin.y, 2)
241        self.assertEqual(p.size.width, 3)
242        self.assertEqual(p.size.height, 4)
243
244if __name__ == "__main__":
245    main()
246