mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-04-28 19:40:54 +00:00
Phase 7: Directory restructuring (messaging/ and tests/)
- Create messaging/platforms/ (base, discord, telegram, factory) - Create messaging/rendering/ (discord_markdown, telegram_markdown) - Create messaging/trees/ (data, repository, processor, queue_manager) - Organize tests/ into api/, providers/, messaging/, cli/, config/ - Add backward-compatible re-exports at old locations - Update handler.py and test_messaging_factory.py imports - Fix Telegram type hints for TELEGRAM_AVAILABLE=False case - Fix Python 3 except syntax in discord_markdown Co-authored-by: Ali Khokhar <alishahryar2@gmail.com>
This commit is contained in:
parent
38a7980546
commit
4b4f87515d
76 changed files with 3294 additions and 3124 deletions
78
tests/cli/test_process_registry.py
Normal file
78
tests/cli/test_process_registry.py
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
import os
|
||||
from unittest.mock import patch
|
||||
|
||||
|
||||
def test_process_registry_register_pid_zero_noop():
|
||||
"""register_pid(0) is a no-op (early return)."""
|
||||
from cli import process_registry as pr
|
||||
|
||||
before = len(pr._pids)
|
||||
pr.register_pid(0)
|
||||
assert len(pr._pids) == before
|
||||
|
||||
|
||||
def test_process_registry_unregister_pid_zero_noop():
|
||||
"""unregister_pid(0) is a no-op."""
|
||||
from cli import process_registry as pr
|
||||
|
||||
pr.register_pid(99999)
|
||||
pr.unregister_pid(0)
|
||||
assert 99999 in pr._pids
|
||||
pr.unregister_pid(99999)
|
||||
|
||||
|
||||
def test_process_registry_ensure_atexit_idempotent():
|
||||
"""Second call to ensure_atexit_registered is idempotent."""
|
||||
from cli import process_registry as pr
|
||||
|
||||
pr.ensure_atexit_registered()
|
||||
pr.ensure_atexit_registered()
|
||||
# Should not raise; atexit handler registered once
|
||||
|
||||
|
||||
def test_process_registry_kill_all_exception_logged_no_raise(monkeypatch):
|
||||
"""Exception in os.kill/taskkill is logged but does not raise."""
|
||||
from cli import process_registry as pr
|
||||
|
||||
monkeypatch.setattr(pr, "_pids", {99999})
|
||||
monkeypatch.setattr(os, "name", "posix", raising=False)
|
||||
|
||||
def _kill_raises(pid, sig):
|
||||
raise ProcessLookupError("no such process")
|
||||
|
||||
with patch("os.kill", _kill_raises):
|
||||
pr.kill_all_best_effort()
|
||||
# Should not raise
|
||||
|
||||
|
||||
def test_process_registry_register_unregister_does_not_crash():
|
||||
from cli import process_registry as pr
|
||||
|
||||
pr.register_pid(12345)
|
||||
pr.unregister_pid(12345)
|
||||
|
||||
|
||||
def test_process_registry_kill_all_best_effort_empty_is_noop():
|
||||
from cli import process_registry as pr
|
||||
|
||||
# Ensure no exception on empty set
|
||||
pr.kill_all_best_effort()
|
||||
|
||||
|
||||
def test_process_registry_kill_all_best_effort_windows_noop_when_taskkill_missing(
|
||||
monkeypatch,
|
||||
):
|
||||
from cli import process_registry as pr
|
||||
|
||||
# Simulate windows path in a stable way.
|
||||
monkeypatch.setattr(pr, "_pids", {12345})
|
||||
monkeypatch.setattr(os, "name", "nt", raising=False)
|
||||
|
||||
# If taskkill isn't callable, we still should not crash.
|
||||
import subprocess
|
||||
|
||||
def _boom(*args, **kwargs):
|
||||
raise FileNotFoundError("taskkill missing")
|
||||
|
||||
monkeypatch.setattr(subprocess, "run", _boom)
|
||||
pr.kill_all_best_effort()
|
||||
Loading…
Add table
Add a link
Reference in a new issue