/[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 742 by jonathan, Fri Apr 25 09:14:41 2003 UTC
# Line 14  __version__ = "$Revision$" Line 14  __version__ = "$Revision$"
14  # $Id$  # $Id$
15    
16  import unittest  import unittest
17    import os
18    
19  import support  import support
20  support.initthuban()  support.initthuban()
21    
22  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection, ProjFile
23    
24    import Thuban.Model.resource as resource
25    
26    from test_save import sax_eventlist
27    
28    from xml.sax import SAXParseException
29    
30    
31  class TestProjection(unittest.TestCase, support.FloatComparisonMixin):  class TestProjection(unittest.TestCase, support.FloatComparisonMixin):
# Line 44  class TestProjection(unittest.TestCase, Line 51  class TestProjection(unittest.TestCase,
51                                    3875381.8535437919, 252962.10480170773),                                    3875381.8535437919, 252962.10480170773),
52                                   epsilon = 1e-5)                                   epsilon = 1e-5)
53    
54            self.assertEquals(proj.GetParameter("zone"), "26")
55            self.assertEquals(proj.GetParameter("proj"), "utm")
56            self.assertEquals(proj.GetParameter("ellps"), "clrk66")
57            self.assertEquals(proj.GetParameter("hallo"), "")
58    
59    
60    sample_projfile = '''\
61    <?xml version="1.0" encoding="UTF-8"?>
62    <!DOCTYPE projfile SYSTEM "thuban.dtd">
63    <projectionlist>
64        <projection name="Transverse Mercartor">
65            <parameter value="proj=tmerc"/>
66            <parameter value="ellps=clrk66"/>
67            <parameter value="lat_0=90w"/>
68            <parameter value="lon_0=90w"/>
69            <parameter value="k=1"/>
70        </projection>
71        <projection name="Transverse Mercartor">
72            <parameter value="proj=tmerc"/>
73            <parameter value="ellps=clrk66"/>
74            <parameter value="lat_0=30w"/>
75            <parameter value="lon_0=30w"/>
76            <parameter value="k=1"/>
77        </projection>
78        <projection name="Universal Transverse Mercartor">
79            <parameter value="proj=utm"/>
80            <parameter value="ellps=clrk66"/>
81            <parameter value="zone=1"/>
82        </projection>
83    </projectionlist>
84    '''
85    
86    sample_projfile_data = [("Transverse Mercartor", ["proj=tmerc",
87                                                      "ellps=clrk66",
88                                                      "lat_0=90w",
89                                                      "lon_0=90w",
90                                                      "k=1"]),
91                            ("Transverse Mercartor", ["proj=tmerc",
92                                                      "ellps=clrk66",
93                                                      "lat_0=30w",
94                                                      "lon_0=30w",
95                                                      "k=1"]),
96                            ("Universal Transverse Mercartor", ["proj=utm",
97                                                                "ellps=clrk66",
98                                                                "zone=1"])]
99    
100    sample_projfile2 = '''\
101    <?xml version="1.0" encoding="UTF-8"?>
102    <!DOCTYPE projfile SYSTEM "thuban.dtd">
103    <projectionlist>
104    </projectionlist>
105    '''
106    
107    sample_projfile_data2 = []
108    
109    class TestProjFile(unittest.TestCase, support.FileTestMixin):
110    
111        """Test cases for reading and writing projection files.
112        """
113    
114        def compare_xml(self, xml1, xml2):
115            self.assertEquals(sax_eventlist(xml1), sax_eventlist(xml2))
116    
117        def test(self):
118            """Test ProjFile"""
119    
120            proj0 = Projection(["proj=tmerc", "ellps=clrk66"])
121            proj1 = Projection(["proj=utm", "ellps=clrk66"])
122            proj2 = Projection(["proj=lcc", "ellps=clrk66"])
123    
124            eq = self.assertEquals
125    
126            #
127            # __init__()
128            # GetFilename()
129            # SetFilename()
130            #
131            for name in ["", "hello_world"]:
132                projFile = ProjFile(name)
133                eq(projFile.GetFilename(), name)
134    
135                projFile.SetFilename("XXX")
136                projFile.SetFilename(name)
137                eq(projFile.GetFilename(), name)
138    
139            # initial number of projections should be 0
140            eq(len(projFile.GetProjections()), 0)
141    
142            #
143            # Add()
144            # Remove()
145            #
146            projFile.Add(proj0)
147            eq(len(projFile.GetProjections()), 1)
148            projFile.Remove(proj0)
149            eq(len(projFile.GetProjections()), 0)
150    
151            # try to remove something that doesn't exist
152            self.assertRaises(ValueError, projFile.Remove, proj0)
153    
154            projFile.Add(proj0)
155            projFile.Add(proj1)
156            projFile.Add(proj2)
157            eq(len(projFile.GetProjections()), 3)
158    
159            # GetProjections() -- tests order
160            projs = projFile.GetProjections()
161            eq(projs[0], proj0)
162            eq(projs[1], proj1)
163            eq(projs[2], proj2)
164    
165        def testRead(self):
166            """Test ReadProjFile"""
167    
168            self.doTestRead(sample_projfile_data, sample_projfile)
169            self.doTestRead(sample_projfile_data2, sample_projfile2)
170    
171            #
172            # file doesn't exist
173            #
174            self.assertRaises(IOError,
175                resource.ReadProjFile, self.temp_file_name("nonexistent.proj"))
176    
177            #
178            # file isn't readable
179            #
180            filename = self.temp_file_name("projfile.proj")
181            file = open(filename, "w")
182            file.close()
183            os.chmod(filename, 0200) # write-only
184            self.assertRaises(IOError, resource.ReadProjFile, filename)
185            os.chmod(filename, 0600) # read/write so we reuse the file
186    
187            #
188            # file has invalid XML (or none at all)
189            #
190            filename = self.temp_file_name("projfile.proj")
191            file = open(filename, "w")
192            file.close()
193    
194            self.assertRaises(SAXParseException, resource.ReadProjFile, filename)
195    
196        def testWrite(self):
197            """Test WriteProjFile"""
198    
199            self.doTestWrite(sample_projfile_data, sample_projfile)
200            self.doTestWrite(sample_projfile_data2, sample_projfile2)
201    
202        def doTestWrite(self, data, expected):
203    
204            filename = self.temp_file_name("projfile.proj")
205    
206            pf = ProjFile(filename)
207            for proj in data:
208                pf.Add(Projection(proj[1], proj[0]))
209    
210            resource.WriteProjFile(pf)
211    
212            file = open(filename)
213            written_contents = file.read()
214            file.close()
215            self.compare_xml(written_contents, expected)
216    
217        def doTestRead(self, data, input):
218    
219            filename = self.temp_file_name("projfile.proj")
220            file = open(filename, "w")
221            file.write(input)
222            file.close()
223    
224            pf = resource.ReadProjFile(filename)
225    
226            eq = self.assertEquals
227    
228            eq(pf.GetFilename(), filename)
229    
230            for proj, d in zip(pf.GetProjections(), data):
231                eq(proj.GetName(), d[0])
232                for param in proj.GetAllParameters():
233                    self.assert_(param in d[1])
234    
235    
236  if __name__ == "__main__":  if __name__ == "__main__":

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26