Files
MoviePilot/tests/test_runtime_manager_identity.py
DDSRem 2de976f6b3 Merge pull request #7050 from DDSRem-Dev/codex-comment-migration
docs: 统一全项目中文注释和结构化契约说明
2026-10-17 19:26:29 +08:00

56 lines
1.9 KiB
Python

"""
验证运行管理器实例身份与生命周期共享。
"""
from app.foundation.singleton import Singleton
from app.runtime.events import EventManager, eventmanager
from app.runtime.extensions.module.manager import ModuleManager
from app.runtime.extensions.plugin.manager import PluginManager
# 插件 SDK 动态导出管理器,必须从公开入口导入才能比较单例身份。
from app.sdk.plugin import ModuleManager as SdkModuleManager # pylint: disable=no-name-in-module
from app.sdk.plugin import PluginManager as SdkPluginManager # pylint: disable=no-name-in-module
def _singleton_key(manager_type: type) -> tuple:
"""
返回无参数 Singleton 管理器使用的缓存键。
"""
return manager_type, (), frozenset()
def test_event_manager_global_and_constructor_share_identity():
"""
事件全局对象与公开构造入口必须指向同一单例。
"""
assert EventManager() is eventmanager
assert EventManager() is EventManager()
def test_module_manager_sdk_and_runtime_share_identity(monkeypatch):
"""
模块管理器 SDK 与运行时入口必须解析到同一单例对象。
"""
instance = object.__new__(ModuleManager)
instances = dict(Singleton._instances)
instances[_singleton_key(ModuleManager)] = instance
monkeypatch.setattr(Singleton, "_instances", instances)
assert SdkModuleManager is ModuleManager
assert SdkModuleManager() is instance
assert ModuleManager() is instance
def test_plugin_manager_sdk_and_runtime_share_identity(monkeypatch):
"""
插件管理器 SDK 与运行时入口必须解析到同一单例对象。
"""
instance = object.__new__(PluginManager)
instances = dict(Singleton._instances)
instances[_singleton_key(PluginManager)] = instance
monkeypatch.setattr(Singleton, "_instances", instances)
assert SdkPluginManager is PluginManager
assert SdkPluginManager() is instance
assert PluginManager() is instance