/[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 752 by jonathan, Fri Apr 25 14:23:34 2003 UTC revision 1787 by bh, Wed Oct 8 10:39:18 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 16  __version__ = "$Revision$" Line 16  __version__ = "$Revision$"
16  import unittest  import unittest
17  import os  import os
18    
19    import xmlsupport
20  import support  import support
21  support.initthuban()  support.initthuban()
22    
23    from Thuban import _
24  from Thuban.Model.proj import Projection, ProjFile  from Thuban.Model.proj import Projection, ProjFile
25    
26  import Thuban.Model.resource as resource  import Thuban.Model.resource as resource
27    
28  from test_save import sax_eventlist  from xmlsupport import sax_eventlist
29    
30  from xml.sax import SAXParseException  from xml.sax import SAXParseException
31    
# Line 35  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 51  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")          self.assertEquals(proj.GetParameter("zone"), "26")
62          self.assertEquals(proj.GetParameter("proj"), "utm")          self.assertEquals(proj.GetParameter("proj"), "utm")
63          self.assertEquals(proj.GetParameter("ellps"), "clrk66")          self.assertEquals(proj.GetParameter("ellps"), "clrk66")
64          self.assertEquals(proj.GetParameter("hallo"), "")          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 = '''\  sample_projfile = '''\
75  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
76  <!DOCTYPE projfile SYSTEM "thuban.dtd">  <!DOCTYPE projectionlist SYSTEM "projfile.dtd">
77  <projectionlist>  <projectionlist>
78      <projection name="Transverse Mercartor">      <projection name="Transverse Mercator">
79          <parameter value="proj=tmerc"/>          <parameter value="proj=tmerc"/>
80          <parameter value="ellps=clrk66"/>          <parameter value="ellps=clrk66"/>
81          <parameter value="lat_0=90w"/>          <parameter value="lat_0=90w"/>
82          <parameter value="lon_0=90w"/>          <parameter value="lon_0=90w"/>
83          <parameter value="k=1"/>          <parameter value="k=1"/>
84      </projection>      </projection>
85      <projection name="Transverse Mercartor">      <projection name="Transverse Mercator">
86          <parameter value="proj=tmerc"/>          <parameter value="proj=tmerc"/>
87          <parameter value="ellps=clrk66"/>          <parameter value="ellps=clrk66"/>
88          <parameter value="lat_0=30w"/>          <parameter value="lat_0=30w"/>
89          <parameter value="lon_0=30w"/>          <parameter value="lon_0=30w"/>
90          <parameter value="k=1"/>          <parameter value="k=1"/>
91      </projection>      </projection>
92      <projection name="Universal Transverse Mercartor">      <projection name="Universal Transverse Mercator">
93          <parameter value="proj=utm"/>          <parameter value="proj=utm"/>
94          <parameter value="ellps=clrk66"/>          <parameter value="ellps=clrk66"/>
95          <parameter value="zone=1"/>          <parameter value="zone=1"/>
# Line 83  sample_projfile = '''\ Line 97  sample_projfile = '''\
97  </projectionlist>  </projectionlist>
98  '''  '''
99    
100  sample_projfile_data = [("Transverse Mercartor", ["proj=tmerc",  sample_projfile_data = [("Transverse Mercator", ["proj=tmerc",
101                                                    "ellps=clrk66",                                                    "ellps=clrk66",
102                                                    "lat_0=90w",                                                    "lat_0=90w",
103                                                    "lon_0=90w",                                                    "lon_0=90w",
104                                                    "k=1"]),                                                    "k=1"]),
105                          ("Transverse Mercartor", ["proj=tmerc",                          ("Transverse Mercator", ["proj=tmerc",
106                                                    "ellps=clrk66",                                                    "ellps=clrk66",
107                                                    "lat_0=30w",                                                    "lat_0=30w",
108                                                    "lon_0=30w",                                                    "lon_0=30w",
109                                                    "k=1"]),                                                    "k=1"]),
110                          ("Universal Transverse Mercartor", ["proj=utm",                          ("Universal Transverse Mercator", ["proj=utm",
111                                                              "ellps=clrk66",                                                              "ellps=clrk66",
112                                                              "zone=1"])]                                                              "zone=1"])]
113    
114  sample_projfile2 = '''\  sample_projfile2 = '''\
115  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
116  <!DOCTYPE projfile SYSTEM "thuban.dtd">  <!DOCTYPE projectionlist SYSTEM "projfile.dtd">
117  <projectionlist>  <projectionlist>
118  </projectionlist>  </projectionlist>
119  '''  '''
120    
121  sample_projfile_data2 = []  sample_projfile_data2 = []
122    
123  class TestProjFile(unittest.TestCase, support.FileTestMixin):  class TestProjFile(unittest.TestCase, support.FileTestMixin,
124                       xmlsupport.ValidationTest):
125    
126      """Test cases for reading and writing projection files.      """Test cases for reading and writing projection files.
127      """      """
# Line 119  class TestProjFile(unittest.TestCase, su Line 134  class TestProjFile(unittest.TestCase, su
134    
135          proj0 = Projection(["proj=tmerc", "ellps=clrk66"])          proj0 = Projection(["proj=tmerc", "ellps=clrk66"])
136          proj1 = Projection(["proj=utm", "ellps=clrk66"])          proj1 = Projection(["proj=utm", "ellps=clrk66"])
137          proj2 = Projection(["proj=lcc", "ellps=clrk66"])          proj2 = Projection(["proj=lcc", "ellps=clrk66",
138                                "lat_1=0", "lat_2=20"])
139    
140          eq = self.assertEquals          eq = self.assertEquals
141    
142    
143          #          #
144          # __init__()          # __init__()
145          # GetFilename()          # GetFilename()
# Line 149  class TestProjFile(unittest.TestCase, su Line 166  class TestProjFile(unittest.TestCase, su
166          eq(len(projFile.GetProjections()), 0)          eq(len(projFile.GetProjections()), 0)
167    
168          # try to remove something that doesn't exist          # try to remove something that doesn't exist
169            self.assertRaises(ValueError, projFile.Remove, None)
170          self.assertRaises(ValueError, projFile.Remove, proj0)          self.assertRaises(ValueError, projFile.Remove, proj0)
171    
172          projFile.Add(proj0)          projFile.Add(proj0)
# Line 162  class TestProjFile(unittest.TestCase, su Line 180  class TestProjFile(unittest.TestCase, su
180          eq(projs[1], proj1)          eq(projs[1], proj1)
181          eq(projs[2], proj2)          eq(projs[2], proj2)
182    
183          #          projFile.Remove(proj2)
184          # SetAllParameters()          projFile.Remove(proj1)
185          # SetName()  
186          # SetProjection()          # Replace()
187          #          projFile.Replace(proj0, proj1)
188          params = ["proj=utm", "ellps=clrk66", "zone=13"]          projs = projFile.GetProjections()
189          proj0.SetAllParameters(params)          eq(projs[0], proj1)
190          eq(proj0.GetAllParameters(), params)  
191                    # replace a non-existent projection
192          proj2.SetName("something")          self.assertRaises(ValueError, projFile.Replace, None, proj2)
193          proj0.SetProjection(proj2)          self.assertRaises(ValueError, projFile.Replace, proj0, proj2)
         eq(proj0.GetName(), "something")  
         eq(proj0.GetAllParameters(), proj2.GetAllParameters())  
194    
195      def testRead(self):      def testRead(self):
196          """Test ReadProjFile"""          """Test read_proj_file"""
197    
198          self.doTestRead(sample_projfile_data, sample_projfile)          self.doTestRead(sample_projfile_data, sample_projfile)
199          self.doTestRead(sample_projfile_data2, sample_projfile2)          self.doTestRead(sample_projfile_data2, sample_projfile2)
# Line 186  class TestProjFile(unittest.TestCase, su Line 202  class TestProjFile(unittest.TestCase, su
202          # file doesn't exist          # file doesn't exist
203          #          #
204          self.assertRaises(IOError,          self.assertRaises(IOError,
205              resource.ReadProjFile, self.temp_file_name("nonexistent.proj"))              resource.read_proj_file, self.temp_file_name("nonexistent.proj"))
206    
207          #          #
208          # file isn't readable          # file isn't readable
# Line 195  class TestProjFile(unittest.TestCase, su Line 211  class TestProjFile(unittest.TestCase, su
211          file = open(filename, "w")          file = open(filename, "w")
212          file.close()          file.close()
213          os.chmod(filename, 0200) # write-only          os.chmod(filename, 0200) # write-only
214          self.assertRaises(IOError, resource.ReadProjFile, filename)          self.assertRaises(IOError, resource.read_proj_file, filename)
215          os.chmod(filename, 0600) # read/write so we reuse the file          os.chmod(filename, 0600) # read/write so we reuse the file
216    
217          #          #
# Line 205  class TestProjFile(unittest.TestCase, su Line 221  class TestProjFile(unittest.TestCase, su
221          file = open(filename, "w")          file = open(filename, "w")
222          file.close()          file.close()
223    
224          self.assertRaises(SAXParseException, resource.ReadProjFile, filename)          self.assertRaises(SAXParseException, resource.read_proj_file, filename)
225    
226      def testWrite(self):      def testWrite(self):
227          """Test WriteProjFile"""          """Test write_proj_file"""
228    
229          self.doTestWrite(sample_projfile_data, sample_projfile)          self.doTestWrite(sample_projfile_data, sample_projfile)
230          self.doTestWrite(sample_projfile_data2, sample_projfile2)          self.doTestWrite(sample_projfile_data2, sample_projfile2)
# Line 221  class TestProjFile(unittest.TestCase, su Line 237  class TestProjFile(unittest.TestCase, su
237          for proj in data:          for proj in data:
238              pf.Add(Projection(proj[1], proj[0]))              pf.Add(Projection(proj[1], proj[0]))
239    
240          resource.WriteProjFile(pf)          resource.write_proj_file(pf)
241    
242          file = open(filename)          file = open(filename)
243          written_contents = file.read()          written_contents = file.read()
244          file.close()          file.close()
245          self.compare_xml(written_contents, expected)          self.compare_xml(written_contents, expected)
246            self.validate_data(written_contents)
247            self.validate_data(expected)
248    
249      def doTestRead(self, data, input):      def doTestRead(self, data, input):
250    
# Line 235  class TestProjFile(unittest.TestCase, su Line 253  class TestProjFile(unittest.TestCase, su
253          file.write(input)          file.write(input)
254          file.close()          file.close()
255    
256          pf = resource.ReadProjFile(filename)          pf, warnings = resource.read_proj_file(filename)
257            self.assertEquals(warnings, [])
258    
259          eq = self.assertEquals          eq = self.assertEquals
260    
# Line 246  class TestProjFile(unittest.TestCase, su Line 265  class TestProjFile(unittest.TestCase, su
265              for param in proj.GetAllParameters():              for param in proj.GetAllParameters():
266                  self.assert_(param in d[1])                  self.assert_(param in d[1])
267    
268        def test_get_system_proj_file(self):
269            """Test resource.get_system_proj_file()
270    
271            This is primarily to test whether the system proj file contains
272            invalid projection paramers and whether the proj file is not
273            empty
274            """
275            projfile, warnings = resource.get_system_proj_file()
276            self.assertEquals(warnings, [])
277            self.assert_(len(projfile.GetProjections()) > 0)
278    
279    
280    class TestProjFileWithInvalidParameters(unittest.TestCase,
281                                            support.FileLoadTestCase):
282    
283        file_extension = ".proj"
284        file_contents = '''\
285    <?xml version="1.0" encoding="UTF-8"?>
286    <!DOCTYPE projectionlist SYSTEM "projfile.dtd">
287    <projectionlist>
288        <projection name="Universal Transverse Mercator">
289            <parameter value="proj=utm"/>
290            <parameter value="ellps=clrk66"/>
291            <!-- an invalid zone number to trigger the parameter checking
292                 in the proj library -->
293            <parameter value="zone=1000"/>
294        </projection>
295        <projection name="Transverse Mercator">
296            <parameter value="proj=tmerc"/>
297            <parameter value="ellps=clrk66"/>
298            <parameter value="lat_0=90w"/>
299            <parameter value="lon_0=90w"/>
300            <parameter value="k=1"/>
301        </projection>
302    </projectionlist>
303    '''
304    
305        def setUp(self):
306            support.FileLoadTestCase.setUp(self)
307    
308        def test(self):
309            """Test reading a proj file with invalid parameters"""
310            projfile, warnings = resource.read_proj_file(self.filename())
311            projs = projfile.GetProjections()
312            self.assertEquals(len(projs), 1)
313            params = projs[0].GetAllParameters()[:]
314            params.sort()
315            self.assertEquals(params, ['ellps=clrk66', 'k=1', 'lat_0=90w',
316                                       'lon_0=90w', 'proj=tmerc'])
317            self.assertEquals(warnings,
318                           ['Error in projection "Universal Transverse Mercator":'
319                            ' invalid UTM zone number'])
320    
321    
322    
323  if __name__ == "__main__":  if __name__ == "__main__":
324      unittest.main()      unittest.main()

Legend:
Removed from v.752  
changed lines
  Added in v.1787

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26