| """Tests for _coalesce_session_name_args β multi-word session name merging.""" |
|
|
| import pytest |
| from hermes_cli.main import _coalesce_session_name_args |
|
|
|
|
| class TestCoalesceSessionNameArgs: |
| """Ensure unquoted multi-word session names are merged into one token.""" |
|
|
| |
|
|
| def test_continue_multiword_unquoted(self): |
| """hermes -c Pokemon Agent Dev β -c 'Pokemon Agent Dev'""" |
| assert _coalesce_session_name_args( |
| ["-c", "Pokemon", "Agent", "Dev"] |
| ) == ["-c", "Pokemon Agent Dev"] |
|
|
| def test_continue_long_form_multiword(self): |
| """hermes --continue Pokemon Agent Dev""" |
| assert _coalesce_session_name_args( |
| ["--continue", "Pokemon", "Agent", "Dev"] |
| ) == ["--continue", "Pokemon Agent Dev"] |
|
|
| def test_continue_single_word(self): |
| """hermes -c MyProject (no merging needed)""" |
| assert _coalesce_session_name_args(["-c", "MyProject"]) == [ |
| "-c", |
| "MyProject", |
| ] |
|
|
| def test_continue_already_quoted(self): |
| """hermes -c 'Pokemon Agent Dev' (shell already merged)""" |
| assert _coalesce_session_name_args( |
| ["-c", "Pokemon Agent Dev"] |
| ) == ["-c", "Pokemon Agent Dev"] |
|
|
| def test_continue_bare_flag(self): |
| """hermes -c (no name β means 'continue latest')""" |
| assert _coalesce_session_name_args(["-c"]) == ["-c"] |
|
|
| def test_continue_followed_by_flag(self): |
| """hermes -c -w (no name consumed, -w stays separate)""" |
| assert _coalesce_session_name_args(["-c", "-w"]) == ["-c", "-w"] |
|
|
| def test_continue_multiword_then_flag(self): |
| """hermes -c my project -w""" |
| assert _coalesce_session_name_args( |
| ["-c", "my", "project", "-w"] |
| ) == ["-c", "my project", "-w"] |
|
|
| def test_continue_multiword_then_subcommand(self): |
| """hermes -c my project chat -q hello""" |
| assert _coalesce_session_name_args( |
| ["-c", "my", "project", "chat", "-q", "hello"] |
| ) == ["-c", "my project", "chat", "-q", "hello"] |
|
|
| |
|
|
| def test_resume_multiword(self): |
| """hermes -r My Session Name""" |
| assert _coalesce_session_name_args( |
| ["-r", "My", "Session", "Name"] |
| ) == ["-r", "My Session Name"] |
|
|
| def test_resume_long_form_multiword(self): |
| """hermes --resume My Session Name""" |
| assert _coalesce_session_name_args( |
| ["--resume", "My", "Session", "Name"] |
| ) == ["--resume", "My Session Name"] |
|
|
| def test_resume_multiword_then_flag(self): |
| """hermes -r My Session -w""" |
| assert _coalesce_session_name_args( |
| ["-r", "My", "Session", "-w"] |
| ) == ["-r", "My Session", "-w"] |
|
|
| |
|
|
| def test_worktree_and_continue_multiword(self): |
| """hermes -w -c Pokemon Agent Dev (the original failing case)""" |
| assert _coalesce_session_name_args( |
| ["-w", "-c", "Pokemon", "Agent", "Dev"] |
| ) == ["-w", "-c", "Pokemon Agent Dev"] |
|
|
| def test_continue_multiword_and_worktree(self): |
| """hermes -c Pokemon Agent Dev -w (order reversed)""" |
| assert _coalesce_session_name_args( |
| ["-c", "Pokemon", "Agent", "Dev", "-w"] |
| ) == ["-c", "Pokemon Agent Dev", "-w"] |
|
|
| |
|
|
| def test_no_session_flags_passthrough(self): |
| """hermes -w chat -q hello (nothing to merge)""" |
| result = _coalesce_session_name_args(["-w", "chat", "-q", "hello"]) |
| assert result == ["-w", "chat", "-q", "hello"] |
|
|
| def test_empty_argv(self): |
| assert _coalesce_session_name_args([]) == [] |
|
|
| |
|
|
| def test_stops_at_sessions_subcommand(self): |
| """hermes -c my project sessions list β stops before 'sessions'""" |
| assert _coalesce_session_name_args( |
| ["-c", "my", "project", "sessions", "list"] |
| ) == ["-c", "my project", "sessions", "list"] |
|
|
| def test_stops_at_setup_subcommand(self): |
| """hermes -c my setup β 'setup' is a subcommand, not part of name""" |
| assert _coalesce_session_name_args( |
| ["-c", "my", "setup"] |
| ) == ["-c", "my", "setup"] |
|
|