def test_add_node(self, tree_manager, tree): visualization = tree_manager.tree_nodes['visualization'].node tree_manager.remove_node('visualization') assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'visualization' not in display.ascii_tree(tree.root) with pytest.raises(KeyError): tree_manager.enable_node('visualization') tree_manager.insert_node(visualization, 'wait for goal', 3) assert 'visualization' in tree_manager.tree_nodes.keys() assert 'visualization' in display.ascii_tree(tree.root) assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['wait for goal'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['wait for goal'].enabled_children ]
def test_disable_enable_vis(self, tree_manager, tree): ascii_tree = display.ascii_tree(tree.root) assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] tree_manager.disable_node('visualization') assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'visualization' not in display.ascii_tree(tree.root) tree_manager.enable_node('visualization') assert display.ascii_tree(tree.root) == ascii_tree assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ]
def test_remove_disabled_node(self, tree_manager, tree): assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] tree_manager.disable_node('visualization') tree_manager.remove_node('visualization') assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'visualization' not in display.ascii_tree(tree.root) with pytest.raises(KeyError): tree_manager.enable_node('visualization') assert display.ascii_tree(tree.root) == """root [-] wait for goal --> tf --> js1 --> pybullet updater --> has goal --> js2 --> cleanup --> process move goal --> planning I --> update constraints --> planning II --> goal canceled --> cpi marker --> planning III --> set move goal --> plot trajectory --> post processing --> wiggle_cancel_final_detection --> post_processing --> move robot --> execute? --> monitor execution --> goal canceled --> send traj --> send result """ assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ]
def test_same_order_add_node(self, tree_manager, tree): visualization = tree_manager.tree_nodes['visualization'].node tree_manager.remove_node('visualization') tree_manager.disable_node('cpi marker') tree_manager.disable_node('update constraints') assert 'visualization' not in display.ascii_tree(tree.root) assert 'cpi marker' not in display.ascii_tree(tree.root) assert 'update constraints' not in display.ascii_tree(tree.root) tree_manager.insert_node(visualization, 'planning I', 1) tree_manager.enable_node('cpi marker') tree_manager.enable_node('update constraints') assert display.ascii_tree(tree.root) == """root
def test_enable_node_twice(self, tree_manager, tree): ascii_tree = display.ascii_tree(tree.root) assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] with pytest.raises(ValueError): tree_manager.enable_node('visualization') assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert ascii_tree == display.ascii_tree(tree.root)
def test_everything(self, tree_manager, tree): update_constraints = tree_manager.tree_nodes['update constraints'].node cpi_marker = tree_manager.tree_nodes['cpi marker'].node visualization = tree_manager.tree_nodes['visualization'].node js1 = tree_manager.tree_nodes['js1'].node post_processing = tree_manager.tree_nodes['post processing'].node tree_manager.remove_node('visualization') tree_manager.remove_node('cpi marker') tree_manager.remove_node('update constraints') tree_manager.remove_node('post processing') tree_manager.remove_node('js1') tree_manager.disable_node('pybullet updater') tree_manager.remove_node('pybullet updater') tree_manager.insert_node(visualization, 'wait for goal', 1) tree_manager.insert_node(cpi_marker, 'wait for goal', 3) tree_manager.insert_node(js1, 'wait for goal') tree_manager.insert_node(update_constraints, 'wait for goal', 1) tree_manager.insert_node(post_processing, 'wait for goal', 4) assert display.ascii_tree(tree.root) == """root
def test_disable_child_of_disabled_node(self, tree_manager, tree): ascii_tree = display.ascii_tree(tree.root) assert 'process move goal' not in [ x.node.name for x in tree_manager.tree_nodes['root'].disabled_children ] assert 'process move goal' in [ x.node.name for x in tree_manager.tree_nodes['root'].enabled_children ] tree_manager.disable_node('process move goal') assert 'process move goal' not in display.ascii_tree(tree.root) assert 'visualization' not in display.ascii_tree(tree.root) assert 'process move goal' in [ x.node.name for x in tree_manager.tree_nodes['root'].disabled_children ] assert 'process move goal' not in [ x.node.name for x in tree_manager.tree_nodes['root'].enabled_children ] assert 'process move goal' not in display.ascii_tree(tree.root) tree_manager.disable_node('visualization') assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] tree_manager.enable_node('process move goal') assert 'process move goal' in display.ascii_tree(tree.root) assert 'visualization' not in display.ascii_tree(tree.root) tree_manager.enable_node('visualization') assert ascii_tree == display.ascii_tree(tree.root)
def test_text_trees(): console.banner("Text Trees") root = py_trees.composites.Selector("Selector") high_priority = py_trees.behaviours.Count(name="High Priority", fail_until=1, running_until=1, success_until=10) low_priority = py_trees.behaviours.Running(name="Low Priority") root.add_children([high_priority, low_priority]) tree = py_trees.trees.BehaviourTree(root) snapshot_visitor = py_trees.visitors.SnapshotVisitor() tree.visitors.append(snapshot_visitor) tree.tick() tree.tick() snippets = {} # Visited snippets["visited_ascii_tree"] = display.ascii_tree( tree.root, visited=snapshot_visitor.visited, previously_visited=snapshot_visitor.previously_visited) print(snippets["visited_ascii_tree"]) snippets["visited_xhtml"] = display.xhtml_tree( tree.root, visited=snapshot_visitor.visited, previously_visited=snapshot_visitor.previously_visited) print(snippets["visited_xhtml"]) print() # Non-Visited snippets["non_visited_ascii_tree"] = display.ascii_tree(tree.root) print(snippets["non_visited_ascii_tree"]) print() snippets["non_visited_xhtml"] = display.xhtml_tree(tree.root) print(snippets["non_visited_xhtml"]) print() # Non-Visited with Status snippets["non_visited_ascii_tree_status"] = display.ascii_tree( tree.root, show_status=True) print(snippets["non_visited_ascii_tree_status"]) print() snippets["non_visited_xhtml_status"] = display.xhtml_tree(tree.root, show_status=True) print(snippets["non_visited_xhtml_status"]) print() print_assert_banner() for snippet_name, snippet in snippets.items(): for b in root.iterate(): print_assert_details("{} in {}".format(b.name, snippet_name), True, b.name in snippet) assert (b.name in snippet) print_assert_details("status symbol '-' in visited_ascii_tree", True, '-' in snippets["visited_ascii_tree"]) assert ('-' in snippets["visited_ascii_tree"]) print_assert_details("status symbol '-' in non_visited_ascii_tree_status", True, '-' in snippets["non_visited_ascii_tree_status"]) assert ('-' in snippets["non_visited_ascii_tree_status"]) try: unused_element = xml.etree.ElementTree.fromstring( snippets["visited_xhtml"]) unused_element = xml.etree.ElementTree.fromstring( snippets["non_visited_xhtml"]) unused_element = xml.etree.ElementTree.fromstring( snippets["non_visited_xhtml_status"]) print_assert_details("xml ParseError", None, None) except xml.etree.ElementTree.ParseError as e: print_assert_details("xml ParseError", None, str(e)) assert False, "failed to parse the xhtml snippet as valid xml"
def post_tick(snapshot_visitor, behaviour_tree): print(u'\n' + ascii_tree(behaviour_tree.root, snapshot_information=snapshot_visitor))
def test_add_node_twice(self, tree_manager, tree): visualization = tree_manager.tree_nodes['visualization'].node with pytest.raises(ValueError): tree_manager.insert_node(visualization, 'wait for goal', 3) assert display.ascii_tree(tree.root) == """root
def test_enable_disable_multiple_nodes(self, tree_manager, tree): ascii_tree = display.ascii_tree(tree.root) assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'cpi marker' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'cpi marker' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'wait for goal' not in [ x.node.name for x in tree_manager.tree_nodes['root'].disabled_children ] assert 'wait for goal' in [ x.node.name for x in tree_manager.tree_nodes['root'].enabled_children ] tree_manager.disable_node('visualization') tree_manager.disable_node('cpi marker') tree_manager.disable_node('wait for goal') assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'visualization' not in display.ascii_tree(tree.root) assert 'cpi marker' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'cpi marker' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'cpi marker' not in display.ascii_tree(tree.root) assert 'wait for goal' in [ x.node.name for x in tree_manager.tree_nodes['root'].disabled_children ] assert 'wait for goal' not in [ x.node.name for x in tree_manager.tree_nodes['root'].enabled_children ] assert 'wait for goal' not in display.ascii_tree(tree.root) tree_manager.enable_node('cpi marker') tree_manager.enable_node('visualization') tree_manager.enable_node('wait for goal') assert display.ascii_tree(tree.root) == ascii_tree assert 'visualization' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'visualization' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'cpi marker' not in [ x.node.name for x in tree_manager.tree_nodes['planning II'].disabled_children ] assert 'cpi marker' in [ x.node.name for x in tree_manager.tree_nodes['planning II'].enabled_children ] assert 'wait for goal' not in [ x.node.name for x in tree_manager.tree_nodes['root'].disabled_children ] assert 'wait for goal' in [ x.node.name for x in tree_manager.tree_nodes['root'].enabled_children ]