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

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

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

revision 1257 by bh, Fri Jun 20 12:22:25 2003 UTC revision 1347 by jonathan, Tue Jul 1 16:12:14 2003 UTC
# Line 35  import support Line 35  import support
35  support.initthuban()  support.initthuban()
36    
37  from xmlsupport import sax_eventlist  from xmlsupport import sax_eventlist
38    
39    import dbflib
40    
41  from Thuban.Model.save import save_session  from Thuban.Model.save import save_session
42  from Thuban.Model.load import load_session, parse_color  from Thuban.Model.load import load_session, parse_color, LoadError
43  from Thuban.Model.color import Color  from Thuban.Model.color Transparent
44  from Thuban.Model.classification import ClassGroupProperties, ClassGroupRange,\  from Thuban.Model.classification import ClassGroupProperties, ClassGroupRange,\
45      ClassGroupSingleton, ClassGroupDefault      ClassGroupSingleton, ClassGroupDefault
46    
# Line 76  class LoadSessionTest(support.FileLoadTe Line 79  class LoadSessionTest(support.FileLoadTe
79              self.session.Destroy()              self.session.Destroy()
80          self.session = None          self.session = None
81    
82    
83        dtd = "http://thuban.intevation.org/dtds/thuban-0.8.dtd"
84        thubanids = [((dtd, n), (None, "id")) for n in
85                     ["fileshapesource", "filetable", "jointable",
86                      "derivedshapesource"]]
87        thubanidrefs = [((dtd, n), (None, m)) for n, m in
88                        [("layer", "shapestore"),
89                         ("jointable", "left"),
90                         ("jointable", "right"),
91                         ("derivedshapesource", "table"),
92                         ("derivedshapesource", "shapesource")]]
93        del n, m, dtd
94    
95      def check_format(self):      def check_format(self):
96          """Check whether the file we loaded from matches the one that          """Check whether the file we loaded from matches the one that
97          would be written. Call this from each test case after loading          would be written. Call this from each test case after loading
# Line 83  class LoadSessionTest(support.FileLoadTe Line 99  class LoadSessionTest(support.FileLoadTe
99          """          """
100          filename = self.temp_file_name(self.id() + ".roundtrip.thuban")          filename = self.temp_file_name(self.id() + ".roundtrip.thuban")
101          save_session(self.session, filename)          save_session(self.session, filename)
102          el1 = sax_eventlist(filename = filename)          el1 = sax_eventlist(filename = filename, ids = self.thubanids,
103          el2 = sax_eventlist(filename = self.filename())                              idrefs = self.thubanidrefs)
104          self.assertEquals(el1, el2)          el2 = sax_eventlist(filename = self.filename(), ids = self.thubanids,
105                                idrefs = self.thubanidrefs)
106            if 0:
107                for a, b in zip(el1, el2):
108                    print a != b and "***************" or ""
109                    print a
110                    print b
111            self.assertEquals(el1, el2,
112                              "loaded file not equivalent to the saved file")
113    
114    
115  class ClassificationTest(LoadSessionTest):  class ClassificationTest(LoadSessionTest):
# Line 143  class TestSingleLayer(LoadSessionTest): Line 167  class TestSingleLayer(LoadSessionTest):
167    
168      file_contents = '''\      file_contents = '''\
169  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
170  <!DOCTYPE session SYSTEM "thuban.dtd">  <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
171  <session title="single map&amp;layer">  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd"
172          <map title="Test Map">          title="single map&amp;layer">
173                  <projection name="Unknown">      <fileshapesource filetype="shapefile" id="D1"
174                          <parameter value="zone=26"/>          filename="../../Data/iceland/political.shp"/>
175                          <parameter value="proj=utm"/>      <map title="Test Map">
176                          <parameter value="ellps=clrk66"/>          <projection name="Unknown">
177                  </projection>              <parameter value="zone=26"/>
178                  <layer title="My Layer" stroke_width="1" fill="None"              <parameter value="proj=utm"/>
179                      filename="../../Data/iceland/political.shp"              <parameter value="ellps=clrk66"/>
180                      stroke="#000000" visible="true"/>          </projection>
181          </map>          <layer shapestore="D1" visible="true"
182                    stroke="#000000" title="My Layer" stroke_width="1"
183                    fill="None"/>
184        </map>
185  </session>  </session>
186  '''  '''
187    
# Line 187  class TestSingleLayer(LoadSessionTest): Line 214  class TestSingleLayer(LoadSessionTest):
214                                                       os.pardir, os.pardir,                                                       os.pardir, os.pardir,
215                                                       "Data", "iceland",                                                       "Data", "iceland",
216                                                       "political.shp")))                                                       "political.shp")))
217          eq(layer.GetClassification().GetDefaultFill(), Color.Transparent)          eq(layer.GetClassification().GetDefaultFill(), Transparent)
218          eq(layer.GetClassification().GetDefaultLineColor().hex(), "#000000")          eq(layer.GetClassification().GetDefaultLineColor().hex(), "#000000")
219          eq(layer.Visible(), True)          eq(layer.Visible(), True)
220    
# Line 201  class TestLayerVisibility(LoadSessionTes Line 228  class TestLayerVisibility(LoadSessionTes
228    
229      file_contents = '''\      file_contents = '''\
230  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
231  <!DOCTYPE session SYSTEM "thuban.dtd">  <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
232  <session title="single map&amp;layer">  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd"
233          <map title="Test Map">          title="single map&amp;layer">
234                  <projection name="Unknown">      <fileshapesource filetype="shapefile" id="D1"
235                          <parameter value="zone=26"/>          filename="../../Data/iceland/political.shp"/>
236                          <parameter value="proj=utm"/>      <map title="Test Map">
237                          <parameter value="ellps=clrk66"/>          <projection name="Unknown">
238                  </projection>              <parameter value="zone=26"/>
239                  <layer title="My Layer" stroke_width="1" fill="None"              <parameter value="proj=utm"/>
240                      filename="../../Data/iceland/political.shp"              <parameter value="ellps=clrk66"/>
241                      stroke="#000000" visible="false">          </projection>
242          </layer>          <layer shapestore="D1" visible="false" stroke="#000000"
243                    title="My Layer" stroke_width="1" fill="None"/>
244      </map>      </map>
245  </session>  </session>
246  '''  '''
# Line 319  class TestLabels(ClassificationTest): Line 347  class TestLabels(ClassificationTest):
347    
348      file_contents = '''\      file_contents = '''\
349  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
350  <!DOCTYPE session SYSTEM "thuban.dtd">  <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
351  <session title="single map&amp;layer">  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd"
352          <map title="Test Map">          title="single map&amp;layer">
353                  <projection name="Unknown">      <fileshapesource filetype="shapefile" id="D1"
354                          <parameter value="zone=26"/>          filename="../../Data/iceland/political.shp"/>
355                          <parameter value="proj=utm"/>      <map title="Test Map">
356                          <parameter value="ellps=clrk66"/>          <projection name="Unknown">
357                  </projection>              <parameter value="zone=26"/>
358                  <layer title="My Layer" stroke_width="1" fill="None"              <parameter value="proj=utm"/>
359                      filename="../../Data/iceland/political.shp"              <parameter value="ellps=clrk66"/>
360                      stroke="#000000" visible="true">          </projection>
361            <layer shapestore="D1" visible="true" stroke="#000000"
362                    title="My Layer" stroke_width="1" fill="None">
363              <classification field="POPYREG" field_type="string">              <classification field="POPYREG" field_type="string">
364                  <clnull label="hallo">                  <clnull label="hallo">
365                      <cldata stroke="#000000" stroke_width="1" fill="None"/>                      <cldata stroke="#000000" stroke_width="1" fill="None"/>
# Line 365  class TestLayerProjection(LoadSessionTes Line 395  class TestLayerProjection(LoadSessionTes
395    
396      file_contents = '''\      file_contents = '''\
397  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
398  <!DOCTYPE session SYSTEM "thuban.dtd">  <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
399  <session title="single map&amp;layer">  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd"
400          <map title="Test Map">          title="single map&amp;layer">
401                  <projection name="Unknown">      <fileshapesource filetype="shapefile" id="D2"
402                          <parameter value="zone=26"/>          filename="../../Data/iceland/roads-line.shp"/>
403                          <parameter value="proj=utm"/>      <fileshapesource filetype="shapefile" id="D4"
404                          <parameter value="ellps=clrk66"/>          filename="../../Data/iceland/political.shp"/>
405                  </projection>      <map title="Test Map">
406                  <layer title="My Layer" stroke_width="1" fill="None"          <projection name="Unknown">
407                      filename="../../Data/iceland/political.shp"              <parameter value="zone=26"/>
408                      stroke="#000000" visible="true">              <parameter value="proj=utm"/>
409                      <projection name="hello">              <parameter value="ellps=clrk66"/>
410                          <parameter value="zone=13"/>          </projection>
411                          <parameter value="proj=tmerc"/>          <layer shapestore="D4" visible="true" stroke="#000000"
412                          <parameter value="ellps=clrk66"/>                  title="My Layer" stroke_width="1" fill="None">
413                      </projection>              <projection name="hello">
414                    <parameter value="zone=13"/>
415                    <parameter value="proj=tmerc"/>
416                    <parameter value="ellps=clrk66"/>
417                </projection>
418              <classification field="POPYREG" field_type="string">              <classification field="POPYREG" field_type="string">
419                  <clnull label="hallo">                  <clnull label="hallo">
420                      <cldata stroke="#000000" stroke_width="1" fill="None"/>                      <cldata stroke="#000000" stroke_width="1" fill="None"/>
# Line 390  class TestLayerProjection(LoadSessionTes Line 424  class TestLayerProjection(LoadSessionTes
424                  </clpoint>                  </clpoint>
425              </classification>              </classification>
426          </layer>          </layer>
427                  <layer title="My Layer" stroke_width="1" fill="None"          <layer shapestore="D2" visible="true" stroke="#000000"
428                      filename="../../Data/iceland/political.shp"                  title="My Layer" stroke_width="1" fill="None">
429                      stroke="#000000" visible="true">              <projection name="Unknown">
430                      <projection name="Unknown">                  <parameter value="proj=lcc"/>
431                          <parameter value="proj=lcc"/>                  <parameter value="ellps=clrk66"/>
432                          <parameter value="ellps=clrk66"/>              </projection>
                     </projection>  
433          </layer>          </layer>
434      </map>      </map>
435  </session>  </session>
# Line 436  class TestRasterLayer(LoadSessionTest): Line 469  class TestRasterLayer(LoadSessionTest):
469    
470      file_contents = '''\      file_contents = '''\
471  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
472  <!DOCTYPE session SYSTEM "thuban.dtd">  <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
473  <session title="single map&amp;layer">  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd"
474          <map title="Test Map">          title="single map&amp;layer">
475                  <rasterlayer title="My RasterLayer"      <map title="Test Map">
476                       filename="../../Data/iceland/island.tif"          <rasterlayer visible="false" filename="../../Data/iceland/island.tif"
477                       visible="false">                  title="My RasterLayer"/>
         </rasterlayer>  
478      </map>      </map>
479  </session>  </session>
480  '''  '''
# Line 467  class TestRasterLayer(LoadSessionTest): Line 499  class TestRasterLayer(LoadSessionTest):
499                                                       "island.tif")))                                                       "island.tif")))
500          self.check_format()          self.check_format()
501    
502    
503    class TestJoinedTable(LoadSessionTest):
504    
505        file_contents = '''<?xml version="1.0" encoding="UTF-8"?>
506    <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
507    <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd" title="A Joined Table session">
508        <fileshapesource filetype="shapefile" id="D137227612"
509            filename="../../Data/iceland/roads-line.shp"/>
510        <filetable filetype="DBF" filename="load_joinedtable.dbf" id="D136171140"
511            title="Some Title"/>
512        <jointable leftcolumn="RDLNTYPE" right="D136171140"
513            title="Joined" rightcolumn="RDTYPE" id="D136169900" left="D137227612"/>
514        <derivedshapesource table="D136169900" shapesource="D137227612"
515            id="D136170932"/>
516        <map title="Test Map">
517            <layer shapestore="D136170932" visible="true" stroke="#000000"
518                    title="My Layer" stroke_width="1" fill="None"/>
519        </map>
520    </session>
521    '''
522    
523        def setUp(self):
524            """Extend inherited method to create the dbffile for the join"""
525            LoadSessionTest.setUp(self)
526            dbffile = self.temp_file_name("load_joinedtable.dbf")
527            dbf = dbflib.create(dbffile)
528            dbf.add_field("RDTYPE", dbflib.FTInteger, 10, 0)
529            dbf.add_field("TEXT", dbflib.FTString, 10, 0)
530            dbf.write_record(0, {'RDTYPE': 8, "TEXT": "foo"})
531            dbf.write_record(1, {'RDTYPE': 2, "TEXT": "bar"})
532            dbf.write_record(2, {'RDTYPE': 3, "TEXT": "baz"})
533            dbf.close()
534    
535        def test(self):
536            """Test loading a session containing a joined table"""
537            session = load_session(self.filename())
538            self.session = session
539    
540            tables = session.Tables()
541            self.assertEquals(len(tables), 3)
542            # FIXME: The tests shouldn't assume a certain order of the tables
543            self.assertEquals(tables[0].Title(), "Some Title")
544            self.assertEquals(tables[1].Title(), "Joined")
545            self.check_format()
546    
547    
548    class TestLoadError(LoadSessionTest):
549    
550        file_contents = '''\
551    <?xml version="1.0" encoding="UTF-8"?>
552    <!DOCTYPE session SYSTEM "thuban-0.8.dtd">
553    <session xmlns="http://thuban.intevation.org/dtds/thuban-0.8.dtd"
554            title="single map&amp;layer">
555        <fileshapesource id="D1" filename="../../Data/iceland/political.shp"/>
556        <map title="Test Map">
557            <projection name="Unknown">
558                <parameter value="zone=26"/>
559                <parameter value="proj=utm"/>
560                <parameter value="ellps=clrk66"/>
561            </projection>
562            <layer shapestore="D1" visible="true"
563                    stroke="#000000" title="My Layer" stroke_width="1"
564                    fill="None"/>
565        </map>
566    </session>
567    '''
568    
569        def test(self):
570            """Test loading a session missing a required attribute"""
571            # Don't use assertRaises to make sure that if a session is
572            # actually returned it gets destroyed properly.
573            try:
574                self.session = load_session(self.filename())
575            except LoadError, value:
576                pass
577            else:
578                self.fail("Missing filetype attribute doesn't raise LoadError")
579    
580  if __name__ == "__main__":  if __name__ == "__main__":
581      unittest.main()      unittest.main()

Legend:
Removed from v.1257  
changed lines
  Added in v.1347

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26