def test_update_keywords(self): """Test append file keywords with update_keywords method.""" self.maxDiff = None layer = clone_raster_layer( name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=standard_data_path('hazard')) new_keywords = { 'hazard_category': 'multiple_event' } self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'hazard_category': 'multiple_event', 'title': 'Tsunami', 'hazard': 'tsunami', 'continuous_hazard_unit': 'metres', 'layer_geometry': 'raster', 'layer_purpose': 'hazard', 'layer_mode': 'continuous', 'keyword_version': inasafe_keyword_version } expected_keywords = { k: get_unicode(v) for k, v in expected_keywords.iteritems() } self.assertDictEqual(keywords, expected_keywords)
def test_is_polygonal_layer(self): """Test we can get the correct attributes back""" # Polygon layer layer = load_test_vector_layer( 'aggregation', 'district_osm_jakarta.geojson', clone=True ) message = 'isPolygonLayer, %s layer should be polygonal' % layer self.assertTrue(is_polygon_layer(layer), message) # Point layer layer = load_test_vector_layer('hazard', 'volcano_point.geojson') message = '%s layer should be polygonal' % layer self.assertFalse(is_polygon_layer(layer), message) # Raster layer layer = clone_raster_layer( name='earthquake', extension='.tif', include_keywords=True, source_directory=standard_data_path('hazard') ) message = ('%s raster layer should not be polygonal' % layer) self.assertFalse(is_polygon_layer(layer), message)
def test_is_polygonal_layer(self): """Test we can get the correct attributes back""" # Polygon layer layer = clone_shp_layer( name='district_osm_jakarta', include_keywords=True, source_directory=test_data_path('boundaries')) message = 'isPolygonLayer, %s layer should be polygonal' % layer self.assertTrue(is_polygon_layer(layer), message) # Point layer layer = clone_shp_layer( name='volcano_point', include_keywords=True, source_directory=test_data_path('hazard')) message = '%s layer should be polygonal' % layer self.assertFalse(is_polygon_layer(layer), message) layer = clone_raster_layer( name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard') ) message = ('%s raster layer should not be polygonal' % layer) self.assertFalse(is_polygon_layer(layer), message)
def test_update_keywords(self): """Test append file keywords with update_keywords method.""" self.maxDiff = None layer = clone_raster_layer( name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=standard_data_path('hazard')) new_keywords = {'hazard_category': 'multiple_event'} self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'hazard_category': 'multiple_event', 'title': 'Tsunami', 'hazard': 'tsunami', 'continuous_hazard_unit': 'metres', 'layer_geometry': 'raster', 'layer_purpose': 'hazard', 'layer_mode': 'continuous', 'keyword_version': inasafe_keyword_version } expected_keywords = { k: get_unicode(v) for k, v in expected_keywords.iteritems() } self.assertDictEqual(keywords, expected_keywords)
def test_get_keyword_from_file(self): """Get keyword from a filesystem file's .keyword file.""" raster_layer = clone_raster_layer( 'jakarta_flood_design', '.tif', False, test_data_path('hazard')) raster_layer_path = raster_layer.source() keyword_file = test_data_path('other', 'jakarta_flood_design.keywords') raster_keyword_path = ( os.path.splitext(raster_layer_path)[0] + '.keywords') shutil.copy2(keyword_file, raster_keyword_path) keyword = read_file_keywords(raster_layer_path, 'layer_purpose') expected_keyword = 'hazard' self.assertEqual(keyword, expected_keyword) # Test we get an exception if keyword is not found self.assertRaises( KeywordNotFoundError, read_file_keywords, raster_layer_path, 'boguskeyword') # Test if all the keywords are all ready correctly keywords = read_file_keywords(raster_layer_path) expected_keywords = { 'hazard_category': 'single_event', 'hazard': 'flood', 'continuous_hazard_unit': 'metres', 'layer_purpose': 'hazard', 'layer_mode': 'continuous', 'title': 'Jakarta flood like 2007 with structural improvements', 'keyword_version': '3.2' } self.assertDictEqual(keywords, expected_keywords)
def test_read_raster_file_keywords(self): """Can we read raster file keywords using generic readKeywords method """ layer = clone_raster_layer(name='generic_continuous_flood', extension='.asc', include_keywords=True, source_directory=test_data_path('hazard')) keywords = self.keyword_io.read_keywords(layer) expected_keywords = self.expected_raster_keywords self.assertDictEqual(keywords, expected_keywords)
def test_read_raster_file_keywords(self): """Can we read raster file keywords using generic readKeywords method """ layer = clone_raster_layer( name='generic_continuous_flood', extension='.asc', include_keywords=True, source_directory=standard_data_path('hazard')) keywords = self.keyword_io.read_keywords(layer) expected_keywords = self.expected_raster_keywords self.assertDictEqual(keywords, expected_keywords)
def test_get_value_for_key(self): """Test get_value_for_key works.""" layer = clone_raster_layer(name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) dialog = KeywordsDialog(PARENT, IFACE, layer=layer) key = 'category' expected_value = 'hazard' value = dialog.get_value_for_key(key) message = 'The value for key %s should be %s, but it returns %s' % ( key, expected_value, value) self.assertEqual(value, expected_value, message)
def test_get_value_for_key(self): """Test get_value_for_key works.""" layer = clone_raster_layer( name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard') ) dialog = KeywordsDialog(PARENT, IFACE, layer=layer) key = 'category' expected_value = 'hazard' value = dialog.get_value_for_key(key) message = 'The value for key %s should be %s, but it returns %s' % ( key, expected_value, value) self.assertEqual(value, expected_value, message)
def test_copy_keywords(self): """Test we can copy the keywords.""" out_path = unique_filename(prefix='test_copy_keywords', suffix='.shp') layer = clone_raster_layer(name='generic_continuous_flood', extension='.asc', include_keywords=True, source_directory=test_data_path('hazard')) self.keyword_io.copy_keywords(layer, out_path) # copied_keywords = read_file_keywords(out_path.split('.')[0] + 'xml') copied_keywords = read_iso19115_metadata(out_path) expected_keywords = self.expected_raster_keywords expected_keywords['keyword_version'] = inasafe_keyword_version self.maxDiff = None self.assertDictEqual(copied_keywords, expected_keywords)
def test_copy_keywords(self): """Test we can copy the keywords.""" self.maxDiff = None out_path = unique_filename( prefix='test_copy_keywords', suffix='.shp') layer = clone_raster_layer( name='generic_continuous_flood', extension='.asc', include_keywords=True, source_directory=standard_data_path('hazard')) self.keyword_io.copy_keywords(layer, out_path) # copied_keywords = read_file_keywords(out_path.split('.')[0] + 'xml') copied_keywords = read_iso19115_metadata(out_path) expected_keywords = self.expected_raster_keywords expected_keywords['keyword_version'] = inasafe_keyword_version self.assertDictEqual(copied_keywords, expected_keywords)
def test_get_layer_attribute_names(self): """Test we can get the correct attributes back""" layer = clone_shp_layer( name='district_osm_jakarta', include_keywords=True, source_directory=test_data_path('boundaries')) # with good attribute name attributes, position = layer_attribute_names( layer, [QVariant.Int, QVariant.String], 'TEST_STR') expected_attributes = ['KAB_NAME', 'TEST_STR', 'TEST_INT'] expected_position = 1 message = 'expected_attributes, got %s, expected %s' % ( attributes, expected_attributes) self.assertEqual(attributes, expected_attributes, message) message = 'expected_position, got %s, expected %s' % ( position, expected_position) self.assertEqual(position, expected_position, message) # with non existing attribute name attributes, position = layer_attribute_names( layer, [QVariant.Int, QVariant.String], 'MISSING_ATTR') expected_attributes = ['KAB_NAME', 'TEST_STR', 'TEST_INT'] expected_position = None message = 'expected_attributes, got %s, expected %s' % ( attributes, expected_attributes) self.assertEqual(attributes, expected_attributes, message) message = 'expected_position, got %s, expected %s' % ( position, expected_position) self.assertEqual(position, expected_position, message) # with raster layer layer = clone_raster_layer( name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard') ) attributes, position = layer_attribute_names(layer, [], '') message = 'Should return None, None for raster layer, got %s, %s' % ( attributes, position) assert (attributes is None and position is None), message
def test_update_keywords(self): """Test append file keywords with update_keywords method.""" layer = clone_raster_layer(name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) new_keywords = {'category': 'exposure', 'test': 'TEST'} self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'category': 'exposure', 'test': 'TEST', 'subcategory': 'tsunami', 'unit': 'm', 'title': 'A tsunami in Padang (Mw 8.8)' } message = 'Keywords: %s. Expected: %s' % (keywords, expected_keywords) self.assertEqual(keywords, expected_keywords, message)
def test_load_state_from_keywords(self): """Test load_state_from_keywords works.""" layer = clone_raster_layer(name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) dialog = KeywordsDialog(PARENT, IFACE, layer=layer) dialog.load_state_from_keywords() keywords = dialog.get_keywords() expected_keywords = { 'title': 'A tsunami in Padang (Mw 8.8)', 'category': 'hazard', 'subcategory': 'tsunami', 'unit': 'm' } message = 'The keyword should be %s, but it returns %s' % ( expected_keywords, keywords) self.assertEqual(keywords, expected_keywords, message)
def test_update_keywords(self): """Test append file keywords with update_keywords method.""" layer = clone_raster_layer( name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) new_keywords = {'category': 'exposure', 'test': 'TEST'} self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'category': 'exposure', 'test': 'TEST', 'subcategory': 'tsunami', 'unit': 'm', 'title': 'A tsunami in Padang (Mw 8.8)'} message = 'Keywords: %s. Expected: %s' % (keywords, expected_keywords) self.assertEqual(keywords, expected_keywords, message)
def test_load_state_from_keywords(self): """Test load_state_from_keywords works.""" layer = clone_raster_layer( name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard') ) dialog = KeywordsDialog(PARENT, IFACE, layer=layer) dialog.load_state_from_keywords() keywords = dialog.get_keywords() expected_keywords = { 'title': 'A tsunami in Padang (Mw 8.8)', 'category': 'hazard', 'subcategory': 'tsunami', 'unit': 'm'} message = 'The keyword should be %s, but it returns %s' % ( expected_keywords, keywords) self.assertEqual(keywords, expected_keywords, message)
def test_add_user_defined_keyword(self): """Test add user defined keyword when ok button is pressed.""" layer = clone_raster_layer(name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) # Set the keywords dialog dialog = KeywordsDialog(PARENT, IFACE, layer=layer) dialog.radUserDefined.setChecked(True) dialog.leKey.setText('foo') dialog.leValue.setText('bar') ok_button = dialog.buttonBox.button(QtGui.QDialogButtonBox.Ok) ok_button.click() expected_result = 'bar' result = dialog.get_value_for_key('foo') message = 'The key %s should have value %s, but it returns %s' % ( 'foo', expected_result, result) self.assertEqual(result, expected_result, message)
def test_load_state_from_keywords(self): """Test load_state_from_keywords works.""" layer = clone_raster_layer(name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) dialog = KeywordsDialog(PARENT, IFACE, layer=layer) dialog.load_state_from_keywords() keywords = dialog.get_keywords() expected_keywords = { 'category': 'hazard', 'unit': 'metres_depth', 'subcategory': 'tsunami', 'data_type': 'continuous', 'title': 'Tsunami' } message = 'The keyword should be %s, but it returns %s' % ( expected_keywords, keywords) self.assertEqual(keywords, expected_keywords, message)
def test_load_state_from_keywords(self): """Test load_state_from_keywords works.""" layer = clone_raster_layer( name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard') ) dialog = KeywordsDialog(PARENT, IFACE, layer=layer) dialog.load_state_from_keywords() keywords = dialog.get_keywords() expected_keywords = { 'category': 'hazard', 'unit': 'metres_depth', 'subcategory': 'tsunami', 'data_type': 'continuous', 'title': 'Tsunami'} message = 'The keyword should be %s, but it returns %s' % ( expected_keywords, keywords) self.assertEqual(keywords, expected_keywords, message)
def test_add_user_defined_keyword(self): """Test add user defined keyword when ok button is pressed.""" layer = clone_raster_layer( name='padang_tsunami_mw8', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard') ) # Set the keywords dialog dialog = KeywordsDialog(PARENT, IFACE, layer=layer) dialog.radUserDefined.setChecked(True) dialog.leKey.setText('foo') dialog.leValue.setText('bar') ok_button = dialog.buttonBox.button(QtGui.QDialogButtonBox.Ok) ok_button.click() expected_result = 'bar' result = dialog.get_value_for_key('foo') message = 'The key %s should have value %s, but it returns %s' % ( 'foo', expected_result, result) self.assertEqual(result, expected_result, message)
def test_is_polygonal_layer(self): """Test we can get the correct attributes back""" # Polygon layer layer = load_test_vector_layer('aggregation', 'district_osm_jakarta.geojson', clone=True) message = 'isPolygonLayer, %s layer should be polygonal' % layer self.assertTrue(is_polygon_layer(layer), message) # Point layer layer = load_test_vector_layer('hazard', 'volcano_point.geojson') message = '%s layer should be polygonal' % layer self.assertFalse(is_polygon_layer(layer), message) # Raster layer layer = clone_raster_layer( name='earthquake', extension='.tif', include_keywords=True, source_directory=standard_data_path('hazard')) message = ('%s raster layer should not be polygonal' % layer) self.assertFalse(is_polygon_layer(layer), message)
def test_update_keywords(self): """Test append file keywords with update_keywords method.""" layer = clone_raster_layer(name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) new_keywords = {'category': 'exposure', 'test': 'TEST'} self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'category': 'exposure', 'hazard_category': 'single_event', 'title': 'Tsunami', 'hazard': 'tsunami', 'continuous_hazard_unit': 'metres', 'test': 'TEST', 'layer_geometry': 'raster', 'layer_purpose': 'hazard', 'layer_mode': 'continuous', 'keyword_version': inasafe_keyword_version } message = 'Got:\n%s\nExpected:\n%s' % (keywords, expected_keywords) self.assertDictEqual(keywords, expected_keywords, message)
def test_update_keywords(self): """Test append file keywords with update_keywords method.""" layer = clone_raster_layer( name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) new_keywords = {'category': 'exposure', 'test': 'TEST'} self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'category': 'exposure', 'hazard_category': 'single_event', 'title': 'Tsunami', 'hazard': 'tsunami', 'continuous_hazard_unit': 'metres', 'test': 'TEST', 'layer_geometry': 'raster', 'layer_purpose': 'hazard', 'layer_mode': 'continuous', 'keyword_version': inasafe_keyword_version } message = 'Got:\n%s\nExpected:\n%s' % (keywords, expected_keywords) self.assertDictEqual(keywords, expected_keywords, message)
def test_input_function_centric_wizard_test_4(self): """Test keyword creation wizard called from the impact function centric one """ chosen_if = 'FloodEvacuationRasterHazardFunction' # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers # Just the hazard layer in two copies layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=False, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=False, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # step_fc_functions1: select functions for flood x population self.check_current_step(dialog.step_fc_functions1) dialog.step_fc_functions1.tblFunctions1.setCurrentCell(1, 1) dialog.pbnNext.click() # step_fc_functions2: select functions for raster x raster self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(0, 0) dialog.pbnNext.click() # step_fc_function: test if FloodEvacuationRasterHazardFunction # is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(dialog.step_fc_function.lstFunctions.count())] self.assertTrue(chosen_if in flood_ifs) # step_fc_function: select FloodEvacuationRasterHazardFunction and # press ok self.check_current_step(dialog.step_fc_function) chosen_if_row = flood_ifs.index(chosen_if) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_origin: self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Select the first layer and register it as unsuitable (Tsunmami) dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(0) dialog.pbnNext.click() # step_kw_purpose self.check_current_step(dialog.step_kw_purpose) self.select_from_list_widget( 'Hazard', dialog.step_kw_purpose.lstCategories) dialog.pbnNext.click() # step_kw_subcategory self.check_current_step(dialog.step_kw_subcategory) self.select_from_list_widget( 'Tsunami', dialog.step_kw_subcategory.lstSubcategories) dialog.pbnNext.click() # step_kw_hazard_category self.check_current_step(dialog.step_kw_hazard_category) self.select_from_list_widget( 'Single event', dialog.step_kw_hazard_category.lstHazardCategories) dialog.pbnNext.click() # step_kw_layermode self.check_current_step(dialog.step_kw_layermode) self.select_from_list_widget( 'Continuous', dialog.step_kw_layermode.lstLayerModes) dialog.pbnNext.click() # step_kw_unit self.check_current_step(dialog.step_kw_unit) self.select_from_list_widget( 'Metres', dialog.step_kw_unit.lstUnits) dialog.pbnNext.click() # step_kw_source self.check_current_step(dialog.step_kw_source) dialog.pbnNext.click() # step_kw_title self.check_current_step(dialog.step_kw_title) dialog.pbnNext.click() # step_kw_summary self.check_current_step(dialog.step_kw_summary) # step back and forth dialog.pbnBack.click() self.check_current_step(dialog.step_kw_title) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_summary) # Finish the keyword thread and register the unsuitable layer dialog.pbnNext.click() # Should be again in the step_fc_hazlayer_from_canvas self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Now there is only one layer listed - register it properly dialog.pbnNext.click() # step_kw_purpose self.check_current_step(dialog.step_kw_purpose) self.select_from_list_widget( 'Hazard', dialog.step_kw_purpose.lstCategories) dialog.pbnNext.click() # step_kw_subcategory self.check_current_step(dialog.step_kw_subcategory) self.select_from_list_widget( 'Flood', dialog.step_kw_subcategory.lstSubcategories) dialog.pbnNext.click() # step_kw_hazard_category self.check_current_step(dialog.step_kw_hazard_category) self.select_from_list_widget( 'Single event', dialog.step_kw_hazard_category.lstHazardCategories) dialog.pbnNext.click() # step_kw_layermode self.check_current_step(dialog.step_kw_layermode) self.select_from_list_widget( 'Continuous', dialog.step_kw_layermode.lstLayerModes) dialog.pbnNext.click() # step_kw_unit self.check_current_step(dialog.step_kw_unit) self.select_from_list_widget( 'Metres', dialog.step_kw_unit.lstUnits) dialog.pbnNext.click() # step_kw_source self.check_current_step(dialog.step_kw_source) dialog.pbnNext.click() # step_kw_title self.check_current_step(dialog.step_kw_title) dialog.pbnNext.click() # step_kw_summary self.check_current_step(dialog.step_kw_summary) dialog.pbnNext.click() # Should be in the step_fc_explayer_origin self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnCancel.click()
def test_input_function_centric_wizard_test_2(self): """Test the IFCW mode: """ chosen_if = 'FloodEvacuationRasterHazardFunction' # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers # Hazard layer layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=True, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Exposure layer layer = clone_raster_layer( name='people_allow_resampling_true', extension='.tif', include_keywords=True, source_directory=standard_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # step_fc_functions1: select functions for flood x population self.check_current_step(dialog.step_fc_functions1) dialog.step_fc_functions1.tblFunctions1.setCurrentCell(1, 1) dialog.pbnNext.click() # step_fc_functions2: select functions for raster x raster self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(0, 0) dialog.pbnNext.click() # step_fc_function: test if FloodEvacuationRasterHazardFunction # is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(dialog.step_fc_function.lstFunctions.count())] self.assertTrue(chosen_if in flood_ifs) # step_fc_function: select FloodEvacuationRasterHazardFunction and # press ok self.check_current_step(dialog.step_fc_function) chosen_if_row = flood_ifs.index(chosen_if) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_origin: self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnNext.click() # step_fc_explayer_origin: self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnNext.click() # step_fc_explayer_from_canvas: self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnNext.click() # step_fc_agglayer_origin: self.check_current_step(dialog.step_fc_agglayer_origin) dialog.step_fc_agglayer_origin.rbAggLayerNoAggregation.click() dialog.pbnNext.click() # step_fc_extent: self.check_current_step(dialog.step_fc_extent) dialog.pbnNext.click() # step_fc_params: self.check_current_step(dialog.step_fc_params) dialog.pbnNext.click() # step_fc_summary: self.check_current_step(dialog.step_fc_summary) dialog.pbnNext.click() # step_fc_analysis: self.check_current_step(dialog.step_fc_analysis) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_summary) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_params) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_agglayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_function) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_functions2) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_functions1) dialog.pbnCancel.click()
def test_input_function_centric_wizard_test_3(self): """Test various usecases of the wizard: keywordless layers, disjoint layers, browsers, stepping back and forth .""" chosen_if1 = 'FloodRasterBuildingFunction' chosen_if2 = 'ClassifiedRasterHazardBuildingFunction' expected_hazard_layers_count = 2 expected_exposure_layers_count = 2 expected_aggregation_layers_count = 2 # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers # Hazard layer without keywords layer = clone_raster_layer( name='keywordless_layer', extension='.tif', include_keywords=False, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Hazard layer - disjoint layer = clone_raster_layer( name='continuous_flood_unaligned_big_size', extension='.tif', include_keywords=True, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Hazard layer layer = clone_raster_layer( name='classified_flood_20_20', extension='.asc', include_keywords=True, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Exposure layer layer = clone_shp_layer( name='building-points', include_keywords=True, source_directory=standard_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Exposure layer without keywords layer = clone_shp_layer( name='building-points', include_keywords=False, source_directory=standard_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Aggregation layer layer = clone_shp_layer( name='district_osm_jakarta', include_keywords=True, source_directory=standard_data_path('boundaries')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Aggregation layer without keywords layer = clone_shp_layer( name='grid_jakarta', include_keywords=False, source_directory=standard_data_path('boundaries')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # step_fc_functions1: select functions for flood x structure self.check_current_step(dialog.step_fc_functions1) dialog.step_fc_functions1.tblFunctions1.setCurrentCell(3, 1) dialog.pbnNext.click() # step_fc_functions2: select functions for raster x point self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(1, 0) dialog.pbnNext.click() # step_fc_function: test if FloodRasterBuildingFunction is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(dialog.step_fc_function.lstFunctions.count())] self.assertTrue(chosen_if1 in flood_ifs) # step_fc_function: select FloodRasterBuildingFunction and # press ok self.check_current_step(dialog.step_fc_function) chosen_if_row = flood_ifs.index(chosen_if1) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_origin: self.check_current_step(dialog.step_fc_hazlayer_origin) # step_fc_hazlayer_from_canvas: test the lstCanvasHazLayers state # Note this step is tested prior to step_fc_hazlayer_origin # as the list is prepared prior to autoselecting the radiobuttons count = dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.count() self.assertEqual(count, expected_hazard_layers_count) # test if hazard browser works dialog.step_fc_hazlayer_origin.rbHazLayerFromBrowser.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_hazlayer_from_browser) # step back and continue with hazard from canvas dialog.pbnBack.click() dialog.step_fc_hazlayer_origin.rbHazLayerFromCanvas.click() dialog.pbnNext.click() # step_fc_hazlayer_from_canvas self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Select the second (keywordless) layer in order to trigger preparing # the 'missing keywords' description. dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(1) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_purpose) dialog.pbnBack.click() # Now select the first (proper) layer and press ok dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(0) dialog.pbnNext.click() # step_fc_explayer_origin self.check_current_step(dialog.step_fc_explayer_origin) count = dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.count() self.assertEqual(count, expected_exposure_layers_count) # test if exposure browser works dialog.step_fc_explayer_origin.rbExpLayerFromBrowser.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_from_browser) # step back and continue with exposure from canvas dialog.pbnBack.click() dialog.step_fc_explayer_origin.rbExpLayerFromCanvas.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) # Select the second (keywordless) layer in order to trigger preparing # the 'missing keywords' description. dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.setCurrentRow(1) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_purpose) dialog.pbnBack.click() # Now select the first (proper) layer and press ok dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.setCurrentRow(0) dialog.pbnNext.click() # step_fc_disjoint_layers self.check_current_step(dialog.step_fc_disjoint_layers) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_function) # Select ClassifiedRasterHazardBuildingFunction chosen_if_row = flood_ifs.index(chosen_if2) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Select the first (proper) layer and press ok dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(0) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.setCurrentRow(0) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_agglayer_origin) # test if no aggregation works dialog.step_fc_agglayer_origin.rbAggLayerNoAggregation.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_extent) # step back and test if aggregation browser works dialog.pbnBack.click() dialog.step_fc_agglayer_origin.rbAggLayerFromBrowser.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_agglayer_from_browser) # step back and continue with aggregation from canvas dialog.pbnBack.click() dialog.step_fc_agglayer_origin.rbAggLayerFromCanvas.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_agglayer_from_canvas) count = dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.count() self.assertEqual(count, expected_aggregation_layers_count) # Select the second (keywordless) layer in order to trigger preparing # the 'missing keywords' description. dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.setCurrentRow(1) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_purpose) dialog.pbnBack.click() # Now select the first (proper) layer and press ok dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.setCurrentRow(0) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_params) # Step back and enter the params step again dialog.pbnBack.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_params) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_summary) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_params) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_agglayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_agglayer_origin) # No need to test more backward steps (already tested in other test) dialog.pbnCancel.click()
def test_input_function_centric_wizard_test_2(self): """Test the IFCW mode: """ chosen_if = 'FloodEvacuationRasterHazardFunction' # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers # Hazard layer layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=True, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Exposure layer layer = clone_raster_layer( name='people_allow_resampling_true', extension='.tif', include_keywords=True, source_directory=test_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # step_fc_functions1: select functions for flood x population self.check_current_step(dialog.step_fc_functions1) dialog.step_fc_functions1.tblFunctions1.setCurrentCell(1, 1) dialog.pbnNext.click() # step_fc_functions2: select functions for raster x raster self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(0, 0) dialog.pbnNext.click() # step_fc_function: test if FloodEvacuationRasterHazardFunction # is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(dialog.step_fc_function.lstFunctions.count())] self.assertTrue(chosen_if in flood_ifs) # step_fc_function: select FloodEvacuationRasterHazardFunction and # press ok self.check_current_step(dialog.step_fc_function) chosen_if_row = flood_ifs.index(chosen_if) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_origin: self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnNext.click() # step_fc_explayer_origin: self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnNext.click() # step_fc_explayer_from_canvas: self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnNext.click() # step_fc_agglayer_origin: self.check_current_step(dialog.step_fc_agglayer_origin) dialog.step_fc_agglayer_origin.rbAggLayerNoAggregation.click() dialog.pbnNext.click() # step_fc_extent: self.check_current_step(dialog.step_fc_extent) dialog.pbnNext.click() # step_fc_params: self.check_current_step(dialog.step_fc_params) dialog.pbnNext.click() # step_fc_summary: self.check_current_step(dialog.step_fc_summary) dialog.pbnNext.click() # step_fc_analysis: self.check_current_step(dialog.step_fc_analysis) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_summary) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_params) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_agglayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_function) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_functions2) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_functions1) dialog.pbnCancel.click()
def test_input_function_centric_wizard_test_3(self): """Test various usecases of the wizard: keywordless layers, disjoint layers, browsers, stepping back and forth .""" chosen_if1 = 'FloodRasterBuildingFunction' chosen_if2 = 'ClassifiedRasterHazardBuildingFunction' expected_hazard_layers_count = 2 expected_exposure_layers_count = 2 expected_aggregation_layers_count = 2 # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers # Hazard layer without keywords layer = clone_raster_layer( name='keywordless_layer', extension='.tif', include_keywords=False, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Hazard layer - disjoint layer = clone_raster_layer( name='continuous_flood_unaligned_big_size', extension='.tif', include_keywords=True, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Hazard layer layer = clone_raster_layer( name='classified_flood_20_20', extension='.asc', include_keywords=True, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Exposure layer layer = clone_shp_layer( name='building-points', include_keywords=True, source_directory=test_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Exposure layer without keywords layer = clone_shp_layer( name='building-points', include_keywords=False, source_directory=test_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Aggregation layer layer = clone_shp_layer( name='district_osm_jakarta', include_keywords=True, source_directory=test_data_path('boundaries')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Aggregation layer without keywords layer = clone_shp_layer( name='grid_jakarta', include_keywords=False, source_directory=test_data_path('boundaries')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # step_fc_functions1: select functions for flood x structure self.check_current_step(dialog.step_fc_functions1) dialog.step_fc_functions1.tblFunctions1.setCurrentCell(3, 1) dialog.pbnNext.click() # step_fc_functions2: select functions for raster x point self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(1, 0) dialog.pbnNext.click() # step_fc_function: test if FloodRasterBuildingFunction is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(dialog.step_fc_function.lstFunctions.count())] self.assertTrue(chosen_if1 in flood_ifs) # step_fc_function: select FloodRasterBuildingFunction and # press ok self.check_current_step(dialog.step_fc_function) chosen_if_row = flood_ifs.index(chosen_if1) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_origin: self.check_current_step(dialog.step_fc_hazlayer_origin) # step_fc_hazlayer_from_canvas: test the lstCanvasHazLayers state # Note this step is tested prior to step_fc_hazlayer_origin # as the list is prepared prior to autoselecting the radiobuttons count = dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.count() self.assertEqual(count, expected_hazard_layers_count) # test if hazard browser works dialog.step_fc_hazlayer_origin.rbHazLayerFromBrowser.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_hazlayer_from_browser) # step back and continue with hazard from canvas dialog.pbnBack.click() dialog.step_fc_hazlayer_origin.rbHazLayerFromCanvas.click() dialog.pbnNext.click() # step_fc_hazlayer_from_canvas self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Select the second (keywordless) layer in order to trigger preparing # the 'missing keywords' description. dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(1) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_purpose) dialog.pbnBack.click() # Now select the first (proper) layer and press ok dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(0) dialog.pbnNext.click() # step_fc_explayer_origin self.check_current_step(dialog.step_fc_explayer_origin) count = dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.count() self.assertEqual(count, expected_exposure_layers_count) # test if exposure browser works dialog.step_fc_explayer_origin.rbExpLayerFromBrowser.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_from_browser) # step back and continue with exposure from canvas dialog.pbnBack.click() dialog.step_fc_explayer_origin.rbExpLayerFromCanvas.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) # Select the second (keywordless) layer in order to trigger preparing # the 'missing keywords' description. dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.setCurrentRow(1) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_purpose) dialog.pbnBack.click() # Now select the first (proper) layer and press ok dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.setCurrentRow(0) dialog.pbnNext.click() # step_fc_disjoint_layers self.check_current_step(dialog.step_fc_disjoint_layers) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_function) # Select ClassifiedRasterHazardBuildingFunction chosen_if_row = flood_ifs.index(chosen_if2) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Select the first (proper) layer and press ok dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(0) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.setCurrentRow(0) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_agglayer_origin) # test if no aggregation works dialog.step_fc_agglayer_origin.rbAggLayerNoAggregation.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_extent) # step back and test if aggregation browser works dialog.pbnBack.click() dialog.step_fc_agglayer_origin.rbAggLayerFromBrowser.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_agglayer_from_browser) # step back and continue with aggregation from canvas dialog.pbnBack.click() dialog.step_fc_agglayer_origin.rbAggLayerFromCanvas.click() dialog.pbnNext.click() self.check_current_step(dialog.step_fc_agglayer_from_canvas) count = dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.count() self.assertEqual(count, expected_aggregation_layers_count) # Select the second (keywordless) layer in order to trigger preparing # the 'missing keywords' description. dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.setCurrentRow(1) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_purpose) dialog.pbnBack.click() # Now select the first (proper) layer and press ok dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.setCurrentRow(0) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_params) # Step back and enter the params step again dialog.pbnBack.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_params) dialog.pbnNext.click() self.check_current_step(dialog.step_fc_summary) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_params) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_extent) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_agglayer_from_canvas) dialog.pbnBack.click() self.check_current_step(dialog.step_fc_agglayer_origin) # No need to test more backward steps (already tested in other test) dialog.pbnCancel.click()
def test_input_function_centric_wizard(self): """Test the IFCW mode: FloodRasterBuildingFunction""" expected_test_layer_count = 2 expected_hazards_count = 5 # expected_exposures_count = 3 expected_exposures_count = 4 expected_flood_structure_functions_count = 4 expected_raster_polygon_functions_count = 2 expected_functions_count = 2 chosen_if = 'FloodRasterBuildingFunction' expected_hazard_layers_count = 1 expected_exposure_layers_count = 1 expected_aggregation_layers_count = 0 # expected_summary_key = 'minimum needs' # expected_summary_value_fragment = 'rice' # expected_report_size = 4055 # as saved on Ubuntu # TS : changed tolerance from 120 to 160 because above change # causes fail on fedora # AG: updated the tolerance from 160 to 190 # MD: more tolerance please! 190 -> 200 # tolerance = 200 # windows EOL etc # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=True, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) layer = clone_shp_layer( name='buildings', include_keywords=True, source_directory=test_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Check the environment first self.assertIsNotNone(layer.dataProvider()) count = len(dialog.iface.mapCanvas().layers()) self.assertEqual(count, expected_test_layer_count) # step_fc_functions1: test function matrix dimensions col_count = dialog.step_fc_functions1.tblFunctions1.columnCount() self.assertEqual(col_count, expected_hazards_count) row_count = dialog.step_fc_functions1.tblFunctions1.rowCount() self.assertEqual(row_count, expected_exposures_count) # step_fc_functions1: test number of functions for flood x structure dialog.step_fc_functions1.tblFunctions1.setCurrentCell(3, 1) count = len(dialog.step_fc_functions1.selected_functions_1()) self.assertEqual(count, expected_flood_structure_functions_count) # step_fc_functions1: press ok dialog.pbnNext.click() # step_fc_functions2: test number of functions for raster flood # and polygon structure self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(3, 0) count = len(dialog.step_fc_functions2.selected_functions_2()) self.assertEqual(count, expected_raster_polygon_functions_count) # step_fc_functions2: press ok dialog.pbnNext.click() # step_fc_function: test number of available functions self.check_current_step(dialog.step_fc_function) count = dialog.step_fc_function.lstFunctions.count() self.assertEqual(count, expected_functions_count) # step_fc_function: test if chosen_if is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(count)] self.assertTrue(chosen_if in flood_ifs) # step_fc_function: select FloodRasterBuildingImpactFunction and # press ok chosen_if_row = flood_ifs.index(chosen_if) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: test the lstCanvasHazLayers state # Note this step is tested prior to step_fc_hazlayer_origin # as the list is prepared prior to autoselecting the radiobuttons count = dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.count() self.assertEqual(count, expected_hazard_layers_count) # step_fc_hazlayer_origin: test if the radiobuttons are autmatically # enabled and selected self.assertTrue( dialog.step_fc_hazlayer_origin.rbHazLayerFromCanvas.isEnabled()) self.assertTrue( dialog.step_fc_hazlayer_origin.rbHazLayerFromCanvas.isChecked()) # step_fc_hazlayer_origin: press ok self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: press ok self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnNext.click() # step_fc_explayer_from_canvas: test the lstCanvasExpLayers state # Note this step is tested prior to step_fc_explayer_origin # as the list is prepared prior to autoselecting the radiobuttons count = dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.count() self.assertEqual(count, expected_exposure_layers_count) # step_fc_explayer_origin: test if the radiobuttons are automatically # enabled and selected self.assertTrue( dialog.step_fc_explayer_origin.rbExpLayerFromCanvas.isEnabled()) self.assertTrue( dialog.step_fc_explayer_origin.rbExpLayerFromCanvas.isChecked()) # step_fc_explayer_origin: press ok self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnNext.click() # step_fc_explayer_from_canvas: press ok self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnNext.click() # step_fc_explayer_from_canvas: test the lstCanvasAggLayers state # Note this step is tested prior to step_fc_agglayer_origin # as the list is prepared prior to auto selecting the radio buttons count = dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.count() self.assertEqual(count, expected_aggregation_layers_count) # step_fc_agglayer_origin: test if the radio buttons are automatically # enabled and selected self.assertFalse( dialog.step_fc_agglayer_origin.rbAggLayerFromCanvas.isEnabled()) self.assertTrue( dialog.step_fc_agglayer_origin.rbAggLayerFromBrowser.isChecked()) # step_fc_agglayer_origin: switch to no aggregation and press ok self.check_current_step(dialog.step_fc_agglayer_origin) dialog.step_fc_agglayer_origin.rbAggLayerNoAggregation.click() dialog.pbnNext.click() # step_fc_extent: switch to layer's extent and press ok self.check_current_step(dialog.step_fc_extent) dialog.step_fc_extent.extent_dialog.hazard_exposure_only.click() dialog.pbnNext.click() # step_fc_params: press ok (already covered by the relevant test) self.check_current_step(dialog.step_fc_params) dialog.pbnNext.click() # step_fc_summary: test minimum needs text # summaries = dialog.lblSummary.text().split('<br/>') # #TODO: temporarily disable minimum needs test as they seem # #te be removed from params # minneeds = [s for s in summaries # if expected_summary_key.upper() in s.upper()] # self.assertTrue(minneeds) # self.assertTrue(expected_summary_value_fragment.upper() # in minneeds[0].upper()) # step_fc_summary: run analysis dialog.pbnNext.click() # No longer valid for impact data. # step_fc_analysis: test the html output # report_path = dialog.wvResults.report_path # size = os.stat(report_path).st_size # self.assertTrue( # (expected_report_size - tolerance < size < expected_report_size + # tolerance)) # close the wizard dialog.pbnNext.click()
def test_input_function_centric_wizard_test_4(self): """Test keyword creation wizard called from the impact function centric one """ chosen_if = 'FloodEvacuationRasterHazardFunction' # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers # Just the hazard layer in two copies layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=False, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=False, source_directory=test_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # step_fc_functions1: select functions for flood x population self.check_current_step(dialog.step_fc_functions1) dialog.step_fc_functions1.tblFunctions1.setCurrentCell(1, 1) dialog.pbnNext.click() # step_fc_functions2: select functions for raster x raster self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(0, 0) dialog.pbnNext.click() # step_fc_function: test if FloodEvacuationRasterHazardFunction # is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(dialog.step_fc_function.lstFunctions.count())] self.assertTrue(chosen_if in flood_ifs) # step_fc_function: select FloodEvacuationRasterHazardFunction and # press ok self.check_current_step(dialog.step_fc_function) chosen_if_row = flood_ifs.index(chosen_if) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_origin: self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Select the first layer and register it as unsuitable (Tsunmami) dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.setCurrentRow(0) dialog.pbnNext.click() # step_kw_purpose self.check_current_step(dialog.step_kw_purpose) self.select_from_list_widget( 'Hazard', dialog.step_kw_purpose.lstCategories) dialog.pbnNext.click() # step_kw_subcategory self.check_current_step(dialog.step_kw_subcategory) self.select_from_list_widget( 'Tsunami', dialog.step_kw_subcategory.lstSubcategories) dialog.pbnNext.click() # step_kw_hazard_category self.check_current_step(dialog.step_kw_hazard_category) self.select_from_list_widget( 'Single event', dialog.step_kw_hazard_category.lstHazardCategories) dialog.pbnNext.click() # step_kw_layermode self.check_current_step(dialog.step_kw_layermode) self.select_from_list_widget( 'Continuous', dialog.step_kw_layermode.lstLayerModes) dialog.pbnNext.click() # step_kw_unit self.check_current_step(dialog.step_kw_unit) self.select_from_list_widget( 'Metres', dialog.step_kw_unit.lstUnits) dialog.pbnNext.click() # step_kw_source self.check_current_step(dialog.step_kw_source) dialog.pbnNext.click() # step_kw_title self.check_current_step(dialog.step_kw_title) dialog.pbnNext.click() # step_kw_summary self.check_current_step(dialog.step_kw_summary) # step back and forth dialog.pbnBack.click() self.check_current_step(dialog.step_kw_title) dialog.pbnNext.click() self.check_current_step(dialog.step_kw_summary) # Finish the keyword thread and register the unsuitable layer dialog.pbnNext.click() # Should be again in the step_fc_hazlayer_from_canvas self.check_current_step(dialog.step_fc_hazlayer_from_canvas) # Now there is only one layer listed - register it properly dialog.pbnNext.click() # step_kw_purpose self.check_current_step(dialog.step_kw_purpose) self.select_from_list_widget( 'Hazard', dialog.step_kw_purpose.lstCategories) dialog.pbnNext.click() # step_kw_subcategory self.check_current_step(dialog.step_kw_subcategory) self.select_from_list_widget( 'Flood', dialog.step_kw_subcategory.lstSubcategories) dialog.pbnNext.click() # step_kw_hazard_category self.check_current_step(dialog.step_kw_hazard_category) self.select_from_list_widget( 'Single event', dialog.step_kw_hazard_category.lstHazardCategories) dialog.pbnNext.click() # step_kw_layermode self.check_current_step(dialog.step_kw_layermode) self.select_from_list_widget( 'Continuous', dialog.step_kw_layermode.lstLayerModes) dialog.pbnNext.click() # step_kw_unit self.check_current_step(dialog.step_kw_unit) self.select_from_list_widget( 'Metres', dialog.step_kw_unit.lstUnits) dialog.pbnNext.click() # step_kw_source self.check_current_step(dialog.step_kw_source) dialog.pbnNext.click() # step_kw_title self.check_current_step(dialog.step_kw_title) dialog.pbnNext.click() # step_kw_summary self.check_current_step(dialog.step_kw_summary) dialog.pbnNext.click() # Should be in the step_fc_explayer_origin self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnCancel.click()
def test_update_keywords(self): """Test append file keywords with update_keywords method.""" self.maxDiff = None layer = clone_raster_layer( name='tsunami_wgs84', extension='.tif', include_keywords=True, source_directory=standard_data_path('hazard')) layer.keywords = { 'hazard_category': u'single_event', 'title': u'tsunami_wgs84', 'keyword_version': u'3.5', 'hazard': u'tsunami', 'continuous_hazard_unit': u'metres', 'inasafe_fields': {}, 'layer_geometry': u'raster', 'layer_purpose': u'hazard', 'layer_mode': u'continuous', } new_keywords = { 'hazard_category': 'multiple_event' } self.keyword_io.update_keywords(layer, new_keywords) keywords = self.keyword_io.read_keywords(layer) expected_keywords = { 'hazard_category': 'multiple_event', 'title': 'tsunami_wgs84', 'hazard': 'tsunami', 'continuous_hazard_unit': 'metres', 'layer_geometry': 'raster', 'layer_purpose': 'hazard', 'layer_mode': 'continuous', 'thresholds': { 'road': { 'tsunami_hazard_classes': { 'active': True, 'classes': { 'dry': [0.0, 0.1], 'high': [3.0, 8.0], 'medium': [1.0, 3.0], 'low': [0.1, 1.0], 'very high': [8.0, 16.68] } } }, 'structure': { 'tsunami_hazard_classes': { 'active': True, 'classes': { 'dry': [0.0, 0.1], 'high': [3.0, 8.0], 'medium': [1.0, 3.0], 'low': [0.1, 1.0], 'very high': [8.0, 16.68] } } }, 'place': { 'tsunami_hazard_classes': { 'active': True, 'classes': { 'dry': [0.0, 0.1], 'high': [3.0, 8.0], 'medium': [1.0, 3.0], 'low': [0.1, 1.0], 'very high': [8.0, 16.68] } } }, 'land_cover': { 'tsunami_hazard_classes': { 'active': True, 'classes': { 'dry': [0.0, 0.1], 'high': [3.0, 8.0], 'medium': [1.0, 3.0], 'low': [0.1, 1.0], 'very high': [8.0, 16.68] } } }, 'population': { 'tsunami_hazard_classes': { 'active': True, 'classes': { 'dry': [0.0, 0.1], 'high': [3.0, 8.0], 'medium': [1.0, 3.0], 'low': [0.1, 1.0], 'very high': [8.0, 16.68] } } } }, 'keyword_version': inasafe_keyword_version } expected_thresholds = expected_keywords.pop('thresholds') expected_keywords = { k: get_unicode(v) for k, v in expected_keywords.iteritems() } thresholds_keywords = keywords.pop('thresholds') self.assertDictEqual(expected_keywords, keywords) self.assertDictEqual(expected_thresholds, thresholds_keywords)
def test_input_function_centric_wizard(self): """Test the IFCW mode: FloodRasterBuildingFunction""" expected_test_layer_count = 2 expected_hazards_count = 5 # expected_exposures_count = 3 expected_exposures_count = 4 expected_flood_structure_functions_count = 4 expected_raster_polygon_functions_count = 2 expected_functions_count = 2 chosen_if = 'FloodRasterBuildingFunction' expected_hazard_layers_count = 1 expected_exposure_layers_count = 1 expected_aggregation_layers_count = 0 # expected_summary_key = 'minimum needs' # expected_summary_value_fragment = 'rice' # expected_report_size = 4055 # as saved on Ubuntu # TS : changed tolerance from 120 to 160 because above change # causes fail on fedora # AG: updated the tolerance from 160 to 190 # MD: more tolerance please! 190 -> 200 # tolerance = 200 # windows EOL etc # Initialize dialog # noinspection PyTypeChecker dialog = WizardDialog(iface=IFACE) dialog.dock = self.dock dialog.set_function_centric_mode() QgsMapLayerRegistry.instance().removeAllMapLayers() # Load test layers layer = clone_raster_layer( name='continuous_flood_20_20', extension='.asc', include_keywords=True, source_directory=standard_data_path('hazard')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) layer = clone_shp_layer( name='buildings', include_keywords=True, source_directory=standard_data_path('exposure')) # noinspection PyArgumentList QgsMapLayerRegistry.instance().addMapLayers([layer]) # Check the environment first self.assertIsNotNone(layer.dataProvider()) count = len(dialog.iface.mapCanvas().layers()) self.assertEqual(count, expected_test_layer_count) # step_fc_functions1: test function matrix dimensions col_count = dialog.step_fc_functions1.tblFunctions1.columnCount() self.assertEqual(col_count, expected_hazards_count) row_count = dialog.step_fc_functions1.tblFunctions1.rowCount() self.assertEqual(row_count, expected_exposures_count) # step_fc_functions1: test number of functions for flood x structure dialog.step_fc_functions1.tblFunctions1.setCurrentCell(3, 1) count = len(dialog.step_fc_functions1.selected_functions_1()) self.assertEqual(count, expected_flood_structure_functions_count) # step_fc_functions1: press ok dialog.pbnNext.click() # step_fc_functions2: test number of functions for raster flood # and polygon structure self.check_current_step(dialog.step_fc_functions2) dialog.step_fc_functions2.tblFunctions2.setCurrentCell(3, 0) count = len(dialog.step_fc_functions2.selected_functions_2()) self.assertEqual(count, expected_raster_polygon_functions_count) # step_fc_functions2: press ok dialog.pbnNext.click() # step_fc_function: test number of available functions self.check_current_step(dialog.step_fc_function) count = dialog.step_fc_function.lstFunctions.count() self.assertEqual(count, expected_functions_count) # step_fc_function: test if chosen_if is on the list role = QtCore.Qt.UserRole flood_ifs = [ dialog.step_fc_function.lstFunctions.item(row).data(role)['id'] for row in range(count)] self.assertTrue(chosen_if in flood_ifs) # step_fc_function: select FloodRasterBuildingImpactFunction and # press ok chosen_if_row = flood_ifs.index(chosen_if) dialog.step_fc_function.lstFunctions.setCurrentRow(chosen_if_row) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: test the lstCanvasHazLayers state # Note this step is tested prior to step_fc_hazlayer_origin # as the list is prepared prior to autoselecting the radiobuttons count = dialog.step_fc_hazlayer_from_canvas.lstCanvasHazLayers.count() self.assertEqual(count, expected_hazard_layers_count) # step_fc_hazlayer_origin: test if the radiobuttons are autmatically # enabled and selected self.assertTrue( dialog.step_fc_hazlayer_origin.rbHazLayerFromCanvas.isEnabled()) self.assertTrue( dialog.step_fc_hazlayer_origin.rbHazLayerFromCanvas.isChecked()) # step_fc_hazlayer_origin: press ok self.check_current_step(dialog.step_fc_hazlayer_origin) dialog.pbnNext.click() # step_fc_hazlayer_from_canvas: press ok self.check_current_step(dialog.step_fc_hazlayer_from_canvas) dialog.pbnNext.click() # step_fc_explayer_from_canvas: test the lstCanvasExpLayers state # Note this step is tested prior to step_fc_explayer_origin # as the list is prepared prior to autoselecting the radiobuttons count = dialog.step_fc_explayer_from_canvas.lstCanvasExpLayers.count() self.assertEqual(count, expected_exposure_layers_count) # step_fc_explayer_origin: test if the radiobuttons are automatically # enabled and selected self.assertTrue( dialog.step_fc_explayer_origin.rbExpLayerFromCanvas.isEnabled()) self.assertTrue( dialog.step_fc_explayer_origin.rbExpLayerFromCanvas.isChecked()) # step_fc_explayer_origin: press ok self.check_current_step(dialog.step_fc_explayer_origin) dialog.pbnNext.click() # step_fc_explayer_from_canvas: press ok self.check_current_step(dialog.step_fc_explayer_from_canvas) dialog.pbnNext.click() # step_fc_explayer_from_canvas: test the lstCanvasAggLayers state # Note this step is tested prior to step_fc_agglayer_origin # as the list is prepared prior to auto selecting the radio buttons count = dialog.step_fc_agglayer_from_canvas.lstCanvasAggLayers.count() self.assertEqual(count, expected_aggregation_layers_count) # step_fc_agglayer_origin: test if the radio buttons are automatically # enabled and selected self.assertFalse( dialog.step_fc_agglayer_origin.rbAggLayerFromCanvas.isEnabled()) self.assertTrue( dialog.step_fc_agglayer_origin.rbAggLayerFromBrowser.isChecked()) # step_fc_agglayer_origin: switch to no aggregation and press ok self.check_current_step(dialog.step_fc_agglayer_origin) dialog.step_fc_agglayer_origin.rbAggLayerNoAggregation.click() dialog.pbnNext.click() # step_fc_extent: switch to layer's extent and press ok self.check_current_step(dialog.step_fc_extent) dialog.step_fc_extent.extent_dialog.hazard_exposure_only.click() dialog.pbnNext.click() # step_fc_params: press ok (already covered by the relevant test) self.check_current_step(dialog.step_fc_params) dialog.pbnNext.click() # step_fc_summary: test minimum needs text # summaries = dialog.lblSummary.text().split('<br/>') # #TODO: temporarily disable minimum needs test as they seem # #te be removed from params # minneeds = [s for s in summaries # if expected_summary_key.upper() in s.upper()] # self.assertTrue(minneeds) # self.assertTrue(expected_summary_value_fragment.upper() # in minneeds[0].upper()) # step_fc_summary: run analysis dialog.pbnNext.click() # No longer valid for impact data. # step_fc_analysis: test the html output # report_path = dialog.wvResults.report_path # size = os.stat(report_path).st_size # self.assertTrue( # (expected_report_size - tolerance < size < expected_report_size + # tolerance)) # close the wizard dialog.pbnNext.click()