source: TI02-CSML/trunk/services/3rdParty/GeoTypes-0.6.0/tests/Polygon_Test.py @ 2194

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/services/3rdParty/GeoTypes-0.6.0/tests/Polygon_Test.py@2194
Revision 2194, 5.6 KB checked in by lawrence, 13 years ago (diff)

Adding various specs and 3rd party code of interest for the CSML
services development.

Line 
1
2################################################################################
3# Copyright (c) QinetiQ Plc 2003
4#
5# Licensed under the LGPL. For full license details see the LICENSE file.
6################################################################################
7
8import unittest
9import os
10import TestConfig
11
12if not os.environ.get('USECOVERAGE') == '1':
13    from _Point import *
14    from _LineSeg import *
15    import _Polygon
16    from _Polygon import *
17
18class PolygonTest(unittest.TestCase):
19
20    def testPolygon(self):
21        """
22        Check basic Polygon class       
23        """
24
25        polygon = Polygon()
26        assert polygon.isClosed()
27
28        self.assertRaises(RuntimeError, polygon.setOpen)
29
30        assert not polygon.isOpen()
31        polygon.setClosed()
32        assert not polygon.isOpen()
33        assert polygon.isClosed()
34
35        p1 = Point("(1,2)")
36        p2 = Point("(2,3)")
37        p3 = Point("(4,5)")
38       
39        polygon = Polygon("((1,2),(2,3),(4,5))")
40
41        assert polygon[0] == p1
42        assert polygon[1] == p2
43        assert polygon[2] == p3
44        assert polygon.isClosed()
45
46
47        self.assertRaises(RuntimeError, Polygon, "[(1,2),(2,3),(4,5)]")
48        self.assertRaises(TypeError,Polygon,"'(1,2),(2,3),(4,5)'")
49
50        polygon = Polygon("((1,2),(2,3),(4,5))")
51        assert polygon.__str__() == "'((1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000))'"
52        assert polygon.__repr__() == "((1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000))"
53
54
55        polygon1 = Polygon("((1,2),(2,3),(4,5))")
56        polygon2 = Polygon("((1,2),(2,3),(4,5))")
57
58        assert polygon1 == polygon2
59
60        polygon2 = Polygon("((1,2),(2,3),(4,5),(6,7))")
61        assert polygon1 != polygon2
62
63        polygon2 = Polygon("((4,2),(2,3),(4,5))")
64        assert polygon1 != polygon2
65
66
67
68
69           
70    def testPolygonContainerBehaviour(self):
71        """
72        Check that the basic Polygon class works as
73        a container of Points
74        """
75
76        polygon = Polygon()
77        assert len(polygon) == 0
78
79        start = Point("(1.0,2.0)")
80        polygon.append(start)
81
82        assert len(polygon) == 1
83        assert start in polygon
84        assert polygon.index(start) == 0
85        assert polygon[polygon.index(start)] == start
86
87        # Check append
88       
89        p2 = Point("(2.0,3.0)")
90        polygon.append(p2)
91
92        assert len(polygon) == 2
93        assert start in polygon
94        assert polygon.index(start) == 0
95        assert polygon[polygon.index(start)] == start
96        assert polygon.index(p2) == 1
97        assert polygon[polygon.index(p2)] == p2
98
99        # Check __inter__
100       
101        count = 0
102        for point in polygon:
103            assert point in polygon
104            count = count + 1
105           
106        assert count == 2
107
108
109        # Check count
110
111        polygon.append(p2)
112
113        assert polygon.count(start) == 1
114        assert polygon.count(p2) == 2
115
116
117        # Check index - already checked above
118
119        # Check extend
120
121        polygon2 = Polygon()
122        polygon2.append(Point("(10,10)"))
123        polygon2.append(Point("(11,11)"))
124        assert len(polygon2) == 2
125
126        polygon2.extend(polygon)
127        assert len(polygon2) == 2 + len(polygon)
128
129        # Check insert
130
131        p3 = Point("(100,100)")
132        polygon2.insert(2,p3)
133        assert len(polygon2) == 3 + len(polygon)
134        assert polygon2.index(p3) == 2
135        assert polygon2[2] == p3
136
137        # Check pop
138
139        polygon2.append(p3)
140        assert len(polygon2) == 4 + len(polygon)
141        assert polygon2.pop() == p3
142        assert len(polygon2) == 3 + len(polygon)
143
144        # Check remove
145
146        assert p3 in polygon2
147        polygon2.remove(p3)
148        assert p3 not in polygon2
149
150        # Check _setitem_
151       
152        polygon2.append(p3)
153        p4 = Point("(200,200)")
154        idx = polygon2.index(p3)
155        polygon2[idx] = p4
156        assert polygon2[idx] == p4
157        assert polygon2.index(p4) == idx
158        assert p4 in polygon2
159
160        # Check _delitem_
161        del polygon2[idx]
162        assert p4 not in polygon2
163       
164       
165
166    def testFactories(self):
167        p1 = Point("(1.0,2.0)")
168        p2 = Point("(1.0,3.0)")
169        p3 = Point("(1.0,4.0)")
170
171        polygon = polygonFromPoints(p1,p2,p3)
172
173        assert polygon[0] == p1
174        assert polygon[1] == p2
175        assert polygon[2] == p3
176        assert polygon.isClosed()       
177
178        polygon = polygonFromSequence(((1.0,2.0),(1.0,3.0),(1.0,4.0)))
179        assert polygon[0] == p1
180        assert polygon[1] == p2
181        assert polygon[2] == p3
182        assert polygon.isClosed()
183
184    def testzzz_CoverageAssertion(self):
185        try:
186            coverage.stop()
187        except:
188            return 1
189       
190        x = coverage.analysis(_Polygon)
191        assert x[2]==[], "Coverage is less than 100%"
192
193def testSuite():
194    return unittest.makeSuite(PolygonTest,'test')
195
196if __name__ == "__main__":
197    import os
198    if os.environ.get('USECOVERAGE') == '1':
199        try:
200            import coverage
201            coverage.erase()
202            coverage.start()
203            COVERAGE = 1
204            from _Point import *
205            from _LineSeg import *
206            import _Polygon
207            from _Polygon import *
208
209        except:
210            print "Error setting up coverage checking"
211            COVERAGE = 0
212    else:
213        COVERAGE = 0
214
215    if os.environ.get('USEPYCHECK') == '1':
216        try:
217            import pychecker.checker
218        except:
219            print "Pychecker not installed on this machine"
220
221
222    unittest.TextTestRunner().run(testSuite())
223
224    if COVERAGE:
225        coverage.stop()
226        x = coverage.analysis(_Polygon)
227        print "\n"
228        coverage.report(_Polygon)
Note: See TracBrowser for help on using the repository browser.