def test_checkAggregationAttributeNoneAttr(self): """Aggregation attribute is chosen correctly when there None in the kezwords""" myRunButton = DOCK.pbnRunStop myFileList = ['kabupaten_jakarta_singlepart_with_None_keyword.shp'] #add additional layers load_layers(myFileList, clear_flag=False, data_directory=TESTDATA) myAttrKey = defaults('AGGR_ATTR_KEY') # with None aggregation attribute defined in .keyword using # kabupaten_jakarta_singlepart_with_None_keyword.shp myResult, myMessage = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart with None ' 'keyword') assert myResult, myMessage # Press RUN # noinspection PyCallByClass,PyTypeChecker QTest.mouseClick(myRunButton, QtCore.Qt.LeftButton) DOCK.runtimeKeywordsDialog.accept() myAttribute = DOCK.aggregator.attributes[myAttrKey] myMessage = ('The aggregation should be None. Found: %s' % myAttribute) assert myAttribute is None, myMessage
def test_issue71(self): """Test issue #71 in github - cbo changes should update ok button.""" # See https://github.com/AIFDR/inasafe/issues/71 # Push OK with the left mouse button print 'Using QGIS: %s' % qgis_version() self.tearDown() button = DOCK.pbnRunStop # First part of scenario should have enabled run file_list = [ join(HAZDATA, 'Flood_Current_Depth_Jakarta_geographic.asc'), join(TESTDATA, 'Population_Jakarta_geographic.asc')] hazard_layer_count, exposure_layer_count = load_layers( file_list, data_directory=None) message = ( 'Incorrect number of Hazard layers: expected 1 got %s' % hazard_layer_count) self.assertTrue(hazard_layer_count == 1, message) message = ( 'Incorrect number of Exposure layers: expected 1 got %s' % exposure_layer_count) self.assertTrue(exposure_layer_count == 1, message) message = 'Run button was not enabled' self.assertTrue(button.isEnabled(), message) # Second part of scenario - run disabled when adding invalid layer # and select it - run should be disabled file_list = ['issue71.tif'] # This layer has incorrect keywords clear_flag = False _, _ = load_layers(file_list, clear_flag) # set exposure to : Population Density Estimate (5kmx5km) # by moving one down DOCK.cboExposure.setCurrentIndex(DOCK.cboExposure.currentIndex() + 1) actual_dict = get_ui_state(DOCK) expected_dict = { 'Run Button Enabled': False, 'Impact Function Id': '', 'Impact Function Title': '', 'Hazard': 'A flood in Jakarta like in 2007', 'Exposure': 'Population density (5kmx5km)'} message = (( 'Run button was not disabled when exposure set to \n%s' '\nUI State: \n%s\nExpected State:\n%s\n%s') % ( DOCK.cboExposure.currentText(), actual_dict, expected_dict, combos_to_string(DOCK))) self.assertTrue(expected_dict == actual_dict, message) # Now select again a valid layer and the run button # should be enabled DOCK.cboExposure.setCurrentIndex(DOCK.cboExposure.currentIndex() - 1) message = ( 'Run button was not enabled when exposure set to \n%s' % DOCK.cboExposure.currentText()) self.assertTrue(button.isEnabled(), message)
def test_checkAggregationAttribute1Attr(self): """Aggregation attribute is chosen correctly when there is only one attr available.""" myRunButton = DOCK.pbnRunStop myFileList = ['kabupaten_jakarta_singlepart_1_good_attr.shp'] #add additional layers load_layers(myFileList, clear_flag=False, data_directory=TESTDATA) myAttrKey = defaults('AGGR_ATTR_KEY') # with 1 good aggregation attribute using # kabupaten_jakarta_singlepart_1_good_attr.shp myResult, myMessage = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart 1 good attr') assert myResult, myMessage # Press RUN # noinspection PyCallByClass,PyTypeChecker QTest.mouseClick(myRunButton, QtCore.Qt.LeftButton) DOCK.runtimeKeywordsDialog.accept() print myAttrKey print DOCK.aggregator.attributes myAttribute = DOCK.aggregator.attributes[myAttrKey] myMessage = ('The aggregation should be KAB_NAME. Found: %s' % myAttribute) self.assertEqual(myAttribute, 'KAB_NAME', myMessage)
def test_check_aggregation_single_attribute(self): """Aggregation attribute is chosen correctly when there is only one attr available.""" file_list = ['kabupaten_jakarta_singlepart_1_good_attr.shp'] # add additional layers load_layers(file_list, clear_flag=False) attribute_key = get_defaults('AGGR_ATTR_KEY') # with 1 good aggregation attribute using # kabupaten_jakarta_singlepart_1_good_attr.shp result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart 1 good attr') set_jakarta_extent(dock=DOCK) assert result, message # Press RUN # noinspection PyCallByClass,PyTypeChecker DOCK.accept() DOCK.runtime_keywords_dialog.accept() print attribute_key print DOCK.aggregator.attributes attribute = DOCK.aggregator.attributes[attribute_key] message = ( 'The aggregation should be KAB_NAME. Found: %s' % attribute) self.assertEqual(attribute, 'KAB_NAME', message)
def test_full_run_pyzstats(self): """Aggregation results correct using our own python zonal stats code. """ file_list = ['kabupaten_jakarta.shp'] load_layers(file_list, clear_flag=False, data_directory=BOUNDDATA) result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta', aggregation_enabled_flag=True) self.assertTrue(result, message) # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) set_jakarta_extent() # Press RUN # noinspection PyCallByClass,PyTypeChecker DOCK.accept() result = DOCK.wvResults.page_to_text() expected_result = open( TEST_FILES_DIR + '/test-full-run-results.txt', 'r').readlines() result = result.replace( '</td> <td>', ' ').replace('</td><td>', ' ') for line in expected_result: line = line.replace('\n', '') self.assertIn(line, result)
def test_check_aggregation_single_attribute(self): """Aggregation attribute is chosen correctly when there is only one attr available.""" file_list = ['kabupaten_jakarta_singlepart_1_good_attr.shp'] #add additional layers load_layers(file_list, clear_flag=False) attribute_key = breakdown_defaults('AGGR_ATTR_KEY') # with 1 good aggregation attribute using # kabupaten_jakarta_singlepart_1_good_attr.shp result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart 1 good attr') assert result, message # Press RUN # noinspection PyCallByClass,PyTypeChecker DOCK.accept() DOCK.runtime_keywords_dialog.accept() print attribute_key print DOCK.aggregator.attributes attribute = DOCK.aggregator.attributes[attribute_key] message = ('The aggregation should be KAB_NAME. Found: %s' % attribute) self.assertEqual(attribute, 'KAB_NAME', message)
def test_checkAggregationAttribute1Attr(self): """Aggregation attribute is chosen correctly when there is only one attr available.""" myFileList = ['kabupaten_jakarta_singlepart_1_good_attr.shp'] #add additional layers load_layers(myFileList, clear_flag=False, data_directory=TESTDATA) myAttrKey = breakdown_defaults('AGGR_ATTR_KEY') # with 1 good aggregation attribute using # kabupaten_jakarta_singlepart_1_good_attr.shp myResult, myMessage = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart 1 good attr') assert myResult, myMessage # Press RUN # noinspection PyCallByClass,PyTypeChecker DOCK.accept() DOCK.runtimeKeywordsDialog.accept() print myAttrKey print DOCK.aggregator.attributes myAttribute = DOCK.aggregator.attributes[myAttrKey] myMessage = ('The aggregation should be KAB_NAME. Found: %s' % myAttribute) self.assertEqual(myAttribute, 'KAB_NAME', myMessage)
def test_issue71(self): """Test issue #71 in github - cbo changes should update ok button.""" # See https://github.com/AIFDR/inasafe/issues/71 # Push OK with the left mouse button print 'Using QGIS: %s' % qgis_version() self.tearDown() myButton = DOCK.pbnRunStop # First part of scenario should have enabled run myFileList = [ join(HAZDATA, 'Flood_Current_Depth_Jakarta_geographic.asc'), join(TESTDATA, 'Population_Jakarta_geographic.asc') ] myHazardLayerCount, myExposureLayerCount = load_layers( myFileList, data_directory=None) myMessage = ('Incorrect number of Hazard layers: expected 1 got %s' % myHazardLayerCount) assert myHazardLayerCount == 1, myMessage myMessage = ('Incorrect number of Exposure layers: expected 1 got %s' % myExposureLayerCount) assert myExposureLayerCount == 1, myMessage myMessage = 'Run button was not enabled' assert myButton.isEnabled(), myMessage # Second part of scenario - run disabled when adding invalid layer # and select it - run should be disabled myFileList = ['issue71.tif'] # This layer has incorrect keywords myClearFlag = False _, _ = load_layers(myFileList, myClearFlag) # set exposure to : Population Density Estimate (5kmx5km) # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Down) # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) myDict = get_ui_state(DOCK) myExpectedDict = { 'Run Button Enabled': False, 'Impact Function Id': '', 'Impact Function Title': '', 'Hazard': 'A flood in Jakarta like in 2007', 'Exposure': 'Population density (5kmx5km)' } myMessage = (('Run button was not disabled when exposure set to \n%s' '\nUI State: \n%s\nExpected State:\n%s\n%s') % (DOCK.cboExposure.currentText(), myDict, myExpectedDict, combos_to_string(DOCK))) assert myExpectedDict == myDict, myMessage # Now select again a valid layer and the run button # should be enabled # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Up) # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) myMessage = ('Run button was not enabled when exposure set to \n%s' % DOCK.cboExposure.currentText()) assert myButton.isEnabled(), myMessage
def test_issue71(self): """Test issue #71 in github - cbo changes should update ok button.""" # See https://github.com/AIFDR/inasafe/issues/71 # Push OK with the left mouse button print 'Using QGIS: %s' % qgis_version() self.tearDown() myButton = DOCK.pbnRunStop # First part of scenario should have enabled run myFileList = [join(HAZDATA, 'Flood_Current_Depth_Jakarta_geographic.asc'), join(TESTDATA, 'Population_Jakarta_geographic.asc')] myHazardLayerCount, myExposureLayerCount = load_layers( myFileList, data_directory=None) myMessage = ('Incorrect number of Hazard layers: expected 1 got %s' % myHazardLayerCount) assert myHazardLayerCount == 1, myMessage myMessage = ('Incorrect number of Exposure layers: expected 1 got %s' % myExposureLayerCount) assert myExposureLayerCount == 1, myMessage myMessage = 'Run button was not enabled' assert myButton.isEnabled(), myMessage # Second part of scenario - run disabled when adding invalid layer # and select it - run should be disabled myFileList = ['issue71.tif'] # This layer has incorrect keywords myClearFlag = False _, _ = load_layers(myFileList, myClearFlag) # set exposure to : Population Density Estimate (5kmx5km) # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Down) # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) myDict = get_ui_state(DOCK) myExpectedDict = {'Run Button Enabled': False, 'Impact Function Id': '', 'Impact Function Title': '', 'Hazard': 'A flood in Jakarta like in 2007', 'Exposure': 'Population density (5kmx5km)'} myMessage = (('Run button was not disabled when exposure set to \n%s' '\nUI State: \n%s\nExpected State:\n%s\n%s') % (DOCK.cboExposure.currentText(), myDict, myExpectedDict, combos_to_string(DOCK))) assert myExpectedDict == myDict, myMessage # Now select again a valid layer and the run button # should be enabled # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Up) # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) myMessage = ('Run button was not enabled when exposure set to \n%s' % DOCK.cboExposure.currentText()) assert myButton.isEnabled(), myMessage
def test_issue160(self): """Test that multipart features can be used in a scenario - issue #160 """ exposure = os.path.join( UNITDATA, 'exposure', 'buildings_osm_4326.shp') hazard = os.path.join( UNITDATA, 'hazard', 'multipart_polygons_osm_4326.shp') # See https://github.com/AIFDR/inasafe/issues/71 # Push OK with the left mouse button #print 'Using QGIS: %s' % qgis_version() self.tearDown() button = DOCK.pbnRunStop # First part of scenario should have enabled run file_list = [hazard, exposure] hazard_layer_count, exposure_layer_count = load_layers(file_list) message = ( 'Incorrect number of Hazard layers: expected 1 got %s' % hazard_layer_count) self.assertTrue(hazard_layer_count == 1, message) message = ( 'Incorrect number of Exposure layers: expected 1 got %s' % exposure_layer_count) self.assertTrue(exposure_layer_count == 1, message) message = 'Run button was not enabled' self.assertTrue(button.isEnabled(), message) # Second part of scenario - run disabled when adding invalid layer # and select it - run should be disabled file_list = ['issue71.tif'] # This layer has incorrect keywords clear_flag = False _, _ = load_layers(file_list, clear_flag) result, message = setup_scenario( DOCK, hazard='multipart_polygons_osm_4326', exposure='buildings_osm_4326', function='Be flooded', function_id='Flood Building Impact Function') self.assertTrue(result, message) # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) IFACE.mapCanvas().setExtent( QgsRectangle(106.788, -6.193, 106.853, -6.167)) # Press RUN # noinspection PyCallByClass,PyCallByClass,PyTypeChecker DOCK.accept() result = DOCK.wvResults.page_to_text() message = 'Result not as expected: %s' % result self.assertTrue(format_int(68) in result, message)
def test_issue160(self): """Test that multipart features can be used in a scenario - issue #160 """ myExposure = os.path.join(UNITDATA, 'exposure', 'buildings_osm_4326.shp') myHazard = os.path.join(UNITDATA, 'hazard', 'multipart_polygons_osm_4326.shp') # See https://github.com/AIFDR/inasafe/issues/71 # Push OK with the left mouse button print 'Using QGIS: %s' % qgis_version() self.tearDown() myButton = DOCK.pbnRunStop # First part of scenario should have enabled run myFileList = [myHazard, myExposure] myHazardLayerCount, myExposureLayerCount = load_layers(myFileList) myMessage = ('Incorrect number of Hazard layers: expected 1 got %s' % myHazardLayerCount) assert myHazardLayerCount == 1, myMessage myMessage = ('Incorrect number of Exposure layers: expected 1 got %s' % myExposureLayerCount) assert myExposureLayerCount == 1, myMessage myMessage = 'Run button was not enabled' assert myButton.isEnabled(), myMessage # Second part of scenario - run disabled when adding invalid layer # and select it - run should be disabled myFileList = ['issue71.tif'] # This layer has incorrect keywords myClearFlag = False _, _ = load_layers(myFileList, myClearFlag) myResult, myMessage = setup_scenario( DOCK, hazard='multipart_polygons_osm_4326', exposure='buildings_osm_4326', function='Be flooded', function_id='Flood Building Impact Function') assert myResult, myMessage # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) IFACE.mapCanvas().setExtent( QgsRectangle(106.788, -6.193, 106.853, -6.167)) # Press RUN # noinspection PyCallByClass,PyCallByClass,PyTypeChecker DOCK.accept() myResult = DOCK.wvResults.page_to_text() myMessage = 'Result not as expected: %s' % myResult assert format_int(68) in myResult, myMessage
def test_full_run_qgszstats(self): """Aggregation results are correct using native QGIS zonal stats. .. note:: We know this is going to fail (hence the decorator) as QGIS1.8 zonal stats are broken. We expect this to pass when we have ported to the QGIS 2.0 api at which time we can remove the decorator. TS July 2013 """ # TODO check that the values are similar enough to the python stats file_list = ['kabupaten_jakarta.shp'] load_layers(file_list, clear_flag=False, data_directory=BOUNDDATA) result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta', aggregation_enabled_flag=True) self.assertTrue(result, message) # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) set_jakarta_extent() # Press RUN # noinspection PyCallByClass,PyTypeChecker # use QGIS zonal stats only in the test qgis_zonal_flag = bool(QtCore.QSettings().value( 'inasafe/use_native_zonal_stats', False, type=bool)) QtCore.QSettings().setValue('inasafe/use_native_zonal_stats', True) DOCK.accept() QtCore.QSettings().setValue('inasafe/use_native_zonal_stats', qgis_zonal_flag) result = DOCK.wvResults.page_to_text() expected_result = open( TEST_FILES_DIR + '/test-full-run-results-qgis.txt', 'rb').readlines() result = result.replace( '</td> <td>', ' ').replace('</td><td>', ' ') for line in expected_result: line = line.replace('\n', '') self.assertIn(line, result)
def test_preprocessing(self): """Preprocessing results are correct. TODO - this needs to be fixed post dock refactor. """ # See qgis project in test data: vector_preprocessing_test.qgs #add additional layers file_list = ['jakarta_crosskabupaten_polygons.shp'] load_layers(file_list, clear_flag=False) file_list = ['kabupaten_jakarta.shp'] load_layers(file_list, clear_flag=False, data_directory=BOUNDDATA) result, message = setup_scenario( DOCK, hazard='jakarta_crosskabupaten_polygons', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function Vector Hazard', aggregation_layer='kabupaten jakarta', aggregation_enabled_flag=True) assert result, message # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) set_jakarta_extent() # Press RUN DOCK.accept() DOCK.runtime_keywords_dialog.accept() expected_feature_count = 20 message = ( 'The preprocessing should have generated %s features, ' 'found %s' % ( expected_feature_count, DOCK.aggregator.preprocessed_feature_count)) self.assertEqual( expected_feature_count, DOCK.aggregator.preprocessed_feature_count, message)
def test_preprocessing(self): """Preprocessing results are correct. TODO - this needs to be fixed post dock refactor. """ # See qgis project in test data: vector_preprocessing_test.qgs #add additional layers myFileList = ['jakarta_crosskabupaten_polygons.shp'] load_layers(myFileList, clear_flag=False, data_directory=TESTDATA) myFileList = ['kabupaten_jakarta.shp'] load_layers(myFileList, clear_flag=False, data_directory=BOUNDDATA) myRunButton = DOCK.pbnRunStop myResult, myMessage = setup_scenario( DOCK, hazard='jakarta_crosskabupaten_polygons', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function Vector Hazard', aggregation_layer='kabupaten jakarta', aggregation_enabled_flag=True) assert myResult, myMessage # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) set_jakarta_extent() # Press RUN # noinspection PyTypeChecker,PyCallByClass QTest.mouseClick(myRunButton, QtCore.Qt.LeftButton) DOCK.runtimeKeywordsDialog.accept() myExpectedFeatureCount = 20 myMessage = ('The preprocessing should have generated %s features, ' 'found %s' % (myExpectedFeatureCount, DOCK.aggregator.preprocessedFeatureCount)) self.assertEqual(myExpectedFeatureCount, DOCK.aggregator.preprocessedFeatureCount, myMessage)
def test_check_aggregation_none_in_keywords(self): """Aggregation attribute is chosen correctly when None in keywords.""" file_list = ['kabupaten_jakarta_singlepart_with_None_keyword.shp'] #add additional layers load_layers(file_list, clear_flag=False) attribute_key = breakdown_defaults('AGGR_ATTR_KEY') # with None aggregation attribute defined in .keyword using # kabupaten_jakarta_singlepart_with_None_keyword.shp result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart with None keyword') assert result, message # Press RUN DOCK.accept() DOCK.runtime_keywords_dialog.accept() attribute = DOCK.aggregator.attributes[attribute_key] message = ('The aggregation should be None. Found: %s' % attribute) assert attribute is None, message
def test_state(self): """Check if the save/restore state methods work. See also https://github.com/AIFDR/inasafe/issues/58 """ DOCK.cboExposure.setCurrentIndex(DOCK.cboExposure.currentIndex() + 1) DOCK.save_state() expected_dict = get_ui_state(DOCK) #myState = DOCK.state # Now reset and restore and check that it gets the old state # Html is not considered in restore test since the ready # message overwrites it in dock implementation DOCK.cboExposure.setCurrentIndex(DOCK.cboExposure.currentIndex() + 1) DOCK.restore_state() result_dict = get_ui_state(DOCK) message = 'Got unexpected state: %s\nExpected: %s\n%s' % ( result_dict, expected_dict, combos_to_string(DOCK)) self.assertTrue(expected_dict == result_dict, message) # Corner case test when two layers can have the # same functions - when switching layers the selected function should # remain unchanged self.tearDown() file_list = [ join(HAZDATA, 'Flood_Design_Depth_Jakarta_geographic.asc'), join(HAZDATA, 'Flood_Current_Depth_Jakarta_geographic.asc'), join(TESTDATA, 'Population_Jakarta_geographic.asc')] hazard_layer_count, exposure_layer_count = load_layers( file_list, data_directory=None) self.assertTrue(hazard_layer_count == 2) self.assertTrue(exposure_layer_count == 1) DOCK.cboFunction.setCurrentIndex(1) DOCK.cboHazard.setCurrentIndex(0) DOCK.cboExposure.setCurrentIndex(0) expected_function = str(DOCK.cboFunction.currentText()) # Now move down one hazard in the combo then verify # the function remains unchanged DOCK.cboHazard.setCurrentIndex(1) current_function = str(DOCK.cboFunction.currentText()) message = ( 'Expected selected impact function to remain unchanged when ' 'choosing a different hazard of the same category:' ' %s\nExpected: %s\n%s' % ( expected_function, current_function, combos_to_string(DOCK))) self.assertTrue(expected_function == current_function, message) DOCK.cboHazard.setCurrentIndex(0) # Selected function should remain the same expected = 'Need evacuation' function = DOCK.cboFunction.currentText() message = 'Expected: %s, Got: %s' % (expected, function) self.assertTrue(function == expected, message)
def test_check_aggregation_none_in_keywords(self): """Aggregation attribute is chosen correctly when None in keywords.""" file_list = ['kabupaten_jakarta_singlepart_with_None_keyword.shp'] #add additional layers load_layers(file_list, clear_flag=False) attribute_key = breakdown_defaults('AGGR_ATTR_KEY') # with None aggregation attribute defined in .keyword using # kabupaten_jakarta_singlepart_with_None_keyword.shp result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart with None keyword') assert result, message # Press RUN DOCK.accept() DOCK.runtime_keywords_dialog.accept() attribute = DOCK.aggregator.attributes[attribute_key] message = ('The aggregation should be None. Found: %s' % attribute) assert attribute is None, message
def test_checkAggregationAttributeNoneAttr(self): """Aggregation attribute is chosen correctly when None in keywords.""" myFileList = ['kabupaten_jakarta_singlepart_with_None_keyword.shp'] #add additional layers load_layers(myFileList, clear_flag=False, data_directory=TESTDATA) myAttrKey = breakdown_defaults('AGGR_ATTR_KEY') # with None aggregation attribute defined in .keyword using # kabupaten_jakarta_singlepart_with_None_keyword.shp myResult, myMessage = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart with None keyword') assert myResult, myMessage # Press RUN DOCK.accept() DOCK.runtimeKeywordsDialog.accept() myAttribute = DOCK.aggregator.attributes[myAttrKey] myMessage = ('The aggregation should be None. Found: %s' % myAttribute) assert myAttribute is None, myMessage
def test_check_aggregation_no_attributes(self): """Aggregation attribute chosen correctly when no attr available.""" file_list = ['kabupaten_jakarta_singlepart_0_good_attr.shp'] # add additional layers load_layers(file_list, clear_flag=False) attribute_key = get_defaults('AGGR_ATTR_KEY') # with no good aggregation attribute using # kabupaten_jakarta_singlepart_0_good_attr.shp result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart 0 good attr') set_jakarta_extent(dock=DOCK) assert result, message # Press RUN DOCK.accept() DOCK.runtime_keywords_dialog.accept() attribute = DOCK.aggregator.attributes[attribute_key] message = ('The aggregation should be None. Found: %s' % attribute) assert attribute is None, message
def test_preprocessing(self): """Preprocessing results are correct. TODO - this needs to be fixed post dock refactor. """ # See qgis project in test data: vector_preprocessing_test.qgs #add additional layers file_list = ['jakarta_crosskabupaten_polygons.shp'] load_layers(file_list, clear_flag=False) file_list = ['kabupaten_jakarta.shp'] load_layers(file_list, clear_flag=False, data_directory=BOUNDDATA) result, message = setup_scenario( DOCK, hazard='jakarta_crosskabupaten_polygons', exposure='People', function='Need evacuation', function_id='Flood Evacuation Function Vector Hazard', aggregation_layer='kabupaten jakarta', aggregation_enabled_flag=True) assert result, message # Enable on-the-fly reprojection set_canvas_crs(GEOCRS, True) set_jakarta_extent() # Press RUN DOCK.accept() DOCK.runtime_keywords_dialog.accept() expected_feature_count = 20 message = ('The preprocessing should have generated %s features, ' 'found %s' % (expected_feature_count, DOCK.aggregator.preprocessed_feature_count)) self.assertEqual(expected_feature_count, DOCK.aggregator.preprocessed_feature_count, message)
def test_check_aggregation_no_attributes(self): """Aggregation attribute chosen correctly when no attr available.""" file_list = ['kabupaten_jakarta_singlepart_0_good_attr.shp'] # add additional layers load_layers(file_list, clear_flag=False) attribute_key = get_defaults('AGGR_ATTR_KEY') # with no good aggregation attribute using # kabupaten_jakarta_singlepart_0_good_attr.shp result, message = setup_scenario( DOCK, hazard='A flood in Jakarta like in 2007', exposure='People', function_id='Flood Evacuation Function', aggregation_layer='kabupaten jakarta singlepart 0 good attr') set_jakarta_extent(dock=DOCK) assert result, message # Press RUN DOCK.accept() DOCK.runtime_keywords_dialog.accept() attribute = DOCK.aggregator.attributes[attribute_key] message = ( 'The aggregation should be None. Found: %s' % attribute) assert attribute is None, message
def test_state(self): """Check if the save/restore state methods work. See also https://github.com/AIFDR/inasafe/issues/58 """ # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Up) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) DOCK.save_state() myExpectedDict = get_ui_state(DOCK) #myState = DOCK.state # Now reset and restore and check that it gets the old state # Html is not considered in restore test since the ready # message overwrites it in dock implementation # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Up) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) DOCK.restore_state() myResultDict = get_ui_state(DOCK) myMessage = 'Got unexpected state: %s\nExpected: %s\n%s' % ( myResultDict, myExpectedDict, combos_to_string(DOCK)) assert myExpectedDict == myResultDict, myMessage # Corner case test when two layers can have the # same functions - when switching layers the selected function should # remain unchanged self.tearDown() myFileList = [ join(HAZDATA, 'Flood_Design_Depth_Jakarta_geographic.asc'), join(HAZDATA, 'Flood_Current_Depth_Jakarta_geographic.asc'), join(TESTDATA, 'Population_Jakarta_geographic.asc') ] myHazardLayerCount, myExposureLayerCount = load_layers( myFileList, data_directory=None) assert myHazardLayerCount == 2 assert myExposureLayerCount == 1 DOCK.cboHazard.setCurrentIndex(0) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboFunction, QtCore.Qt.Key_Down) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboFunction, QtCore.Qt.Key_Enter) myExpectedFunction = str(DOCK.cboFunction.currentText()) # Now move down one hazard in the combo then verify # the function remains unchanged # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Down) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Enter) myCurrentFunction = str(DOCK.cboFunction.currentText()) myMessage = ( 'Expected selected impact function to remain unchanged ' 'when choosing a different hazard of the same category:' ' %s\nExpected: %s\n%s' % (myExpectedFunction, myCurrentFunction, combos_to_string(DOCK))) assert myExpectedFunction == myCurrentFunction, myMessage # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Down) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Enter) # Selected function should remain the same myExpectation = 'Need evacuation' myFunction = DOCK.cboFunction.currentText() myMessage = 'Expected: %s, Got: %s' % (myExpectation, myFunction) assert myFunction == myExpectation, myMessage
def test_state(self): """Check if the save/restore state methods work. See also https://github.com/AIFDR/inasafe/issues/58 """ # noinspection PyCallByClass,PyTypeChecker QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Up) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) DOCK.save_state() myExpectedDict = get_ui_state(DOCK) #myState = DOCK.state # Now reset and restore and check that it gets the old state # Html is not considered in restore test since the ready # message overwrites it in dock implementation # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Up) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboExposure, QtCore.Qt.Key_Enter) DOCK.restore_state() myResultDict = get_ui_state(DOCK) myMessage = 'Got unexpected state: %s\nExpected: %s\n%s' % ( myResultDict, myExpectedDict, combos_to_string(DOCK)) assert myExpectedDict == myResultDict, myMessage # Corner case test when two layers can have the # same functions - when switching layers the selected function should # remain unchanged self.tearDown() myFileList = [join(HAZDATA, 'Flood_Design_Depth_Jakarta_geographic.asc'), join(HAZDATA, 'Flood_Current_Depth_Jakarta_geographic.asc'), join(TESTDATA, 'Population_Jakarta_geographic.asc')] myHazardLayerCount, myExposureLayerCount = load_layers( myFileList, data_directory=None) assert myHazardLayerCount == 2 assert myExposureLayerCount == 1 DOCK.cboHazard.setCurrentIndex(0) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboFunction, QtCore.Qt.Key_Down) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboFunction, QtCore.Qt.Key_Enter) myExpectedFunction = str(DOCK.cboFunction.currentText()) # Now move down one hazard in the combo then verify # the function remains unchanged # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Down) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Enter) myCurrentFunction = str(DOCK.cboFunction.currentText()) myMessage = ('Expected selected impact function to remain unchanged ' 'when choosing a different hazard of the same category:' ' %s\nExpected: %s\n%s' % (myExpectedFunction, myCurrentFunction, combos_to_string(DOCK))) assert myExpectedFunction == myCurrentFunction, myMessage # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Down) # noinspection PyTypeChecker,PyCallByClass QTest.keyClick(DOCK.cboHazard, QtCore.Qt.Key_Enter) # Selected function should remain the same myExpectation = 'Need evacuation' myFunction = DOCK.cboFunction.currentText() myMessage = 'Expected: %s, Got: %s' % (myExpectation, myFunction) assert myFunction == myExpectation, myMessage