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

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI02-CSML/trunk/services/3rdParty/GeoTypes-0.6.0/tests/Path_Test.py@2194
Revision 2194, 6.2 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 _Path
16    from _Path import *
17
18class PathTest(unittest.TestCase):
19    def testEqualities(self):
20        p = Path()
21        q = Path()
22        assert p != None
23        assert None != p
24        assert p != 0
25        assert p != {}
26        assert p != []
27        assert p == q
28
29    def testPath(self):
30        """
31        Check basic Path class       
32        """
33
34        path = Path()
35        assert path.isClosed()
36        path.setOpen()
37        assert path.isOpen()
38        assert not path.isClosed()
39        path.setClosed()
40        assert not path.isOpen()
41        assert path.isClosed()
42
43        p1 = Point("(1,2)")
44        p2 = Point("(2,3)")
45        p3 = Point("(4,5)")
46       
47        path = Path("((1,2),(2,3),(4,5))")
48
49        assert path[0] == p1
50        assert path[1] == p2
51        assert path[2] == p3
52        assert path.isClosed()
53
54        path = Path("[(1,2),(2,3),(4,5)]")
55
56        assert path[0] == p1
57        assert path[1] == p2
58        assert path[2] == p3
59        assert path.isOpen()
60
61        self.assertRaises(TypeError,Path,"'(1,2),(2,3),(4,5)'")
62
63        path = Path("((1,2),(2,3),(4,5))")
64        assert path.__str__() == "'((1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000))'"
65        assert path.__repr__() == "((1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000))"
66
67        path = Path("[(1,2),(2,3),(4,5)]")
68        assert path.__str__() == "'[(1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000)]'"
69        assert path.__repr__() == "[(1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000)]"
70
71
72        path.setClosed()
73        assert path.__str__() == "'((1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000))'"
74        assert path.__repr__() == "((1.000000,2.000000),(2.000000,3.000000),(4.000000,5.000000))"
75
76        path1 = Path("((1,2),(2,3),(4,5))")
77        path2 = Path("((1,2),(2,3),(4,5))")
78
79        assert path1 == path2
80
81        path2 = Path("((1,2),(2,3),(4,5),(6,7))")
82        assert path1 != path2
83
84        path2 = Path("((4,2),(2,3),(4,5))")
85        assert path1 != path2
86
87        path1 = Path("((1,2),(2,3),(4,5))")
88        path2 = Path("[(1,2),(2,3),(4,5)]")
89        assert path1 != path2
90
91
92
93           
94    def testPathContainerBehaviour(self):
95        """
96        Check that the basic Path class works as
97        a container of Points
98        """
99
100        path = Path()
101        assert len(path) == 0
102
103        start = Point("(1.0,2.0)")
104        path.append(start)
105
106        assert len(path) == 1
107        assert start in path
108        assert path.index(start) == 0
109        assert path[path.index(start)] == start
110
111        # Check append
112       
113        p2 = Point("(2.0,3.0)")
114        path.append(p2)
115
116        assert len(path) == 2
117        assert start in path
118        assert path.index(start) == 0
119        assert path[path.index(start)] == start
120        assert path.index(p2) == 1
121        assert path[path.index(p2)] == p2
122
123        # Check __inter__
124       
125        count = 0
126        for point in path:
127            assert point in path
128            count = count + 1
129           
130        assert count == 2
131
132
133        # Check count
134
135        path.append(p2)
136
137        assert path.count(start) == 1
138        assert path.count(p2) == 2
139
140
141        # Check index - already checked above
142
143        # Check extend
144
145        path2 = Path()
146        path2.append(Point("(10,10)"))
147        path2.append(Point("(11,11)"))
148        assert len(path2) == 2
149
150        path2.extend(path)
151        assert len(path2) == 2 + len(path)
152
153        # Check insert
154
155        p3 = Point("(100,100)")
156        path2.insert(2,p3)
157        assert len(path2) == 3 + len(path)
158        assert path2.index(p3) == 2
159        assert path2[2] == p3
160
161        # Check pop
162
163        path2.append(p3)
164        assert len(path2) == 4 + len(path)
165        assert path2.pop() == p3
166        assert len(path2) == 3 + len(path)
167
168        # Check remove
169
170        assert p3 in path2
171        path2.remove(p3)
172        assert p3 not in path2
173
174        # Check _setitem_
175       
176        path2.append(p3)
177        p4 = Point("(200,200)")
178        idx = path2.index(p3)
179        path2[idx] = p4
180        assert path2[idx] == p4
181        assert path2.index(p4) == idx
182        assert p4 in path2
183
184        # Check _delitem_
185        del path2[idx]
186        assert p4 not in path2
187       
188       
189
190    def testFactories(self):
191        p1 = Point("(1.0,2.0)")
192        p2 = Point("(1.0,3.0)")
193        p3 = Point("(1.0,4.0)")
194
195        path = pathFromPoints(p1,p2,p3)
196
197        assert path[0] == p1
198        assert path[1] == p2
199        assert path[2] == p3
200        assert path.isClosed()       
201
202        path = pathFromSequence(((1.0,2.0),(1.0,3.0),(1.0,4.0)))
203        assert path[0] == p1
204        assert path[1] == p2
205        assert path[2] == p3
206        assert path.isClosed()
207       
208    def testzzz_CoverageAssertion(self):
209        try:
210            coverage.stop()
211        except:
212            return 1
213       
214        x = coverage.analysis(_Path)
215        assert x[2]==[], "Coverage is less than 100%"
216
217def testSuite():
218    return unittest.makeSuite(PathTest,'test')
219
220if __name__ == "__main__":
221    if os.environ.get('USECOVERAGE') == '1':
222        try:
223            import coverage
224            coverage.erase()
225            coverage.start()
226            COVERAGE = 1
227            from _Point import *
228            from _LineSeg import *
229            import _Path
230            from _Path import *
231
232        except:
233            print "Error setting up coverage checking"
234            COVERAGE = 0
235    else:
236        COVERAGE = 0
237
238    if os.environ.get('USEPYCHECK') == '1':
239        try:
240            import pychecker.checker
241        except:
242            print "Pychecker not installed on this machine"
243
244
245
246    unittest.TextTestRunner().run(testSuite())
247
248    if COVERAGE:
249        coverage.stop()
250        x = coverage.analysis(_Path)
251        print "\n"
252        coverage.report(_Path)
Note: See TracBrowser for help on using the repository browser.