1# Test special methods of NSBezierPath
2# TODO: Test implementing these in python.
3from PyObjCTools.TestSupport import *
4import objc
5
6from AppKit import *
7
8class TestNSBezierPath(TestCase):
9    if not hasattr(TestCase, 'assertAlmostEquals'):
10        def assertAlmostEquals(self, val1, val2):
11            self.assert_(abs(val1 - val2) < 0.000001)
12
13    def assertPointEquals(self, point1, point2):
14        self.assertAlmostEquals(point1[0], point2[0])
15        self.assertAlmostEquals(point1[1], point2[1])
16
17    def test_creation(self):
18        p = NSBezierPath.bezierPath()
19        self.assert_(p is not None)
20        self.assertEquals(p.elementCount(), 0)
21
22        p = NSBezierPath.bezierPathWithOvalInRect_(((0, 0), (100, 50)))
23        self.assert_(p is not None)
24        self.assertEquals(p.elementCount(), 5)
25
26    def test_appendPoints(self):
27        p = NSBezierPath.bezierPath()
28        self.assert_(p is not None)
29        self.assertEquals(p.elementCount(), 0)
30
31        points = [ (0, 0), (100, 0), (100, 100), (0, 0) ]
32        p.appendBezierPathWithPoints_count_(points, 3)
33        self.assertEquals(p.elementCount(), 3)
34
35    def test_setLineDash(self):
36        p = NSBezierPath.bezierPath()
37        p.setLineDash_count_phase_((10, 10, 20, 5), 4, 45.0)
38
39        pattern, count, phase = p.getLineDash_count_phase_(objc.NULL, 0, None)
40        #self.assertEquals(pattern, None)
41        self.assertEquals(pattern, objc.NULL)
42        self.assertEquals(count, 4)
43        self.assertAlmostEquals(phase, 45.0)
44
45        pattern, count, phase = p.getLineDash_count_phase_(None, 4, None)
46        self.assertAlmostEquals(pattern[0], 10)
47        self.assertAlmostEquals(pattern[1], 10)
48        self.assertAlmostEquals(pattern[2], 20)
49        self.assertAlmostEquals(pattern[3], 5)
50        self.assertEquals(count, 4)
51        self.assertAlmostEquals(phase, 45.0)
52
53    def test_elementAtIndex(self):
54        p = NSBezierPath.bezierPath()
55        p.moveToPoint_((10, 10))
56        p.lineToPoint_((20, 30))
57        p.lineToPoint_((30, 20))
58        p.curveToPoint_controlPoint1_controlPoint2_((40, 41), (10, 11), (20, 21))
59        p.closePath()
60
61        self.assertEquals(p.elementAtIndex_(0), NSMoveToBezierPathElement)
62        self.assertEquals(p.elementAtIndex_(1), NSLineToBezierPathElement)
63        self.assertEquals(p.elementAtIndex_(2), NSLineToBezierPathElement)
64        self.assertEquals(p.elementAtIndex_(3), NSCurveToBezierPathElement)
65        self.assertEquals(p.elementAtIndex_(4), NSClosePathBezierPathElement)
66
67        tp, points = p.elementAtIndex_associatedPoints_(0)
68        self.assertEquals(tp, NSMoveToBezierPathElement)
69        self.assertEquals(len(points), 1)
70        self.assertPointEquals(points[0], (10, 10))
71
72        tp, points = p.elementAtIndex_associatedPoints_(1)
73        self.assertEquals(tp, NSLineToBezierPathElement)
74        self.assertEquals(len(points), 1)
75        self.assertPointEquals(points[0], (20, 30))
76
77        tp, points = p.elementAtIndex_associatedPoints_(2)
78        self.assertEquals(tp, NSLineToBezierPathElement)
79        self.assertEquals(len(points), 1)
80        self.assertPointEquals(points[0], (30, 20))
81
82        tp, points = p.elementAtIndex_associatedPoints_(3)
83        self.assertEquals(tp, NSCurveToBezierPathElement)
84        self.assertEquals(len(points), 3)
85        self.assertPointEquals(points[0], (10, 11)) # control point 1
86        self.assertPointEquals(points[1], (20, 21)) # control point 2
87        self.assertPointEquals(points[2], (40, 41)) # end point
88
89        tp, points = p.elementAtIndex_associatedPoints_(4)
90        self.assertEquals(tp, NSClosePathBezierPathElement)
91        self.assertEquals(len(points), 0)
92
93    def test_setAssociatedPoints(self):
94        p = NSBezierPath.bezierPath()
95        p.moveToPoint_((10, 10))
96        p.lineToPoint_((20, 30))
97        p.lineToPoint_((30, 20))
98        p.curveToPoint_controlPoint1_controlPoint2_((40, 41), (10, 11), (20, 21))
99        p.closePath()
100
101        p.setAssociatedPoints_atIndex_([(0, 1)], 0)
102        tp, points = p.elementAtIndex_associatedPoints_(0)
103        self.assertEquals(tp, NSMoveToBezierPathElement)
104        self.assertEquals(len(points), 1)
105        self.assertPointEquals(points[0], (0, 1))
106
107        p.setAssociatedPoints_atIndex_([(0, 1), (2,3), (3,4)], 3)
108        tp, points = p.elementAtIndex_associatedPoints_(3)
109        self.assertEquals(tp, NSCurveToBezierPathElement)
110        self.assertEquals(len(points), 3)
111        self.assertPointEquals(points[0], (0, 1)) # control point 1
112        self.assertPointEquals(points[1], (2, 3)) # control point 2
113        self.assertPointEquals(points[2], (3, 4)) # end point
114
115
116    def testConstants(self):
117        self.failUnlessEqual(NSButtLineCapStyle, 0)
118        self.failUnlessEqual(NSRoundLineCapStyle, 1)
119        self.failUnlessEqual(NSSquareLineCapStyle, 2)
120        self.failUnlessEqual(NSMiterLineJoinStyle, 0)
121        self.failUnlessEqual(NSRoundLineJoinStyle, 1)
122        self.failUnlessEqual(NSBevelLineJoinStyle, 2)
123        self.failUnlessEqual(NSNonZeroWindingRule, 0)
124        self.failUnlessEqual(NSEvenOddWindingRule, 1)
125        self.failUnlessEqual(NSMoveToBezierPathElement, 0)
126        self.failUnlessEqual(NSLineToBezierPathElement, 1)
127        self.failUnlessEqual(NSCurveToBezierPathElement, 2)
128        self.failUnlessEqual(NSClosePathBezierPathElement, 3)
129
130
131    def testMethods(self):
132        self.failUnlessResultIsBOOL(NSBezierPath.isEmpty)
133        self.failUnlessResultIsBOOL(NSBezierPath.containsPoint_)
134        self.failUnlessResultIsBOOL(NSBezierPath.cachesBezierPath)
135        self.failUnlessArgIsBOOL(NSBezierPath.setCachesBezierPath_, 0)
136
137
138if __name__ == '__main__':
139    main( )
140