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

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

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

revision 1638 by bh, Fri Aug 22 18:19:14 2003 UTC revision 2104 by bh, Fri Mar 12 12:19:15 2004 UTC
# Line 1  Line 1 
1  # Copyright (c) 2002, 2003 by Intevation GmbH  # Copyright (c) 2002, 2003, 2004 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 65  class XMLWriterTest(unittest.TestCase): Line 65  class XMLWriterTest(unittest.TestCase):
65  class SaveSessionTest(unittest.TestCase, support.FileTestMixin,  class SaveSessionTest(unittest.TestCase, support.FileTestMixin,
66                        xmlsupport.ValidationTest):                        xmlsupport.ValidationTest):
67    
68      dtd = "http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"      dtd = "http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd"
69      thubanids = [((dtd, n), (None, "id")) for n in      thubanids = [((dtd, n), (None, "id")) for n in
70                   ["fileshapesource", "filetable", "jointable",                   ["fileshapesource", "filetable", "jointable",
71                    "derivedshapesource", "dbshapesource", "dbconnection"]]                    "derivedshapesource", "dbshapesource", "dbconnection"]]
# Line 78  class SaveSessionTest(unittest.TestCase, Line 78  class SaveSessionTest(unittest.TestCase,
78                       ("dbshapesource", "dbconn")]]                       ("dbshapesource", "dbconn")]]
79      del n, m, dtd      del n, m, dtd
80    
81        def tearDown(self):
82            """Call self.session.Destroy
83    
84            Test cases that create session should bind it to self.session so
85            that it gets destroyed properly
86            """
87            if hasattr(self, "session"):
88                self.session.Destroy()
89                self.session = None
90    
91      def compare_xml(self, xml1, xml2):      def compare_xml(self, xml1, xml2):
92          list1 = xmlsupport.sax_eventlist(xml1, ids = self.thubanids,          list1 = xmlsupport.sax_eventlist(xml1, ids = self.thubanids,
93                                           idrefs = self.thubanidrefs)                                           idrefs = self.thubanidrefs)
# Line 101  class SaveSessionTest(unittest.TestCase, Line 111  class SaveSessionTest(unittest.TestCase,
111          file.close()          file.close()
112          self.compare_xml(written_contents,          self.compare_xml(written_contents,
113                           '<?xml version="1.0" encoding="UTF-8"?>\n'                           '<?xml version="1.0" encoding="UTF-8"?>\n'
114                           '<!DOCTYPE session SYSTEM "thuban-0.9.dtd">\n'                           '<!DOCTYPE session SYSTEM "thuban-1.1.dtd">\n'
115                           '<session title="empty session" '                           '<session title="empty session" '
116           'xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">'           'xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">'
117                           '\n</session>\n')                           '\n</session>\n')
118    
119          self.validate_data(written_contents)          self.validate_data(written_contents)
# Line 112  class SaveSessionTest(unittest.TestCase, Line 122  class SaveSessionTest(unittest.TestCase,
122          """Save a session with a single map with a single layer"""          """Save a session with a single map with a single layer"""
123          # deliberately put an apersand in the title :)          # deliberately put an apersand in the title :)
124          session = Session("single map&layer")          session = Session("single map&layer")
125          proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])          proj = Projection(["proj=utm", "zone=27", "ellps=WGS84",
126                               "datum=WGS84", "units=m"],
127                              name = "WGS 84 / UTM zone 27N",
128                              epsg = "32627")
129          map = Map("Test Map", projection = proj)          map = Map("Test Map", projection = proj)
130          session.AddMap(map)          session.AddMap(map)
131          # use shapefile from the example data          # use shapefile from the example data
# Line 128  class SaveSessionTest(unittest.TestCase, Line 141  class SaveSessionTest(unittest.TestCase,
141          written_contents = file.read()          written_contents = file.read()
142          file.close()          file.close()
143          expected_template = '''<?xml version="1.0" encoding="UTF-8"?>          expected_template = '''<?xml version="1.0" encoding="UTF-8"?>
144          <!DOCTYPE session SYSTEM "thuban-0.9.dtd">          <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
145          <session title="single map&amp;layer"          <session title="single map&amp;layer"
146             xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">             xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
147              <fileshapesource id="D1" filename="%s" filetype="shapefile"/>              <fileshapesource id="D1"
148                    filename="../../Data/iceland/political.shp"
149                    filetype="shapefile"/>
150              <map title="Test Map">              <map title="Test Map">
151                  <projection name="Unknown">                  <projection epsg="32627" name="WGS 84 / UTM zone 27N">
                     <parameter value="zone=26"/>  
152                      <parameter value="proj=utm"/>                      <parameter value="proj=utm"/>
153                      <parameter value="ellps=clrk66"/>                      <parameter value="zone=27"/>
154                        <parameter value="ellps=WGS84"/>
155                        <parameter value="datum=WGS84"/>
156                        <parameter value="units=m"/>
157                  </projection>                  </projection>
158                  <layer title="My Layer" shapestore="D1"                  <layer title="My Layer" shapestore="D1"
159                  fill="None" stroke="#000000" stroke_width="1" visible="%s"/>                  fill="None" stroke="#000000" stroke_width="1" visible="%s"/>
160              </map>              </map>
161          </session>'''          </session>'''
162    
163          expected_contents = expected_template % \          expected_contents = expected_template % "true"
             (os.path.join("..", "..", "Data", "iceland", "political.shp"),  
              "true")  
164    
165          self.compare_xml(written_contents, expected_contents)          self.compare_xml(written_contents, expected_contents)
166    
167          self.validate_data(written_contents)          self.validate_data(written_contents)
168    
169            # Repeat with an invisible layer
170          layer.SetVisible(False)          layer.SetVisible(False)
171          save_session(session, filename)          save_session(session, filename)
172    
173          file = open(filename)          file = open(filename)
174          written_contents = file.read()          written_contents = file.read()
175          file.close()          file.close()
176          expected_contents = expected_template % \          expected_contents = expected_template % "false"
             (os.path.join("..", "..", "Data", "iceland", "political.shp"),  
              "false")  
177          self.compare_xml(written_contents, expected_contents)          self.compare_xml(written_contents, expected_contents)
178          self.validate_data(written_contents)          self.validate_data(written_contents)
179    
# Line 168  class SaveSessionTest(unittest.TestCase, Line 182  class SaveSessionTest(unittest.TestCase,
182      def testLayerProjection(self):      def testLayerProjection(self):
183          """Test saving layers with projections"""          """Test saving layers with projections"""
184          # deliberately put an apersand in the title :)          # deliberately put an apersand in the title :)
185          session = Session("single map&layer")          session = self.session = Session("single map&layer")
186          proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])          proj = Projection(["zone=26", "proj=utm", "ellps=clrk66"])
187          map = Map("Test Map", projection = proj)          map = Map("Test Map", projection = proj)
188          session.AddMap(map)          session.AddMap(map)
# Line 176  class SaveSessionTest(unittest.TestCase, Line 190  class SaveSessionTest(unittest.TestCase,
190          shpfile = os.path.join(os.path.dirname(__file__),          shpfile = os.path.join(os.path.dirname(__file__),
191                                 os.pardir, "Data", "iceland", "political.shp")                                 os.pardir, "Data", "iceland", "political.shp")
192          layer = Layer("My Layer", session.OpenShapefile(shpfile))          layer = Layer("My Layer", session.OpenShapefile(shpfile))
193          proj = Projection(["proj=lcc", "ellps=clrk66"], "Layer Projection")          proj = Projection(["proj=lcc", "ellps=clrk66",
194                               "lat_1=0", "lat_2=20"],
195                              "Layer Projection")
196          layer.SetProjection(proj)          layer.SetProjection(proj)
197          map.AddLayer(layer)          map.AddLayer(layer)
198    
199          filename = self.temp_file_name("save_layerproj.thuban")          filename = self.temp_file_name("save_layerproj.thuban")
200          save_session(session, filename)          save_session(session, filename)
         session.Destroy()  
201    
202          file = open(filename)          file = open(filename)
203          written_contents = file.read()          written_contents = file.read()
204          file.close()          file.close()
205          expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>          expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
206          <!DOCTYPE session SYSTEM "thuban-0.9.dtd">          <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
207          <session title="single map&amp;layer"          <session title="single map&amp;layer"
208             xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">             xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
209              <fileshapesource id="D1" filename="%s" filetype="shapefile"/>              <fileshapesource id="D1"
210                    filename="../../Data/iceland/political.shp"
211                    filetype="shapefile"/>
212              <map title="Test Map">              <map title="Test Map">
213                  <projection name="Unknown">                  <projection name="Unknown">
214                      <parameter value="zone=26"/>                      <parameter value="zone=26"/>
# Line 203  class SaveSessionTest(unittest.TestCase, Line 220  class SaveSessionTest(unittest.TestCase,
220                      <projection name="Layer Projection">                      <projection name="Layer Projection">
221                          <parameter value="proj=lcc"/>                          <parameter value="proj=lcc"/>
222                          <parameter value="ellps=clrk66"/>                          <parameter value="ellps=clrk66"/>
223                            <parameter value="lat_1=0"/>
224                            <parameter value="lat_2=20"/>
225                      </projection>                      </projection>
226                  </layer>                  </layer>
227              </map>              </map>
228          </session>''' % os.path.join("..", "..", "Data", "iceland",          </session>'''
                                      "political.shp")  
229          #print written_contents          #print written_contents
230          #print "********************************************"          #print "********************************************"
231          #print expected_contents          #print expected_contents
# Line 234  class SaveSessionTest(unittest.TestCase, Line 252  class SaveSessionTest(unittest.TestCase,
252          written_contents = file.read()          written_contents = file.read()
253          file.close()          file.close()
254          expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>          expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
255          <!DOCTYPE session SYSTEM "thuban-0.9.dtd">          <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
256          <session title="single map&amp;layer"          <session title="single map&amp;layer"
257             xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">             xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
258              <map title="Test Map">              <map title="Test Map">
259                  <rasterlayer title="My RasterLayer" filename="%s"                  <rasterlayer title="My RasterLayer"
260                               visible="true">                          filename="../../Data/iceland/island.tif"
261                            visible="true">
262                  </rasterlayer>                  </rasterlayer>
263              </map>              </map>
264          </session>''' % os.path.join(os.pardir, os.pardir, "Data", "iceland",          </session>'''
                                      "island.tif")  
265          #print written_contents          #print written_contents
266          #print "********************************************"          #print "********************************************"
267          #print expected_contents          #print expected_contents
# Line 300  class SaveSessionTest(unittest.TestCase, Line 318  class SaveSessionTest(unittest.TestCase,
318          file = open(filename)          file = open(filename)
319          written_contents = file.read()          written_contents = file.read()
320          file.close()          file.close()
321          expected_template = '''<?xml version="1.0" encoding="UTF-8"?>          expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
322          <!DOCTYPE session SYSTEM "thuban-0.9.dtd">          <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
323          <session title="Map with Classifications"          <session title="Map with Classifications"
324             xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">             xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
325              <fileshapesource id="D1" filename="%s" filetype="shapefile"/>              <fileshapesource id="D1"
326                    filename="../../Data/iceland/political.shp"
327                    filetype="shapefile"/>
328              <map title="Test Map">              <map title="Test Map">
329                  <projection name="Unknown">                  <projection name="Unknown">
330                      <parameter value="zone=26"/>                      <parameter value="zone=26"/>
# Line 312  class SaveSessionTest(unittest.TestCase, Line 332  class SaveSessionTest(unittest.TestCase,
332                      <parameter value="ellps=clrk66"/>                      <parameter value="ellps=clrk66"/>
333                  </projection>                  </projection>
334                  <layer title="My Layer" shapestore="D1"                  <layer title="My Layer" shapestore="D1"
335                  fill="None" stroke="#000000" stroke_width="1" visible="%s">                  fill="None" stroke="#000000" stroke_width="1" visible="true">
336                      <classification field="AREA" field_type="double">                      <classification field="AREA" field_type="double">
337                          <clnull label="">                          <clnull label="">
338                              <cldata fill="None" stroke="#000000" stroke_width="1"/>                              <cldata fill="None" stroke="#000000" stroke_width="1"/>
# Line 346  class SaveSessionTest(unittest.TestCase, Line 366  class SaveSessionTest(unittest.TestCase,
366              </map>              </map>
367          </session>'''          </session>'''
368    
         expected_contents = expected_template % \  
             (os.path.join("..", "..", "Data", "iceland", "political.shp"),  
              "true")  
   
369          #print written_contents          #print written_contents
370          #print "********************************************"          #print "********************************************"
371          #print expected_contents          #print expected_contents
# Line 361  class SaveSessionTest(unittest.TestCase, Line 377  class SaveSessionTest(unittest.TestCase,
377    
378      def test_dbf_table(self):      def test_dbf_table(self):
379          """Test saving a session with a dbf table link"""          """Test saving a session with a dbf table link"""
380          session = Session("a DBF Table session")          session = self.session = Session("a DBF Table session")
381          # use shapefile from the example data          # use shapefile from the example data
382          dbffile = os.path.join(os.path.dirname(__file__),          dbffile = os.path.join(os.path.dirname(__file__),
383                                 os.pardir, "Data", "iceland", "political.dbf")                                 os.pardir, "Data", "iceland", "political.dbf")
# Line 373  class SaveSessionTest(unittest.TestCase, Line 389  class SaveSessionTest(unittest.TestCase,
389          file = open(filename)          file = open(filename)
390          written_contents = file.read()          written_contents = file.read()
391          file.close()          file.close()
392          expected_template = '''<?xml version="1.0" encoding="UTF-8"?>          expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
393          <!DOCTYPE session SYSTEM "thuban-0.9.dtd">          <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
394          <session title="a DBF Table session"          <session title="a DBF Table session"
395             xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">             xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
396              <filetable id="D1" filename="%s" filetype="DBF" title="political"/>              <filetable id="D1" filename="../../Data/iceland/political.dbf"
397                    filetype="DBF" title="political"/>
398          </session>'''          </session>'''
399    
         expected_contents = (expected_template  
                              % os.path.join(os.pardir, os.pardir, "Data",  
                                             "iceland", "political.dbf"))  
400          self.compare_xml(written_contents, expected_contents)          self.compare_xml(written_contents, expected_contents)
401            self.validate_data(written_contents)
402    
403      def test_joined_table(self):      def test_joined_table(self):
404          """Test saving a session with joined table"""          """Test saving a session with joined table"""
# Line 432  class SaveSessionTest(unittest.TestCase, Line 447  class SaveSessionTest(unittest.TestCase,
447              file = open(filename)              file = open(filename)
448              written_contents = file.read()              written_contents = file.read()
449              file.close()              file.close()
450              expected_template = '''<?xml version="1.0" encoding="UTF-8"?>              expected_contents = '''<?xml version="1.0" encoding="UTF-8"?>
451              <!DOCTYPE session SYSTEM "thuban-0.9.dtd">              <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
452              <session title="A Joined Table session"              <session title="A Joined Table session"
453               xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">               xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
454                  <fileshapesource filename="%(shpfile)s"                  <fileshapesource filename="../../Data/iceland/roads-line.shp"
455                                   filetype="shapefile" id="D142197204"/>                                   filetype="shapefile" id="D142197204"/>
456                  <filetable filename="%(dbffile)s"                  <filetable filename="save_joinedtable.dbf"
457                             title="save_joinedtable"                             title="save_joinedtable"
458                             filetype="DBF" id="D141881756"/>                             filetype="DBF" id="D141881756"/>
459                  <jointable id="D142180284"                  <jointable id="D142180284"
# Line 456  class SaveSessionTest(unittest.TestCase, Line 471  class SaveSessionTest(unittest.TestCase,
471                  </map>                  </map>
472              </session>'''              </session>'''
473    
             expected_contents = expected_template % {  
                 "dbffile": relative_filename(self.temp_dir(), dbffile),  
                 "shpfile": relative_filename(self.temp_dir(), shpfile)  
                 }  
474              self.compare_xml(written_contents, expected_contents)              self.compare_xml(written_contents, expected_contents)
475                self.validate_data(written_contents)
476          finally:          finally:
477              session.Destroy()              session.Destroy()
478              session = None              session = None
# Line 477  class SaveSessionTest(unittest.TestCase, Line 489  class SaveSessionTest(unittest.TestCase,
489          class NonConnectionStore(PostGISShapeStore):          class NonConnectionStore(PostGISShapeStore):
490              """Shapestore that doesn't try to access the server"""              """Shapestore that doesn't try to access the server"""
491              def _fetch_table_information(self):              def _fetch_table_information(self):
492                  pass                  # pretend that we've found a geometry column
493                    self.geometry_column = "the_geom"
494                def IDColumn(self):
495                    """Return an object with a name attribute with value 'gid'"""
496                    class dummycol:
497                        name = "gid"
498                    return dummycol
499    
500          session = Session("A PostGIS Session")          session = Session("A PostGIS Session")
501          try:          try:
# Line 500  class SaveSessionTest(unittest.TestCase, Line 518  class SaveSessionTest(unittest.TestCase,
518              written = file.read()              written = file.read()
519              file.close()              file.close()
520              expected = '''<?xml version="1.0" encoding="UTF-8"?>              expected = '''<?xml version="1.0" encoding="UTF-8"?>
521              <!DOCTYPE session SYSTEM "thuban-0.9.dtd">              <!DOCTYPE session SYSTEM "thuban-1.1.dtd">
522              <session title="A PostGIS Session"              <session title="A PostGIS Session"
523               xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd">               xmlns="http://thuban.intevation.org/dtds/thuban-1.1-dev.dtd">
524                  <dbconnection id="DB"                  <dbconnection id="DB"
525                                dbtype="postgis" dbname="plugh"                                dbtype="postgis" dbname="plugh"
526                                host="xyzzy" port="42"                                host="xyzzy" port="42"
527                                user="grue"/>                                user="grue"/>
528                  <dbshapesource id="roads" dbconn="DB" tablename="roads"/>                  <dbshapesource id="roads" dbconn="DB" tablename="roads"
529                                   id_column="gid" geometry_column="the_geom"/>
530                  <map title="Test Map">                  <map title="Test Map">
531                      <layer title="Roads to Nowhere"                      <layer title="Roads to Nowhere"
532                             shapestore="roads" visible="true"                             shapestore="roads" visible="true"

Legend:
Removed from v.1638  
changed lines
  Added in v.2104

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26