/[thuban]/branches/WIP-pyshapelib-bramz/test/test_proj.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/test/test_proj.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 333 by bh, Fri Sep 20 15:47:07 2002 UTC revision 1756 by bh, Fri Sep 26 14:03:51 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002 by Intevation GmbH  # Copyright (c) 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 14  __version__ = "$Revision$" Line 14  __version__ = "$Revision$"
14  # $Id$  # $Id$
15    
16  import unittest  import unittest
17    import os
18    
19    import xmlsupport
20  import support  import support
21  support.initthuban()  support.initthuban()
22    
23  from Thuban.Model.proj import Projection  from Thuban import _
24    from Thuban.Model.proj import Projection, ProjFile
25    
26    import Thuban.Model.resource as resource
27    
28    from xmlsupport import sax_eventlist
29    
30    from xml.sax import SAXParseException
31    
32    
33  class TestProjection(unittest.TestCase, support.FloatComparisonMixin):  class TestProjection(unittest.TestCase, support.FloatComparisonMixin):
# Line 28  class TestProjection(unittest.TestCase, Line 37  class TestProjection(unittest.TestCase,
37    
38      def test(self):      def test(self):
39          """Test Projection"""          """Test Projection"""
40          proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])          params = ["zone=26", "proj=utm", "ellps=clrk66"]
41          self.assertEquals(proj.params, ["zone=26", "proj=utm", "ellps=clrk66"])          proj = Projection(params)
42            self.assertEquals(proj.params, params)
43    
44          # It's not clear whether this value is really the correct one          # It's not clear whether this value is really the correct one
45          # but a test failure here probably still means a bug somewhere          # but a test failure here probably still means a bug somewhere
# Line 44  class TestProjection(unittest.TestCase, Line 54  class TestProjection(unittest.TestCase,
54                                    3875381.8535437919, 252962.10480170773),                                    3875381.8535437919, 252962.10480170773),
55                                   epsilon = 1e-5)                                   epsilon = 1e-5)
56    
57            # GetName()
58            self.assertEquals(proj.GetName(), _("Unknown"))
59    
60            # GetParameter()
61            self.assertEquals(proj.GetParameter("zone"), "26")
62            self.assertEquals(proj.GetParameter("proj"), "utm")
63            self.assertEquals(proj.GetParameter("ellps"), "clrk66")
64            self.assertEquals(proj.GetParameter("hallo"), "")
65    
66            # GetAllParameters()
67            self.assertEquals(proj.GetAllParameters(), params)
68    
69            # GetName()
70            proj = Projection(params, "MyName")
71            self.assertEquals(proj.GetName(), "MyName")
72    
73    
74    sample_projfile = '''\
75    <?xml version="1.0" encoding="UTF-8"?>
76    <!DOCTYPE projectionlist SYSTEM "projfile.dtd">
77    <projectionlist>
78        <projection name="Transverse Mercator">
79            <parameter value="proj=tmerc"/>
80            <parameter value="ellps=clrk66"/>
81            <parameter value="lat_0=90w"/>
82            <parameter value="lon_0=90w"/>
83            <parameter value="k=1"/>
84        </projection>
85        <projection name="Transverse Mercator">
86            <parameter value="proj=tmerc"/>
87            <parameter value="ellps=clrk66"/>
88            <parameter value="lat_0=30w"/>
89            <parameter value="lon_0=30w"/>
90            <parameter value="k=1"/>
91        </projection>
92        <projection name="Universal Transverse Mercator">
93            <parameter value="proj=utm"/>
94            <parameter value="ellps=clrk66"/>
95            <parameter value="zone=1"/>
96        </projection>
97    </projectionlist>
98    '''
99    
100    sample_projfile_data = [("Transverse Mercator", ["proj=tmerc",
101                                                      "ellps=clrk66",
102                                                      "lat_0=90w",
103                                                      "lon_0=90w",
104                                                      "k=1"]),
105                            ("Transverse Mercator", ["proj=tmerc",
106                                                      "ellps=clrk66",
107                                                      "lat_0=30w",
108                                                      "lon_0=30w",
109                                                      "k=1"]),
110                            ("Universal Transverse Mercator", ["proj=utm",
111                                                                "ellps=clrk66",
112                                                                "zone=1"])]
113    
114    sample_projfile2 = '''\
115    <?xml version="1.0" encoding="UTF-8"?>
116    <!DOCTYPE projectionlist SYSTEM "projfile.dtd">
117    <projectionlist>
118    </projectionlist>
119    '''
120    
121    sample_projfile_data2 = []
122    
123    class TestProjFile(unittest.TestCase, support.FileTestMixin,
124                       xmlsupport.ValidationTest):
125    
126        """Test cases for reading and writing projection files.
127        """
128    
129        def compare_xml(self, xml1, xml2):
130            self.assertEquals(sax_eventlist(xml1), sax_eventlist(xml2))
131    
132        def test(self):
133            """Test ProjFile"""
134    
135            proj0 = Projection(["proj=tmerc", "ellps=clrk66"])
136            proj1 = Projection(["proj=utm", "ellps=clrk66"])
137            proj2 = Projection(["proj=lcc", "ellps=clrk66",
138                                "lat_1=0", "lat_2=20"])
139    
140            eq = self.assertEquals
141    
142    
143            #
144            # __init__()
145            # GetFilename()
146            # SetFilename()
147            #
148            for name in ["", "hello_world"]:
149                projFile = ProjFile(name)
150                eq(projFile.GetFilename(), name)
151    
152                projFile.SetFilename("XXX")
153                projFile.SetFilename(name)
154                eq(projFile.GetFilename(), name)
155    
156            # initial number of projections should be 0
157            eq(len(projFile.GetProjections()), 0)
158    
159            #
160            # Add()
161            # Remove()
162            #
163            projFile.Add(proj0)
164            eq(len(projFile.GetProjections()), 1)
165            projFile.Remove(proj0)
166            eq(len(projFile.GetProjections()), 0)
167    
168            # try to remove something that doesn't exist
169            self.assertRaises(ValueError, projFile.Remove, None)
170            self.assertRaises(ValueError, projFile.Remove, proj0)
171    
172            projFile.Add(proj0)
173            projFile.Add(proj1)
174            projFile.Add(proj2)
175            eq(len(projFile.GetProjections()), 3)
176    
177            # GetProjections() -- tests order
178            projs = projFile.GetProjections()
179            eq(projs[0], proj0)
180            eq(projs[1], proj1)
181            eq(projs[2], proj2)
182    
183            projFile.Remove(proj2)
184            projFile.Remove(proj1)
185    
186            # Replace()
187            projFile.Replace(proj0, proj1)
188            projs = projFile.GetProjections()
189            eq(projs[0], proj1)
190    
191            # replace a non-existent projection
192            self.assertRaises(ValueError, projFile.Replace, None, proj2)
193            self.assertRaises(ValueError, projFile.Replace, proj0, proj2)
194    
195        def testRead(self):
196            """Test read_proj_file"""
197    
198            self.doTestRead(sample_projfile_data, sample_projfile)
199            self.doTestRead(sample_projfile_data2, sample_projfile2)
200    
201            #
202            # file doesn't exist
203            #
204            self.assertRaises(IOError,
205                resource.read_proj_file, self.temp_file_name("nonexistent.proj"))
206    
207            #
208            # file isn't readable
209            #
210            filename = self.temp_file_name("projfile.proj")
211            file = open(filename, "w")
212            file.close()
213            os.chmod(filename, 0200) # write-only
214            self.assertRaises(IOError, resource.read_proj_file, filename)
215            os.chmod(filename, 0600) # read/write so we reuse the file
216    
217            #
218            # file has invalid XML (or none at all)
219            #
220            filename = self.temp_file_name("projfile.proj")
221            file = open(filename, "w")
222            file.close()
223    
224            self.assertRaises(SAXParseException, resource.read_proj_file, filename)
225    
226        def testWrite(self):
227            """Test write_proj_file"""
228    
229            self.doTestWrite(sample_projfile_data, sample_projfile)
230            self.doTestWrite(sample_projfile_data2, sample_projfile2)
231    
232        def doTestWrite(self, data, expected):
233    
234            filename = self.temp_file_name("projfile.proj")
235    
236            pf = ProjFile(filename)
237            for proj in data:
238                pf.Add(Projection(proj[1], proj[0]))
239    
240            resource.write_proj_file(pf)
241    
242            file = open(filename)
243            written_contents = file.read()
244            file.close()
245            self.compare_xml(written_contents, expected)
246            self.validate_data(written_contents)
247            self.validate_data(expected)
248    
249        def doTestRead(self, data, input):
250    
251            filename = self.temp_file_name("projfile.proj")
252            file = open(filename, "w")
253            file.write(input)
254            file.close()
255    
256            pf = resource.read_proj_file(filename)
257    
258            eq = self.assertEquals
259    
260            eq(pf.GetFilename(), filename)
261    
262            for proj, d in zip(pf.GetProjections(), data):
263                eq(proj.GetName(), d[0])
264                for param in proj.GetAllParameters():
265                    self.assert_(param in d[1])
266    
267    
268  if __name__ == "__main__":  if __name__ == "__main__":

Legend:
Removed from v.333  
changed lines
  Added in v.1756

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26