Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions launch/test/launch/frontend/test_substitutions.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,3 +367,13 @@ def test_execute_process_parse_cmd_line() -> None:
cmd_subs = ExecuteProcess._parse_cmdline(cmd_text, parser)
cmd_performed = expand_cmd_subs(cmd_subs)
assert cmd_performed == ['that', 'this']


def test_eval_subst_submodule():
# Case where a submodule is used
subst = parse_substitution(
r'$(eval "os.path.exists(\'/\')" "os")')
assert len(subst) == 1
expr = subst[0]
assert isinstance(expr, PythonExpression)
assert expr.perform(LaunchContext())
23 changes: 23 additions & 0 deletions launch/test/launch/substitutions/test_python_expression.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,26 @@ def test_python_substitution_two_modules():
# Test the describe() method
assert subst.describe() ==\
"PythonExpr('math.isfinite(sys.getrefcount(str(\"hello world!\")))', ['sys', 'math'])"


def test_python_substitution_submodule():
"""Evaluation of submodules within a package."""
python_modules = ['launch']
lc = LaunchContext()
expr = (
'not launch.utilities.is_a_subclass('
' launch.substitutions.PythonExpression, '
' launch.substitutions.SubstitutionFailure'
')'
)
subst = PythonExpression([expr], python_modules)
try:
result = subst.perform(lc)
except NameError:
pytest.fail('Failed to evaluate PythonExpression containing submodules.'
'There may be a missing import.')
except SubstitutionFailure:
pytest.fail('Failed to evaluate PythonExpression containing submodules.')

# The expression should evaluate to True
assert result