def test_get_nested_structure(self): xml = self.get_data_from_test_files('nested_structures.xml', __file__) p = MockupOpusProject(xml) instance = SubModelEditor(p) # fetch the nested_structure for a given submodel, convert it from XML to dict and make # sure that it is the same as the should_be_dict def test_nested_structure(name, should_be_dict): submodel_node = p.find('model/specification/submodel', name=name) nest_struct_node = instance.update_model_nested_structure(submodel_node) if should_be_dict is None: self.assertEqual(nest_struct_node, None) else: node_data = p.xml_config._convert_node_to_data(nest_struct_node) print etree.tostring(nest_struct_node) self.assertDictsEqual(node_data, should_be_dict) should_be_dict = None test_nested_structure('no nests', should_be_dict) should_be_dict = {42: [5, 10]} test_nested_structure('one level nest', should_be_dict) should_be_dict = {1: {11: [5, 10], 12: [99, 100]} } test_nested_structure('multi level nest', should_be_dict) should_be_dict = {77: [1, 2, 3, 4], 33: [5, 6] } test_nested_structure('nest with # of samples', should_be_dict) submodel_node = p.find('malplaced_submodel') self.assertRaises(RuntimeError, instance.update_model_nested_structure, submodel_node)
def test_get_nested_structure(self): xml = self.get_data_from_test_files('nested_structures.xml', __file__) p = MockupOpusProject(xml) instance = SubModelEditor(p) # fetch the nested_structure for a given submodel, convert it from XML to dict and make # sure that it is the same as the should_be_dict def test_nested_structure(name, should_be_dict): submodel_node = p.find('model/specification/submodel', name=name) nest_struct_node = instance.update_model_nested_structure( submodel_node) if should_be_dict is None: self.assertEqual(nest_struct_node, None) else: node_data = p.xml_config._convert_node_to_data( nest_struct_node) print etree.tostring(nest_struct_node) self.assertDictsEqual(node_data, should_be_dict) should_be_dict = None test_nested_structure('no nests', should_be_dict) should_be_dict = {42: [5, 10]} test_nested_structure('one level nest', should_be_dict) should_be_dict = {1: {11: [5, 10], 12: [99, 100]}} test_nested_structure('multi level nest', should_be_dict) should_be_dict = {77: [1, 2, 3, 4], 33: [5, 6]} test_nested_structure('nest with # of samples', should_be_dict) submodel_node = p.find('malplaced_submodel') self.assertRaises(RuntimeError, instance.update_model_nested_structure, submodel_node)
def test_get_tool_node_by_name(self): xml = self.get_data_from_test_files('tool_nodes.xml', __file__) project = MockupOpusProject(xml) another_tool = get_tool_node_by_name(project, 'another tool') another_tool_node = project.find("data_manager/tool_library/tool_group/tool[@name='another tool']") no_tool = get_tool_node_by_name(project, 'no tool') self.assertEquals(another_tool_node.find('class_module').text, 'correct_tool') self.assertEqual(another_tool, another_tool_node) self.assertTrue(no_tool is None)
def test_name_collision_test(self): xml = self.get_data_from_test_files('submodels.xml', __file__) p = MockupOpusProject(xml) instance = SubModelEditor(p) sub1 = p.find('submodel', name='submodel1') instance.init_for_submodel_node(sub1) instance.le_name.setText('taken name') self.assertEqual(instance.validate_submodel_and_accept(), 'name collision') instance.le_name.setText('unique name') self.assert_(instance.validate_submodel_and_accept() is None)
def test_name_collision_test(self): xml = self.get_data_from_test_files('submodels.xml', __file__) p = MockupOpusProject(xml) instance = SubModelEditor(p) sub1 = p.find('submodel', name='submodel1') instance.init_for_submodel_node(sub1) instance.le_name.setText('taken name') self.assertEqual(instance.validate_submodel_and_accept(), 'name collision') instance.le_name.setText('unique name') self.assert_(instance.validate_submodel_and_accept() is None)
def test_get_tool_library_node(self): xml = self.get_data_from_test_files('tool_nodes.xml', __file__) project = MockupOpusProject(xml) lib_node = get_tool_library_node(project) self.assertTrue(lib_node is not None) self.assertEqual(lib_node.tag, 'tool_library') project = MockupOpusProject('<opus_project />') lib_node = get_tool_library_node(project) self.assertTrue(lib_node is None)
def test_get_tool_node_by_name(self): xml = self.get_data_from_test_files('tool_nodes.xml', __file__) project = MockupOpusProject(xml) another_tool = get_tool_node_by_name(project, 'another tool') another_tool_node = project.find( "data_manager/tool_library/tool_group/tool[@name='another tool']") no_tool = get_tool_node_by_name(project, 'no tool') self.assertEquals( another_tool_node.find('class_module').text, 'correct_tool') self.assertEqual(another_tool, another_tool_node) self.assertTrue(no_tool is None)
def test_remove_variables_from_specification(self): filename = os.path.join(self.get_test_data_dir(__file__), 'model_child2.xml') p = MockupOpusProject() p.open(filename) xml = etree.tostring(p._root_node) manager = MockupManager(xml='', manager_node_path='model_manager', opus_project=p) controller = xcm.XmlController_Models(manager) shadowing_node = p.find('model_manager/model/submodel', name='shadow node') self.assert_(shadowing_node.get('inherit_parent_values') == 'False') self.assertEqual(len(shadowing_node.findall('variable_list/variable_spec')), 1) #from opus_core.tests import opus_unittest #if __name__ == "__main__": # opus_unittest.main()
def test_update_submodel(self): filename = os.path.join(self.get_test_data_dir(__file__), 'model_child.xml') p = MockupOpusProject() p.open(filename) xml = etree.tostring(p._root_node) manager = MockupManager(xml='', manager_node_path='model_manager', opus_project=p) controller = xcm.XmlController_Models(manager) local_node = p.find('model_manager/model/submodel', name='local node') shadowing_node = p.find('model_manager/model/submodel', name='shadow node') self.assert_(local_node is not None) self.assert_(shadowing_node is not None) # created an edited version of local node edited_node = etree.Element('submodel', {'name': 'edited local node'}) vlist_node = etree.SubElement(edited_node, 'variable_list', {'type': 'variable_list'}) variable_spec_node = etree.SubElement(vlist_node, 'variable_spec', {'name': '.edited_var'}) controller._update_submodel(local_node, edited_node) # the decription should be gone and the variables and named should have changed self.assert_(local_node.find('description') is None) self.assertEqual( local_node.find('variable_list/variable_spec').get('name'), '.edited_var') self.assertEqual(local_node.get('name'), 'edited local node') # make sure no new nodes was added self.assertEqual(len(p.findall('model_manager/model/submodel')), 3) # renaming a shadowing node should insert a new local copy and reinsert the shadowed node self.assert_(shadowing_node.get('inherited') is None) edited_node.set('name', 'new copy') controller._update_submodel(shadowing_node, edited_node) shadowing_node = p.find('model_manager/model/submodel', name='shadow node') self.assert_(shadowing_node.get('inherited') is not None) # this should now be inherited new_copy_node = p.find('model_manager/model/submodel', name='new copy') self.assert_(new_copy_node is not None) # make sure only one node was added self.assertEqual(len(p.findall('model_manager/model/submodel')), 4)
def test_get_tool_nodes(self): xml = self.get_data_from_test_files('tool_nodes.xml', __file__) project = MockupOpusProject(xml) lib_node = get_tool_library_node(project) self.assertTrue(lib_node is not None) self.assertEqual(lib_node.tag, 'tool_library') tool_nodes = get_tool_nodes(project) names_should_be = set(['a tool', 'another tool', 'a third tool']) names_are = set([tool_node.get('name') for tool_node in tool_nodes]) self.assertEqual(names_are, names_should_be)
def test_remove_variables_from_specification(self): filename = os.path.join(self.get_test_data_dir(__file__), 'model_child2.xml') p = MockupOpusProject() p.open(filename) xml = etree.tostring(p._root_node) manager = MockupManager(xml='', manager_node_path='model_manager', opus_project=p) controller = xcm.XmlController_Models(manager) shadowing_node = p.find('model_manager/model/submodel', name='shadow node') self.assert_(shadowing_node.get('inherit_parent_values') == 'False') self.assertEqual( len(shadowing_node.findall('variable_list/variable_spec')), 1) #from opus_core.tests import opus_unittest #if __name__ == "__main__": # opus_unittest.main()
def __init__(self, xml='<opus_project> <manager /> </opus_project>', manager_node_path='manager', opus_project=None): self.app = QtGui.QApplication([], True) base_widget = QtGui.QWidget() base_widget.setLayout(QtGui.QVBoxLayout()) base_tab_widget = QtGui.QTabWidget(base_widget) project = MockupOpusProject(xml) if not opus_project else opus_project AbstractManager.__init__(self, base_widget, base_tab_widget, project, manager_node_path)
def test_update_submodel(self): filename = os.path.join(self.get_test_data_dir(__file__), 'model_child.xml') p = MockupOpusProject() p.open(filename) xml = etree.tostring(p._root_node) manager = MockupManager(xml='', manager_node_path='model_manager', opus_project=p) controller = xcm.XmlController_Models(manager) local_node = p.find('model_manager/model/submodel', name='local node') shadowing_node = p.find('model_manager/model/submodel', name='shadow node') self.assert_(local_node is not None) self.assert_(shadowing_node is not None) # created an edited version of local node edited_node = etree.Element('submodel', {'name': 'edited local node'}) vlist_node = etree.SubElement(edited_node, 'variable_list', {'type': 'variable_list'}) variable_spec_node = etree.SubElement(vlist_node, 'variable_spec', {'name': '.edited_var'}) controller._update_submodel(local_node, edited_node) # the decription should be gone and the variables and named should have changed self.assert_(local_node.find('description') is None) self.assertEqual(local_node.find('variable_list/variable_spec').get('name'), '.edited_var') self.assertEqual(local_node.get('name'), 'edited local node') # make sure no new nodes was added self.assertEqual(len(p.findall('model_manager/model/submodel')), 3) # renaming a shadowing node should insert a new local copy and reinsert the shadowed node self.assert_(shadowing_node.get('inherited') is None) edited_node.set('name', 'new copy') controller._update_submodel(shadowing_node, edited_node) shadowing_node = p.find('model_manager/model/submodel', name='shadow node') self.assert_(shadowing_node.get('inherited') is not None) # this should now be inherited new_copy_node = p.find('model_manager/model/submodel', name='new copy') self.assert_(new_copy_node is not None) # make sure only one node was added self.assertEqual(len(p.findall('model_manager/model/submodel')), 4)
<variable source="expression" type="variable_definition" use="model variable" name="constant">constant</variable> <variable source="expression" type="variable_definition" use="model variable" name="building.people_in_building">10 * urbansim.building.people_in_building</variable> <variable source="expression" type="variable_definition" use="model variable" name=".add me">urbansim.zone.ln_constraint</variable> </expression_library> </general> <variable_list type="selectable_list"> <variable_spec name=".ln_distance_to_highway" keep_fixed="True" starting_value="42.0" coefficient_name="dth" type="variable" /> <variable_spec name=".land_price" keep_fixed="False" type="variable" /> <variable_spec name=".ignore_me" type="variable" ignore="True"/> <variable_spec name="constant" type="variable" /> <variable_spec name="dataset2.variable" type="variable" /> </variable_list> </opus_project> ''' app = QtGui.QApplication([], True) p = MockupOpusProject(xml) f = QtGui.QFrame() l = QtGui.QVBoxLayout() f.setLayout(l) tv = QtGui.QTableView() m = VariableSelectorTableModel(p) v_defs = p.findall('expression_library/variable') m.init_for_variable_node_list(p.find('variable_list')) tv.setModel(m) l.addWidget(QtGui.QLabel('Hello')) l.addWidget(tv) pb = QtGui.QPushButton('reload') lbl = QtGui.QLabel() def update_text():
def setUp(self): xml = self.get_data_from_test_files('dynamic_templates.xml', __file__) project = MockupOpusProject(xml) self.instance = DynamicTemplateDialog(project.find('model_template'), project)
<variable source="expression" type="variable_definition" use="model variable" name="constant">constant</variable> <variable source="expression" type="variable_definition" use="model variable" name="building.people_in_building">10 * urbansim.building.people_in_building</variable> <variable source="expression" type="variable_definition" use="model variable" name=".add me">urbansim.zone.ln_constraint</variable> </expression_library> </general> <variable_list type="selectable_list"> <variable_spec name=".ln_distance_to_highway" keep_fixed="True" starting_value="42.0" coefficient_name="dth" type="variable" /> <variable_spec name=".land_price" keep_fixed="False" type="variable" /> <variable_spec name=".ignore_me" type="variable" ignore="True"/> <variable_spec name="constant" type="variable" /> <variable_spec name="dataset2.variable" type="variable" /> </variable_list> </opus_project> ''' app = QtGui.QApplication([], True) p = MockupOpusProject(xml) f = QtGui.QFrame() l = QtGui.QVBoxLayout() f.setLayout(l) tv = QtGui.QTableView() m = VariableSelectorTableModel(p) v_defs = p.findall('expression_library/variable') m.init_for_variable_node_list(p.find('variable_list')) tv.setModel(m) l.addWidget(QtGui.QLabel('Hello')) l.addWidget(tv) pb = QtGui.QPushButton('reload') lbl = QtGui.QLabel() def update_text(): text = ''
<variable_list type="variable_list"> <variable_spec name=".ble_saw"/> <variable_spec name=".ble_sew"/> <variable_spec name=".ble_rew"/> <variable_spec name=".blnrsfw"/> <variable_spec name=".bltv"/> <variable_spec name=".bart"/> </variable_list> </equation> <equation equation_id="3" name="simpler equation"> <variable_list type="variable_list"> <variable_spec name=".ble_rew"/> <variable_spec name=".bltv"/> </variable_list> </equation> </submodel> </specification> </model> </models> </model_manager> </opus_project> ''' p = MockupOpusProject(xml) app = QtGui.QApplication([], True) w = SubModelEditor(p) # model_node = p.find('model_manager/models/model', name='land_price_model') model_node = p.find('model_manager/models/model', name='land_price_model') w.init_for_submodel_node(model_node.find('specification/submodel')) while w.exec_() == w.Accepted: print etree.tostring(w.submodel_node, pretty_print=True)
<variable_list type="variable_list"> <variable_spec name=".ble_saw"/> <variable_spec name=".ble_sew"/> <variable_spec name=".ble_rew"/> <variable_spec name=".blnrsfw"/> <variable_spec name=".bltv"/> <variable_spec name=".bart"/> </variable_list> </equation> <equation equation_id="3" name="simpler equation"> <variable_list type="variable_list"> <variable_spec name=".ble_rew"/> <variable_spec name=".bltv"/> </variable_list> </equation> </submodel> </specification> </model> </models> </model_manager> </opus_project> ''' p = MockupOpusProject(xml) app = QtGui.QApplication([], True) w = SubModelEditor(p) # model_node = p.find('model_manager/models/model', name='land_price_model') model_node = p.find('model_manager/models/model', name='land_price_model') w.init_for_submodel_node(model_node.find('specification/submodel')) while w.exec_() == w.Accepted: print etree.tostring(w.submodel_node, pretty_print=True)
def setUp(self): xml = self.get_data_from_test_files('dynamic_templates.xml', __file__) project = MockupOpusProject(xml) self.instance = DynamicTemplateDialog(project.find('model_template'), project)