/[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 1417 by bh, Tue Jul 15 08:43:53 2003 UTC revision 1683 by bh, Thu Aug 28 15:20:57 2003 UTC
# Line 34  import unittest Line 34  import unittest
34  import support  import support
35  support.initthuban()  support.initthuban()
36    
37    import postgissupport
38  from xmlsupport import sax_eventlist  from xmlsupport import sax_eventlist
39    
40  import dbflib  import dbflib
41    
42  from Thuban.Model.save import save_session  from Thuban.Model.save import save_session
43  from Thuban.Model.load import load_session, parse_color, LoadError  from Thuban.Model.load import load_session, parse_color, LoadError, \
44         LoadCancelled
45  from Thuban.Model.color import Transparent  from Thuban.Model.color import Transparent
46  from Thuban.Model.classification import ClassGroupProperties, ClassGroupRange,\  from Thuban.Model.classification import ClassGroupProperties, ClassGroupRange,\
47      ClassGroupSingleton, ClassGroupDefault      ClassGroupSingleton, ClassGroupDefault
48    from Thuban.Model.postgisdb import ConnectionError
49    
50  def filenames_equal(name1, name2):  def filenames_equal(name1, name2):
51      """Return true if the filenames name1 and name2 are equal.      """Return true if the filenames name1 and name2 are equal.
# Line 80  class LoadSessionTest(support.FileLoadTe Line 82  class LoadSessionTest(support.FileLoadTe
82          self.session = None          self.session = None
83    
84    
85      dtd = "http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"      dtd = "http://thuban.intevation.org/dtds/thuban-0.9.dtd"
86      thubanids = [((dtd, n), (None, "id")) for n in      thubanids = [((dtd, n), (None, "id")) for n in
87                   ["fileshapesource", "filetable", "jointable",                   ["fileshapesource", "filetable", "jointable",
88                    "derivedshapesource"]]                    "derivedshapesource"]]
# Line 90  class LoadSessionTest(support.FileLoadTe Line 92  class LoadSessionTest(support.FileLoadTe
92                       ("jointable", "right"),                       ("jointable", "right"),
93                       ("derivedshapesource", "table"),                       ("derivedshapesource", "table"),
94                       ("derivedshapesource", "shapesource")]]                       ("derivedshapesource", "shapesource")]]
95        filenames = [((dtd, n), (None, m)) for n, m in
96                     [("fileshapesource", "filename"),
97                      ("rasterlayer", "filename"),
98                      ("filetable", "filename")]]
99      del n, m, dtd      del n, m, dtd
100    
101      def check_format(self):      def check_format(self):
# Line 100  class LoadSessionTest(support.FileLoadTe Line 106  class LoadSessionTest(support.FileLoadTe
106          filename = self.temp_file_name(self.id() + ".roundtrip.thuban")          filename = self.temp_file_name(self.id() + ".roundtrip.thuban")
107          save_session(self.session, filename)          save_session(self.session, filename)
108          el1 = sax_eventlist(filename = filename, ids = self.thubanids,          el1 = sax_eventlist(filename = filename, ids = self.thubanids,
109                              idrefs = self.thubanidrefs)                              idrefs = self.thubanidrefs,
110                                filenames = self.filenames)
111          el2 = sax_eventlist(filename = self.filename(), ids = self.thubanids,          el2 = sax_eventlist(filename = self.filename(), ids = self.thubanids,
112                              idrefs = self.thubanidrefs)                              idrefs = self.thubanidrefs,
113                                filenames = self.filenames)
114          if 0:          if 0:
115              for a, b in zip(el1, el2):              for a, b in zip(el1, el2):
116                  print a != b and "***************" or ""                  print a != b and "***************" or ""
# Line 168  class TestSingleLayer(LoadSessionTest): Line 176  class TestSingleLayer(LoadSessionTest):
176      file_contents = '''\      file_contents = '''\
177  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
178  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
179  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
180          title="single map&amp;layer">          title="single map&amp;layer">
181      <fileshapesource filetype="shapefile" id="D1"      <fileshapesource filetype="shapefile" id="D1"
182          filename="../../Data/iceland/political.shp"/>          filename="../../Data/iceland/political.shp"/>
# Line 229  class TestLayerVisibility(LoadSessionTes Line 237  class TestLayerVisibility(LoadSessionTes
237      file_contents = '''\      file_contents = '''\
238  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
239  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
240  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
241          title="single map&amp;layer">          title="single map&amp;layer">
242      <fileshapesource filetype="shapefile" id="D1"      <fileshapesource filetype="shapefile" id="D1"
243          filename="../../Data/iceland/political.shp"/>          filename="../../Data/iceland/political.shp"/>
# Line 354  class TestLabels(ClassificationTest): Line 362  class TestLabels(ClassificationTest):
362      file_contents = '''\      file_contents = '''\
363  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
364  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
365  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
366          title="single map&amp;layer">          title="single map&amp;layer">
367      <fileshapesource filetype="shapefile" id="D1"      <fileshapesource filetype="shapefile" id="D1"
368          filename="../../Data/iceland/political.shp"/>          filename="../../Data/iceland/political.shp"/>
# Line 402  class TestLayerProjection(LoadSessionTes Line 410  class TestLayerProjection(LoadSessionTes
410      file_contents = '''\      file_contents = '''\
411  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
412  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
413  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
414          title="single map&amp;layer">          title="single map&amp;layer">
415      <fileshapesource filetype="shapefile" id="D2"      <fileshapesource filetype="shapefile" id="D2"
416          filename="../../Data/iceland/roads-line.shp"/>          filename="../../Data/iceland/roads-line.shp"/>
# Line 476  class TestRasterLayer(LoadSessionTest): Line 484  class TestRasterLayer(LoadSessionTest):
484      file_contents = '''\      file_contents = '''\
485  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
486  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
487  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
488          title="single map&amp;layer">          title="single map&amp;layer">
489      <map title="Test Map">      <map title="Test Map">
490          <rasterlayer visible="false" filename="../../Data/iceland/island.tif"          <rasterlayer visible="false" filename="../../Data/iceland/island.tif"
# Line 510  class TestJoinedTable(LoadSessionTest): Line 518  class TestJoinedTable(LoadSessionTest):
518    
519      file_contents = '''<?xml version="1.0" encoding="UTF-8"?>      file_contents = '''<?xml version="1.0" encoding="UTF-8"?>
520  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
521  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd" title="A Joined Table session">  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd" title="A Joined Table session">
522      <fileshapesource filetype="shapefile" id="D137227612"      <fileshapesource filetype="shapefile" id="D137227612"
523          filename="../../Data/iceland/roads-line.shp"/>          filename="../../Data/iceland/roads-line.shp"/>
524      <filetable filetype="DBF" filename="load_joinedtable.dbf" id="D136171140"      <filetable filetype="DBF" filename="load_joinedtable.dbf" id="D136171140"
# Line 554  class TestJoinedTable(LoadSessionTest): Line 562  class TestJoinedTable(LoadSessionTest):
562          self.check_format()          self.check_format()
563    
564    
565    
566    class TestPostGISLayer(LoadSessionTest):
567    
568        file_contents = '''<?xml version="1.0" encoding="UTF-8"?>
569    <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
570    <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
571            title="unnamed session">
572        <dbconnection port="%(port)s" host="%(host)s" user="%(user)s"
573            dbtype="postgis" id="D142684948" dbname="%(dbname)s"/>
574        <dbshapesource tablename="landmarks" id="D143149420" dbconn="D142684948"/>
575        <map title="unnamed map">
576            <layer shapestore="D143149420" visible="true" stroke="#000000"
577                    title="landmarks" stroke_width="1" fill="None"/>
578        </map>
579    </session>
580    '''
581    
582        def setUp(self):
583            """Extend the inherited method to start the postgis server
584    
585            Furthermore, patch the file contents with the real postgis db
586            information
587            """
588            postgissupport.skip_if_no_postgis()
589            self.server = postgissupport.get_test_server()
590            self.postgisdb = self.server.get_default_static_data_db()
591    
592            self.file_contents = self.__class__.file_contents % {
593                "dbname": self.postgisdb.dbname,
594                "user": self.server.user_name,
595                "port": self.server.port,
596                "host": self.server.host}
597            LoadSessionTest.setUp(self)
598    
599        def test(self):
600            """Test loading a session containing a postgis shapestore"""
601            session = load_session(self.filename())
602            self.session = session
603            connections = session.DBConnections()
604            self.assertEquals(len(connections), 1)
605            conn = connections[0]
606            for attr, value in [("host", self.server.host),
607                                ("port", str(self.server.port)),
608                                ("user", self.server.user_name),
609                                ("dbname", self.postgisdb.dbname)]:
610                self.assertEquals(getattr(conn, attr), value)
611            layer = session.Maps()[0].Layers()[0]
612            self.failUnless(layer.ShapeStore().DBConnection() is conn)
613    
614    
615    class TestPostGISLayerPassword(LoadSessionTest):
616    
617        file_contents = '''<?xml version="1.0" encoding="UTF-8"?>
618    <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
619    <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
620            title="unnamed session">
621        <dbconnection port="%(port)s" host="%(host)s" user="%(user)s"
622            dbtype="postgis" id="D142684948" dbname="%(dbname)s"/>
623        <dbshapesource tablename="landmarks" id="D143149420" dbconn="D142684948"/>
624        <map title="unnamed map">
625            <layer shapestore="D143149420" visible="true" stroke="#000000"
626                    title="landmarks" stroke_width="1" fill="None"/>
627        </map>
628    </session>
629    '''
630    
631        def setUp(self):
632            """Extend the inherited method to start the postgis server
633    
634            Furthermore, patch the file contents with the real postgis db
635            information
636            """
637            postgissupport.skip_if_no_postgis()
638            self.server = postgissupport.get_test_server()
639            self.postgisdb = self.server.get_default_static_data_db()
640    
641            self.file_contents = self.__class__.file_contents % {
642                "dbname": self.postgisdb.dbname,
643                "user": self.server.user_name,
644                "port": self.server.port,
645                "host": self.server.host}
646            LoadSessionTest.setUp(self)
647    
648            self.db_connection_callback_called = False
649            self.server.require_authentication(True)
650    
651        def tearDown(self):
652            """Extend the inherited method to switch off postgresql authentication
653            """
654            self.server.require_authentication(False)
655            LoadSessionTest.tearDown(self)
656    
657        def db_connection_callback(self, params, message):
658            """Implementation of Thuban.Model.hooks.query_db_connection_parameters
659            """
660            self.assertEquals(params,
661                              {"dbname": self.postgisdb.dbname,
662                               "user": self.server.user_name,
663                               "port": str(self.server.port),
664                               "host": self.server.host})
665            self.db_connection_callback_called = True
666            params = params.copy()
667            params["password"] = self.server.user_password
668            return params
669    
670        def test_with_callback(self):
671            """Test loading a session with postgis, authentication and a callback
672            """
673            session = load_session(self.filename(),
674                          db_connection_callback = self.db_connection_callback)
675            self.session = session
676            connections = session.DBConnections()
677            self.assertEquals(len(connections), 1)
678            conn = connections[0]
679            for attr, value in [("host", self.server.host),
680                                ("port", str(self.server.port)),
681                                ("user", self.server.user_name),
682                                ("dbname", self.postgisdb.dbname)]:
683                self.assertEquals(getattr(conn, attr), value)
684            layer = session.Maps()[0].Layers()[0]
685            self.failUnless(layer.ShapeStore().DBConnection() is conn)
686            self.failUnless(self.db_connection_callback_called)
687    
688        def test_without_callback(self):
689            """Test loading a session with postgis, authentication and no callback
690            """
691            # A password is required and there's no callback, so we should
692            # get a ConnectionError
693            self.assertRaises(ConnectionError, load_session, self.filename())
694    
695        def test_cancel(self):
696            """Test loading a session with postgis and cancelling authentication
697            """
698            def cancel(*args):
699                self.db_connection_callback_called = True
700                return None
701    
702            # If the user cancels, i.e. if the callbakc returns None, a
703            # LoadCancelled exception is raised.
704            self.assertRaises(LoadCancelled,
705                              load_session, self.filename(), cancel)
706            self.failUnless(self.db_connection_callback_called)
707    
708    
709  class TestLoadError(LoadSessionTest):  class TestLoadError(LoadSessionTest):
710    
711      file_contents = '''\      file_contents = '''\
712  <?xml version="1.0" encoding="UTF-8"?>  <?xml version="1.0" encoding="UTF-8"?>
713  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">  <!DOCTYPE session SYSTEM "thuban-0.9.dtd">
714  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9-dev.dtd"  <session xmlns="http://thuban.intevation.org/dtds/thuban-0.9.dtd"
715          title="single map&amp;layer">          title="single map&amp;layer">
716      <fileshapesource id="D1" filename="../../Data/iceland/political.shp"/>      <fileshapesource id="D1" filename="../../Data/iceland/political.shp"/>
717      <map title="Test Map">      <map title="Test Map">
# Line 582  class TestLoadError(LoadSessionTest): Line 734  class TestLoadError(LoadSessionTest):
734          try:          try:
735              self.session = load_session(self.filename())              self.session = load_session(self.filename())
736          except LoadError, value:          except LoadError, value:
737              pass              # Check the actual messge in value to make sure the
738                # LoadError really was about the missing attribute
739                self.assertEquals(str(value),
740                  "Element "
741                  "(u'http://thuban.intevation.org/dtds/thuban-0.9.dtd',"
742                  " u'fileshapesource') requires an attribute 'filetype'")
743          else:          else:
744              self.fail("Missing filetype attribute doesn't raise LoadError")              self.fail("Missing filetype attribute doesn't raise LoadError")
745    
746  if __name__ == "__main__":  if __name__ == "__main__":
747      unittest.main()      support.run_tests()

Legend:
Removed from v.1417  
changed lines
  Added in v.1683

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26