Skip to content

Commit

Permalink
Add test and docstrings
Browse files Browse the repository at this point in the history
Signed-off-by: Emerson Knapp <emerson.b.knapp@gmail.com>
  • Loading branch information
emersonknapp committed Feb 26, 2020
1 parent 8488870 commit f11d96f
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
8 changes: 8 additions & 0 deletions ros2node/ros2node/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ def parse_node_name(node_name):


def annotate_duplicate_nodes(node_names: List[NodeName]) -> Tuple[bool, List[str]]:
"""
Annotate a list of node names with a warnings if names are not unique.
:param node_names: list of all NodeNames observed in the graph
:return Tuple containing:
bool of whether any duplicate nodes were found
list of all names as strings, with or without annotations, for printing
"""
annotation_string = ' (non-unique name)'

any_duplicates = False
Expand Down
3 changes: 2 additions & 1 deletion ros2node/ros2node/verb/list.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,6 @@ def main(self, *, args):
elif node_names:
has_duplicates, sorted_names = annotate_duplicate_nodes(node_names)
if has_duplicates:
print('# WARNING: There are nodes in the graph that share a name')
print('# WARNING: Be aware that are nodes in the graph that share an exact name, '
'this can have unintended side effects.')
print(*sorted_names, sep='\n')
27 changes: 27 additions & 0 deletions ros2node/test/test_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from ros2node.api import annotate_duplicate_nodes
from ros2node.api import NodeName
from ros2node.api import parse_node_name


Expand All @@ -34,3 +36,28 @@ def test_parse_node_name():
assert name.full_name == '/ns/talker'
assert name.namespace == '/ns'
assert name.name == 'talker'


def test_duplicate_names():
all_unique_names = [
NodeName('foo', 'ns_foo', 'ns_foo/foo'),
NodeName('bar', 'ns_foo', 'ns_foo/bar'),
]

any_duplicates, printable_names = annotate_duplicate_nodes(all_unique_names)
assert not any_duplicates
assert printable_names == [
'ns_foo/bar',
'ns_foo/foo',
]

all_unique_names = [
NodeName('foo', 'ns_foo', 'ns_foo/foo'),
NodeName('foo', 'ns_foo', 'ns_foo/foo'),
]
any_duplicates, printable_names = annotate_duplicate_nodes(all_unique_names)
assert any_duplicates
assert printable_names == [
'ns_foo/foo (non-unique name)',
'ns_foo/foo (non-unique name)',
]

0 comments on commit f11d96f

Please sign in to comment.