def query_server(self, url): QtWidgets.QApplication.processEvents() QtTest.QTest.keyClicks(self.wms_control.multilayers.cbWMS_URL, url) QtWidgets.QApplication.processEvents() QtTest.QTest.mouseClick(self.wms_control.multilayers.btGetCapabilities, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.wms_control.cpdlg.canceled)
def test_server_no_thread(self, mockbox, mockthread): self.query_server(f"http://127.0.0.1:{self.port}") server = self.window.multilayers.listLayers.findItems( f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0] self.window.cbAutoUpdate.setCheckState(False) server.setExpanded(True) self.window.multilayers.cbMultilayering.setChecked(True) server.child(0).setCheckState(0, 2) server.child(1).setCheckState(0, 2) QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) urlstr = f"http://127.0.0.1:{self.port}/mss/logo.png" md5_filname = os.path.join( self.window.wms_cache, hashlib.md5(urlstr.encode('utf-8')).hexdigest() + ".png") self.window.fetcher.fetch_legend(urlstr, use_cache=False, md5_filename=md5_filname) self.window.fetcher.fetch_legend(urlstr, use_cache=True, md5_filename=md5_filname) assert mockbox.critical.call_count == 0 assert self.view.draw_image.call_count == 1 assert self.view.draw_legend.call_count == 1 assert self.view.draw_metadata.call_count == 1
def test_server_getmap_cached(self, mockbox): """ assert that a getmap call to a WMS server displays an image """ self.query_server(f"http://127.0.0.1:{self.port}") QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) # assert mockbox.critical.call_count == 0 assert self.view.draw_image.call_count == 1 assert self.view.draw_legend.call_count == 1 assert self.view.draw_metadata.call_count == 1 self.view.reset_mock() QtTest.QTest.mouseClick(self.window.cbCacheEnabled, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) assert mockbox.critical.call_count == 0 assert self.view.draw_image.call_count == 1 assert self.view.draw_legend.call_count == 1 assert self.view.draw_metadata.call_count == 1
def test_singlelayer_handling(self, mockbox): """ assert that singlelayer mode behaves as expected """ self.query_server(f"http://127.0.0.1:{self.port}") server = self.window.multilayers.listLayers.findItems(f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0] self.window.cbAutoUpdate.setCheckState(False) assert server is not None assert "header" in self.window.multilayers.layers[f"http://127.0.0.1:{self.port}/"] assert "wms" in self.window.multilayers.layers[f"http://127.0.0.1:{self.port}/"] self.window.multilayers.cbMultilayering.setChecked(True) self.window.multilayers.cbMultilayering.setChecked(False) # Check using singlelayer mode contains no checkboxes for i in range(0, server.childCount()): layer = server.child(i) assert layer.data(0, QtCore.Qt.CheckStateRole) is None or not layer.data(0, QtCore.Qt.CheckStateRole).isValid() # Check clicking on layers updates the UI self.window.multilayers.multilayer_clicked(server.child(0)) assert self.window.lLayerName.text().endswith(server.child(0).text(0)) self.window.multilayers.multilayer_clicked(server.child(1)) assert self.window.lLayerName.text().endswith(server.child(1).text(0)) # Check drawing not causing errors QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) assert mockbox.critical.call_count == 0 assert self.view.draw_image.call_count == 1 assert self.view.draw_legend.call_count == 1 assert self.view.draw_metadata.call_count == 1
def test_server_getmap(self, mockbox): """ assert that a getmap call to a WMS server displays an image """ self.query_server(f"http://127.0.0.1:{self.port}") QtTest.QTest.mouseClick(self.wms_control.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.wms_control.image_displayed) assert mockbox.critical.call_count == 0
def query_server(self, url): while len(self.window.multilayers.cbWMS_URL.currentText()) > 0: QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Backspace) QtWidgets.QApplication.processEvents() QtTest.QTest.keyClicks(self.window.multilayers.cbWMS_URL, url) QtWidgets.QApplication.processEvents() QtTest.QTest.qWait(2000) # time for the server to start up QtTest.QTest.mouseClick(self.window.multilayers.btGetCapabilities, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.cpdlg.canceled)
def test_multilayer_drawing(self, mockbox): """ assert that drawing a layer through code doesn't fail for vsec """ self.query_server(f"http://127.0.0.1:{self.port}") server = self.window.multilayers.listLayers.findItems( f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0] server.child(0).draw() wait_until_signal(self.window.image_displayed) assert mockbox.critical.call_count == 0
def test_multilayer_handling(self, mockbox): """ assert that multilayers get created, handled and drawn properly """ self.query_server(f"http://127.0.0.1:{self.port}") server = self.window.multilayers.listLayers.findItems( f"http://127.0.0.1:{self.port}/", QtCore.Qt.MatchFixedString)[0] self.window.cbAutoUpdate.setCheckState(False) assert server is not None assert "header" in self.window.multilayers.layers[ f"http://127.0.0.1:{self.port}/"] assert "wms" in self.window.multilayers.layers[ f"http://127.0.0.1:{self.port}/"] self.window.multilayers.cbMultilayering.setChecked(True) for i in range(0, server.childCount()): layer_widget = server.child(i) assert layer_widget.checkState(0) == 0 # Check activating and deactivating layers, and changing priorities works server.setExpanded(True) server.child(0).setCheckState(0, QtCore.Qt.Checked) server.child(2).setCheckState(0, QtCore.Qt.Checked) self.window.multilayers.listLayers.itemWidget(server.child(0), 2).setCurrentIndex(1) self.window.multilayers.multilayer_clicked(server.child(1)) assert self.window.lLayerName.text() != server.child(1).text(0) assert self.window.multilayers.get_current_layer().text( 0) in self.window.lLayerName.text() assert self.window.multilayers.listLayers.itemWidget( server.child(0), 2) is not None assert self.window.multilayers.listLayers.itemWidget( server.child(2), 2) is not None assert self.window.multilayers.listLayers.itemWidget( server.child(0), 2).currentText() == "2" assert self.window.multilayers.listLayers.itemWidget( server.child(1), 2) is None server.child(2).setCheckState(0, QtCore.Qt.Unchecked) assert self.window.multilayers.listLayers.itemWidget( server.child(2), 2) is None assert self.window.multilayers.listLayers.itemWidget( server.child(0), 2).currentText() == "1" # Check drawing not causing errors QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) assert mockbox.critical.call_count == 0 assert self.view.draw_image.call_count == 1 assert self.view.draw_legend.call_count == 1 assert self.view.draw_metadata.call_count == 1
def test_server_getmap(self, mockbox): """ assert that a getmap call to a WMS server displays an image """ self.query_server(f"http://127.0.0.1:{self.port}") QtTest.QTest.mouseClick(self.wms_control.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.wms_control.image_displayed) assert self.window.getView().map.image is not None self.window.getView().set_map_appearance({}) self.window.getView().clear_figure() assert self.window.getView().map.image is None self.window.mpl.canvas.redraw_map() assert mockbox.critical.call_count == 0
def test_server_abort_getmap(self): """ assert that an aborted getmap call does not change the displayed image """ self.query_server(f"http://127.0.0.1:{self.port}") QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() QtTest.QTest.qWait(20) QtTest.QTest.keyClick(self.window.pdlg, QtCore.Qt.Key_Enter) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) assert self.view.draw_image.call_count == 0 assert self.view.draw_legend.call_count == 0 assert self.view.draw_metadata.call_count == 0 self.view.reset_mock()
def test_server_service_cache(self, mockbox): """ assert that changing between servers still allows image retrieval """ self.query_server(f"http://127.0.0.1:{self.port}") assert mockbox.critical.call_count == 0 QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Backspace) QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Backspace) QtWidgets.QApplication.processEvents() QtTest.QTest.mouseClick(self.window.multilayers.btGetCapabilities, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.cpdlg.canceled) assert mockbox.critical.call_count == 1 assert self.view.draw_image.call_count == 0 assert self.view.draw_legend.call_count == 0 assert self.view.draw_metadata.call_count == 0 mockbox.reset_mock() QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, ord(str(self.port)[3])) QtTest.QTest.keyClick(self.window.multilayers.cbWMS_URL, QtCore.Qt.Key_Slash) QtWidgets.QApplication.processEvents() QtTest.QTest.mouseClick(self.window.multilayers.btGetCapabilities, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.cpdlg.canceled) assert mockbox.critical.call_count == 0 QtTest.QTest.mouseClick(self.window.btGetMap, QtCore.Qt.LeftButton) QtWidgets.QApplication.processEvents() wait_until_signal(self.window.image_displayed) assert mockbox.critical.call_count == 0 assert self.view.draw_image.call_count == 1 assert self.view.draw_legend.call_count == 1 assert self.view.draw_metadata.call_count == 1