def _test_arguments(browser): # Check that objects requiring constructor arguments are handled. #projects_page, project_info_page, project_dict, workspace_page = startup(browser) project_dict, workspace_page = startup(browser) workspace_page.show_dataflow('top') workspace_page.add_library_item_to_dataflow( 'openmdao.lib.components.metamodel.MetaModel', 'mm') mm_figure = workspace_page.get_dataflow_figure('mm', 'top') mm_editor = mm_figure.editor_page() mm_editor.show_slots() mm_editor.move(-200, 0) # Plug ListCaseIterator into warm_start_data. slot = SlotFigure(workspace_page, 'top.mm.warm_start_data') slot.fill_from_library('ListCaseIterator') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.set_argument(0, '[]') args_page.click_ok() # Plug ListCaseRecorder into recorder. slot = SlotFigure(workspace_page, 'top.mm.recorder') slot.fill_from_library('ListCaseRecorder') # Plug ExecComp into model. slot = SlotFigure(workspace_page, 'top.mm.model') slot.fill_from_library('ExecComp') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.set_argument(0, "('z = x * y',)") args_page.click_ok() # Check that inputs were created from expression. exe_editor = slot.editor_page() exe_editor.move(-100, 0) inputs = exe_editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ['x', 'float', '0', '', 'true', '', '', ''], ['y', 'float', '0', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) exe_editor.close() mm_editor.close() #closeout(projects_page, project_info_page, project_dict, workspace_page) closeout(project_dict, workspace_page)
def _test_menu(browser): project_dict, workspace_page = startup(browser) # Check enable/disable of commit/revert. workspace_page('project_menu').click() time.sleep(0.5) eq(workspace_page('commit_button').get_attribute('class'), 'omg-disabled') eq(workspace_page('revert_button').get_attribute('class'), 'omg-disabled') workspace_page('project_menu').click() workspace_page.replace('driver', 'openmdao.main.driver.Run_Once') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() workspace_page('project_menu').click() time.sleep(0.5) eq(workspace_page('commit_button').get_attribute('class'), '') eq(workspace_page('revert_button').get_attribute('class'), '') workspace_page('project_menu').click() workspace_page.commit_project() workspace_page('project_menu').click() time.sleep(0.5) eq(workspace_page('commit_button').get_attribute('class'), 'omg-disabled') eq(workspace_page('revert_button').get_attribute('class'), 'omg-disabled') workspace_page('project_menu').click() # Project-Run. workspace_page.run() expected = ['Executing...', 'Execution complete.'] eq(workspace_page.history.split('\n')[-2:], expected) top_figure = workspace_page.get_dataflow_figure('top') eq(top_figure.border, '1px solid rgb(0, 255, 0)') #FIXME: These need to verify that the request has been performed. # View menu. for item in ('console', 'library', 'objects', 'files', 'properties', 'workflow', 'dataflow', 'refresh'): workspace_page('view_menu').click() workspace_page('%s_button' % item).click() time.sleep(0.5) # Just so we can see it. # Clean up. closeout(project_dict, workspace_page)
def _test_replace(browser): # Replaces various connected components. project_dict, workspace_page = startup(browser) filename = pkg_resources.resource_filename('openmdao.gui.test.functional', 'files/rosen_suzuki.py') workspace_page.add_file(filename) # Replace 'top' with Simulation. top = workspace_page.get_dataflow_figure('top') top.remove() workspace_page.add_library_item_to_dataflow('rosen_suzuki.Simulation', 'top') # Show dataflow for Simulation. workspace_page.show_dataflow('top') workspace_page.hide_left() # Verify preproc is a PreProc. preproc = workspace_page.get_dataflow_figure('preproc', 'top') editor = preproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ['x_in', 'ndarray', '[ 1. 1. 1. 1.]', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Replace preproc with a ScalingPreProc. workspace_page.replace('preproc', 'rosen_suzuki.ScalingPreProc') preproc = workspace_page.get_dataflow_figure('preproc', 'top') editor = preproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ['scaler', 'float', '1', '', 'true', '', '', ''], ['x_in', 'ndarray', '[ 1. 1. 1. 1.]', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Verify postproc is a PostProc. postproc = workspace_page.get_dataflow_figure('postproc', 'top') editor = postproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ['result_in', 'float', '0', '', 'false', '', "['parent.comp.result']", ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Replace postproc with a ScalingPostProc. workspace_page.replace('postproc', 'rosen_suzuki.ScalingPostProc') postproc = workspace_page.get_dataflow_figure('postproc', 'top') editor = postproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ['result_in', 'float', '0', '', 'false', '', "['parent.comp.result']", ''], ['scaler', 'float', '1', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Verify driver is a CONMINdriver. driver = workspace_page.get_dataflow_figure('driver', 'top') editor = driver.editor_page(base_type='Driver') editor.move(-100, 0) inputs = editor.get_inputs() eq(inputs.value[0], ['cons_is_linear', 'ndarray', '[]', '', 'true', 'Array designating whether each constraint is linear.', '', '']) editor.close() # Replace driver with an SLSQPdriver. workspace_page.replace('driver', 'openmdao.lib.drivers.slsqpdriver.SLSQPdriver') driver = workspace_page.get_dataflow_figure('driver', 'top') editor = driver.editor_page(base_type='Driver') editor.move(-100, 0) inputs = editor.get_inputs() eq(inputs.value[0], ['accuracy', 'float', '0.000001', '', 'true', 'Convergence accuracy', '', '']) editor.close() # Verify comp is a OptRosenSuzukiComponent. comp = workspace_page.get_dataflow_figure('comp', 'top') editor = comp.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ['x', 'ndarray', '[]', '', 'false', '', "['parent.preproc.x_out']", "['driver']"], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Replace comp with an Assembly. workspace_page.replace('comp', 'openmdao.main.assembly.Assembly') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() message = NotifierPage.wait(workspace_page) eq(message, "RuntimeError: top: Can't connect 'comp.result' to" " 'postproc.result_in': top: Can't find 'comp.result'") comp = workspace_page.get_dataflow_figure('comp', 'top') editor = comp.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ ['directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', ''], ['force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Verify new figure. comp = workspace_page.get_dataflow_figure('comp', 'top') background = comp('top_right').value_of_css_property('background') assert background.find('circle-plus.png') >= 0 # Clean up. closeout(project_dict, workspace_page)
def _test_replace(browser): # Replaces various connected components. project_dict, workspace_page = startup(browser) filename = pkg_resources.resource_filename('openmdao.gui.test.functional', 'files/rosen_suzuki.py') workspace_page.add_file(filename) # Replace 'top' with Simulation. top = workspace_page.get_dataflow_figure('top') top.remove() workspace_page.add_library_item_to_dataflow('rosen_suzuki.Simulation', 'top') # Show dataflow for Simulation. workspace_page.show_dataflow('top') workspace_page.hide_left() # Verify preproc is a PreProc. preproc = workspace_page.get_dataflow_figure('preproc', 'top') editor = preproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], ['x_in', 'ndarray', '[ 1. 1. 1. 1.]', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Replace preproc with a ScalingPreProc. workspace_page.replace('preproc', 'rosen_suzuki.ScalingPreProc') preproc = workspace_page.get_dataflow_figure('preproc', 'top') editor = preproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], ['scaler', 'float', '1', '', 'true', '', '', ''], ['x_in', 'ndarray', '[ 1. 1. 1. 1.]', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Verify postproc is a PostProc. postproc = workspace_page.get_dataflow_figure('postproc', 'top') editor = postproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], [ 'result_in', 'float', '0', '', 'false', '', "['parent.comp.result']", '' ], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Replace postproc with a ScalingPostProc. workspace_page.replace('postproc', 'rosen_suzuki.ScalingPostProc') postproc = workspace_page.get_dataflow_figure('postproc', 'top') editor = postproc.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], [ 'result_in', 'float', '0', '', 'false', '', "['parent.comp.result']", '' ], ['scaler', 'float', '1', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Verify driver is a CONMINdriver. driver = workspace_page.get_dataflow_figure('driver', 'top') editor = driver.editor_page(base_type='Driver') editor.move(-100, 0) inputs = editor.get_inputs() eq(inputs.value[0], [ 'cons_is_linear', 'ndarray', '[]', '', 'true', 'Array designating whether each constraint is linear.', '', '' ]) editor.close() # Replace driver with an SLSQPdriver. workspace_page.replace('driver', 'openmdao.lib.drivers.slsqpdriver.SLSQPdriver') driver = workspace_page.get_dataflow_figure('driver', 'top') editor = driver.editor_page(base_type='Driver') editor.move(-100, 0) inputs = editor.get_inputs() eq(inputs.value[0], [ 'accuracy', 'float', '0.000001', '', 'true', 'Convergence accuracy', '', '' ]) editor.close() # Verify comp is a OptRosenSuzukiComponent. comp = workspace_page.get_dataflow_figure('comp', 'top') editor = comp.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], [ 'x', 'ndarray', '[]', '', 'false', '', "['parent.preproc.x_out']", "['driver']" ], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Replace comp with an Assembly. workspace_page.replace('comp', 'openmdao.main.assembly.Assembly') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() message = NotifierPage.wait(workspace_page) eq( message, "RuntimeError: top: Can't connect 'comp.result' to" " 'postproc.result_in': top: Can't find 'comp.result'") comp = workspace_page.get_dataflow_figure('comp', 'top') editor = comp.editor_page() editor.move(-100, 0) inputs = editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) editor.close() # Verify new figure. comp = workspace_page.get_dataflow_figure('comp', 'top') background = comp('top_right').value_of_css_property('background') assert background.find('circle-plus.png') >= 0 # Clean up. closeout(project_dict, workspace_page)
def _test_list_slot(browser): project_dict, workspace_page = startup(browser) # replace the 'top' assembly driver with a DOEdriver # (this additionally verifies that an issue with DOEdriver slots is fixed) replace_driver(workspace_page, 'top', 'DOEdriver') # open the object editor dialog for the driver driver = workspace_page.get_dataflow_figure('driver', 'top') editor = driver.editor_page(False) editor.move(-200, 0) editor.show_slots() # get the generator slot figure slot_id = 'SlotFigure-%s-%s' % ('top-driver', 'DOEgenerator') generator_slot = browser.find_element(By.ID, slot_id) # check that slot is not filled eq(False, ("filled" in generator_slot.get_attribute('class')), "generator slot is showing as filled when it should not be") # drop a FullFactorial onto the generator slot generator = workspace_page.find_library_button('FullFactorial') slot_drop(browser, generator, generator_slot, True, 'generator') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() # refresh time.sleep(1.0) # give it a second to update the figure generator_slot = browser.find_element(By.ID, slot_id) # check for class change (should now be filled) eq(True, ("filled" in generator_slot.get_attribute('class')), "FullFactorial did not drop into generator slot") # get the recorders slot figure slot_id = 'SlotFigure-%s-%s' % ('top-driver', 'recorders') recorders_slot = browser.find_element(By.ID, slot_id) # check that slot is not filled eq(False, ("filled" in recorders_slot.get_attribute('class')), "recorders slot is showing as filled when it should not be") # set center pane to workflow to make sure workflow doesn't steal drops workspace_page('workflow_tab').click() # drop a DumpCaseRecorder onto the recorders slot case_recorder = workspace_page.find_library_button('DumpCaseRecorder') slot_drop(browser, case_recorder, recorders_slot, True, 'recorders') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() # refresh time.sleep(1.0) # give it a second to update the figure recorders_slot = browser.find_element(By.ID, slot_id) # check for class change (should now be filled) eq(True, ("filled" in recorders_slot.get_attribute('class')), "DumpCaseRecorder did not drop into recorders slot") # check that recorders fig now has one filled and one empty rect rects = recorders_slot.find_elements_by_css_selector('rect') eq(len(rects), 2) eq(True, ('stroke: #0b93d5' in rects[0].get_attribute('style')), "Filled slot element should be outlined in blue") eq(True, ('stroke: #808080' in rects[1].get_attribute('style')), "Unfilled slot element should be outlined in gray") klass = recorders_slot.find_elements_by_css_selector('text#klass') eq(klass[0].text, 'DumpCaseRecorder', "Filled slot element should show the correct type (DumpCaseRecorder)") eq(klass[1].text, 'ICaseRecorder', "Unfilled slot element should show the correct klass (ICaseRecorder)") # drop another CaseRecorder onto the recorders slot case_recorder = workspace_page.find_library_button('CSVCaseRecorder') slot_drop(browser, case_recorder, recorders_slot, True, 'recorders') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() # refresh time.sleep(1.0) # give it a second to update the figure recorders_slot = browser.find_element(By.ID, slot_id) # check for class change (it should not change... still filled) eq(True, ("filled" in recorders_slot.get_attribute('class')), "CSVCaseRecorder did not drop into recorders slot") # check that recorders fig now has two filled and one empty rect rects = recorders_slot.find_elements_by_css_selector('rect') eq(len(rects), 3) eq(True, ('stroke: #0b93d5' in rects[0].get_attribute('style')), "Filled slot element should be outlined in blue") eq(True, ('stroke: #0b93d5' in rects[1].get_attribute('style')), "Filled slot element should be outlined in blue") eq(True, ('stroke: #808080' in rects[2].get_attribute('style')), "Unfilled slot element should be outlined in gray") klass = recorders_slot.find_elements_by_css_selector('text#klass') eq(klass[0].text, 'DumpCaseRecorder', "Filled slot element should show the correct type (DumpCaseRecorder)") eq(klass[1].text, 'CSVCaseRecorder', "Filled slot element should show the correct type (CSVCaseRecorder)") eq(klass[2].text, 'ICaseRecorder', "Unfilled slot element should show the correct klass (ICaseRecorder)") # drop another CaseRecorder onto the recorders slot case_recorder = workspace_page.find_library_button('DBCaseRecorder') slot_drop(browser, case_recorder, recorders_slot, True, 'recorders') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() # refresh time.sleep(1.0) # give it a second to update the figure recorders_slot = browser.find_element(By.ID, slot_id) # check that recorders fig now has four total rects rects = recorders_slot.find_elements_by_css_selector('rect') eq(len(rects), 4) # remove an item from the list (the only context menu option) menu_item_remove = recorders_slot.find_element_by_css_selector('ul li') chain = ActionChains(browser) chain.move_to_element_with_offset(recorders_slot, 25, 25) chain.context_click(recorders_slot).perform() menu_item_remove.click() # refresh time.sleep(1.0) # give it a second to update the figure recorders_slot = browser.find_element(By.ID, slot_id) # check that recorders fig now has only three rect # TODO: check that the correct one was removed rects = recorders_slot.find_elements_by_css_selector('rect') eq(len(rects), 3) # Clean up. closeout(project_dict, workspace_page)
def _test_slots(browser): project_dict, workspace_page = startup(browser) editor, metamodel, caseiter, caserec, comp, meta_name = slot_reset( workspace_page) execcomp = workspace_page.find_library_button('ExecComp') ################################################## # First part of test: Drag and drop ExecComp from the Library # onto the recorder slot of a MetaModel. This should fail. ################################################## #drag one success and one failure onto slots #failure: slot_drop(browser, execcomp, caserec, False, 'Component') slot_id = 'SlotFigure-%s-%s' #refresh time.sleep(1.0) # give it a second to update the figure caserec = browser.find_element(By.ID, slot_id % (meta_name, 'recorder')) #check for class change eq(False, ("filled" in caserec.get_attribute('class')), "Component dropped into CaseRecorder (should not have)") ################################################## # Second part of test: Drag and drop ExecComp from the Library onto the # model (IComponent) slot of a MetaModel. ################################################## slot_drop(browser, execcomp, comp, True, 'Component') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() #refresh time.sleep(1.0) # give it a second to update the figure comp = browser.find_element(By.ID, slot_id % (meta_name, 'model')) #check for class change eq(True, ("filled" in comp.get_attribute('class')), "Component did not drop into Component slot") #for the future: """ # get the objects we need for the test # setup a data structure explaining which things can be dropped where # element, dropOnCaseIter, dropOnCaseRec, dropOnComp dropdata = [('CSVCaseIterator', True, False, False),\ ('CSVCaseRecorder', False, True, False),\ ('ExecComp', False, False, True),\ ('Assembly', False, False, True)] drop_elements = [(workspace_page.find_library_button(ele[0]), ele[1], ele[2], ele[3]) for ele in dropdata] #now loop through each dropable item, and see what happens when it lands on the target for ele in drop_elements: #drop on caseiter slot_drop(browser, ele[0].element, caseiter, ele[1], 'CaseIterator') #TODO: REFRESH THE SLOTS, CHECK THEIR FONT COLOR #drop on caserec slot_drop(browser, ele[0].element, caserec, ele[2], 'CaseRecorder') #TODO: REFRESH THE SLOTS, CHECK THEIR FONT COLOR #drop on comp slot_drop(browser, ele[0].element, comp, ele[3], 'Component') #TODO: REFRESH THE SLOTS, CHECK THEIR FONT COLOR editor, metamodel, caseiter, caserec, comp = slot_reset(workspace_page, editor, metamodel, True) """ closeout(project_dict, workspace_page)
def _test_slots(browser): project_dict, workspace_page = startup(browser) editor, metamodel, caseiter, caserec, comp, meta_name = slot_reset(workspace_page) execcomp = workspace_page.find_library_button('ExecComp') ################################################## # First part of test: Drag and drop ExecComp from the Library # onto the recorder slot of a MetaModel. This should fail. ################################################## #drag one success and one failure onto slots #failure: slot_drop(browser, execcomp, caserec, False, 'Component') slot_id = 'SlotFigure-%s-%s' #refresh time.sleep(1.0) # give it a second to update the figure caserec = browser.find_element(By.ID, slot_id % (meta_name, 'recorder')) #check for class change eq(False, ("filled" in caserec.get_attribute('class')), "Component dropped into CaseRecorder (should not have)") ################################################## # Second part of test: Drag and drop ExecComp from the Library onto the # model (IComponent) slot of a MetaModel. ################################################## slot_drop(browser, execcomp, comp, True, 'Component') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.click_ok() #refresh time.sleep(1.0) # give it a second to update the figure comp = browser.find_element(By.ID, slot_id % (meta_name, 'model')) #check for class change eq(True, ("filled" in comp.get_attribute('class')), "Component did not drop into Component slot") #for the future: """ # get the objects we need for the test # setup a data structure explaining which things can be dropped where # element, dropOnCaseIter, dropOnCaseRec, dropOnComp dropdata = [('CSVCaseIterator', True, False, False),\ ('CSVCaseRecorder', False, True, False),\ ('ExecComp', False, False, True),\ ('Assembly', False, False, True)] drop_elements = [(workspace_page.find_library_button(ele[0]), ele[1], ele[2], ele[3]) for ele in dropdata] #now loop through each dropable item, and see what happens when it lands on the target for ele in drop_elements: #drop on caseiter slot_drop(browser, ele[0].element, caseiter, ele[1], 'CaseIterator') #TODO: REFRESH THE SLOTS, CHECK THEIR FONT COLOR #drop on caserec slot_drop(browser, ele[0].element, caserec, ele[2], 'CaseRecorder') #TODO: REFRESH THE SLOTS, CHECK THEIR FONT COLOR #drop on comp slot_drop(browser, ele[0].element, comp, ele[3], 'Component') #TODO: REFRESH THE SLOTS, CHECK THEIR FONT COLOR editor, metamodel, caseiter, caserec, comp = slot_reset(workspace_page, editor, metamodel, True) """ closeout(project_dict, workspace_page)
def _test_arguments(browser): # Check that objects requiring constructor arguments are handled. #projects_page, project_info_page, project_dict, workspace_page = startup(browser) project_dict, workspace_page = startup(browser) workspace_page.show_dataflow('top') workspace_page.add_library_item_to_dataflow( 'openmdao.lib.components.metamodel.MetaModel', 'mm') mm_figure = workspace_page.get_dataflow_figure('mm', 'top') mm_editor = mm_figure.editor_page() mm_editor.show_slots() mm_editor.move(-200, 0) # Plug ListCaseIterator into warm_start_data. slot = SlotFigure(workspace_page, 'top.mm.warm_start_data') slot.fill_from_library('ListCaseIterator') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.set_argument(0, '[]') args_page.click_ok() # Plug ListCaseRecorder into recorder. slot = SlotFigure(workspace_page, 'top.mm.recorder') slot.fill_from_library('ListCaseRecorder') # Plug ExecComp into model. slot = SlotFigure(workspace_page, 'top.mm.model') slot.fill_from_library('ExecComp') args_page = ArgsPrompt(workspace_page.browser, workspace_page.port) args_page.set_argument(0, "('z = x * y',)") args_page.click_ok() # Check that inputs were created from expression. exe_editor = slot.editor_page() exe_editor.move(-100, 0) inputs = exe_editor.get_inputs() expected = [ [ 'directory', 'str', '', '', 'true', 'If non-blank, the directory to execute in.', '', '' ], [ 'force_execute', 'bool', 'False', '', 'true', 'If True, always execute even if all IO traits are valid.', '', '' ], ['x', 'float', '0', '', 'true', '', '', ''], ['y', 'float', '0', '', 'true', '', '', ''], ] for i, row in enumerate(inputs.value): eq(row, expected[i]) exe_editor.close() mm_editor.close() #closeout(projects_page, project_info_page, project_dict, workspace_page) closeout(project_dict, workspace_page)