mirror of
https://github.com/Alishahryar1/free-claude-code.git
synced 2026-04-28 11:30:03 +00:00
- 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>
78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
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()
|