feat: add recursive namespace routing and standalone runner polish
- introduce namespace-aware routing with RootParseResult, RouteResult, and InvocationContext - register submenus as FalyxNamespace entries and resolve them through _entry_map - refactor FalyxParser to parse only root options and leave recursive routing to Falyx - add prepare_route, resolve_route, and route dispatch flow to Falyx - update validator and completer to understand namespace entries and route results - unify help/TLDR rendering APIs and add custom_tldr support on Command - tighten Command.resolve_args error handling and parser type validation - improve CommandRunner dependency validation and argv handling - add BottomBar.has_items and improve wrapped executor error messages - add tests for execution options, resolve_args, command runner, and route-aware validation
This commit is contained in:
30
tests/test_execution_option.py
Normal file
30
tests/test_execution_option.py
Normal file
@@ -0,0 +1,30 @@
|
||||
import pytest
|
||||
|
||||
from falyx.execution_option import ExecutionOption
|
||||
|
||||
|
||||
def test_execution_option_accepts_valid_string_values():
|
||||
assert ExecutionOption("summary") == ExecutionOption.SUMMARY
|
||||
assert ExecutionOption("retry") == ExecutionOption.RETRY
|
||||
assert ExecutionOption("confirm") == ExecutionOption.CONFIRM
|
||||
|
||||
|
||||
def test_execution_option_rejects_invalid_string():
|
||||
with pytest.raises(ValueError, match="Invalid ExecutionOption: 'invalid'"):
|
||||
ExecutionOption("invalid")
|
||||
|
||||
|
||||
def test_execution_option_normalizes_case_and_whitespace():
|
||||
assert ExecutionOption(" SUMMARY ") == ExecutionOption.SUMMARY
|
||||
assert ExecutionOption("ReTrY") == ExecutionOption.RETRY
|
||||
assert ExecutionOption("\tconfirm\n") == ExecutionOption.CONFIRM
|
||||
|
||||
|
||||
def test_execution_option_rejects_non_string():
|
||||
with pytest.raises(ValueError, match="Invalid ExecutionOption: 123"):
|
||||
ExecutionOption(123)
|
||||
|
||||
|
||||
def test_execution_option_error_lists_valid_values():
|
||||
with pytest.raises(ValueError, match="Must be one of: summary, retry, confirm"):
|
||||
ExecutionOption("invalid")
|
||||
Reference in New Issue
Block a user