Skip to content

Commit 0111a95

Browse files
committed
test: 重构测试
1 parent 0f24749 commit 0111a95

File tree

11 files changed

+182
-293
lines changed

11 files changed

+182
-293
lines changed

alicebot/plugin.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,7 @@ def __init_subclass__(
110110

111111
if not hasattr(cls, "Config") and config is not None:
112112
cls.Config = config
113-
if (
114-
cls.__init_state__ is cast(Plugin[Any, Any, Any], Plugin).__init_state__ # type: ignore[comparison-overlap]
115-
and init_state is not None
116-
):
113+
if cls.__init_state__ is Plugin.__init_state__ and init_state is not None:
117114
cls.__init_state__ = lambda _: init_state # type: ignore
118115

119116
@final

tests/bad_plugins/plugin_error_ext.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
from typing import Any
2-
31
from alicebot import Plugin
42

53

6-
class Plugin1(Plugin[Any, None, None]):
4+
class Plugin1(Plugin):
75
async def handle(self) -> None:
86
pass
97

tests/fake_adapter.py

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
import inspect
22
from collections.abc import Awaitable
3-
from typing import Any, Callable, ClassVar, Optional, Union
3+
from typing import Any, Callable, Generic, Optional, Union
44
from typing_extensions import override
55

66
from anyio.lowlevel import checkpoint
77

88
from alicebot import Adapter, Event, MessageEvent
9+
from alicebot.plugin import Plugin
10+
from alicebot.typing import ConfigT, StateT
11+
12+
EventFactory = Callable[
13+
["FakeAdapter"],
14+
Union[
15+
Optional[Event["FakeAdapter"]],
16+
Awaitable[Optional[Event["FakeAdapter"]]],
17+
],
18+
]
919

1020

1121
class FakeAdapter(Adapter[Event[Any], None]):
1222
"""用于测试的适配器。"""
1323

14-
EventFactory = Callable[
15-
["FakeAdapter"],
16-
Union[
17-
Optional[Event["FakeAdapter"]],
18-
Awaitable[Optional[Event["FakeAdapter"]]],
19-
],
20-
]
21-
2224
name: str = "fake_adapter"
23-
event_factories: ClassVar[tuple[EventFactory, ...]] = ()
24-
handle_get: ClassVar[bool] = True
25+
event_factories: tuple[EventFactory, ...] = ()
26+
handle_get: bool = True
2527

2628
@override
2729
async def run(self) -> None:
@@ -42,10 +44,15 @@ async def run(self) -> None:
4244

4345
self.bot.exit()
4446

45-
@classmethod
46-
def set_event_factories(cls, *event_factories: EventFactory) -> None:
47-
"""设置适配器运行后将要产生的事件。"""
48-
cls.event_factories = event_factories
47+
48+
def fake_adapter_class_factory(
49+
*event_factories: EventFactory, handle_get: bool = True
50+
) -> type[FakeAdapter]:
51+
return type(
52+
"FakeAdapter",
53+
(FakeAdapter,),
54+
{"event_factories": event_factories, "handle_get": handle_get},
55+
)
4956

5057

5158
class FakeMessageEvent(MessageEvent[FakeAdapter]):
@@ -62,3 +69,22 @@ def get_plain_text(self) -> str:
6269
@override
6370
async def reply(self, message: str) -> None:
6471
pass
72+
73+
74+
def fake_message_event_factor(
75+
adapter: FakeAdapter, message: str = "test"
76+
) -> FakeMessageEvent:
77+
return FakeMessageEvent(adapter=adapter, type="message", message=message)
78+
79+
80+
class BaseTestPlugin(
81+
Generic[StateT, ConfigT],
82+
Plugin[FakeMessageEvent, StateT, ConfigT],
83+
):
84+
@override
85+
async def handle(self) -> None:
86+
pass
87+
88+
@override
89+
async def rule(self) -> bool:
90+
return isinstance(self.event, FakeMessageEvent)

tests/plugins/plugin1.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
from typing import Any
21
from typing_extensions import override
32

43
from alicebot import Plugin
54

65

7-
class Plugin1(Plugin[Any, None, None]):
6+
class Plugin1(Plugin):
87
@override
98
async def handle(self) -> None:
109
pass

tests/plugins/plugin2/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
from typing import Any
21
from typing_extensions import override
32

43
from alicebot import Plugin
54

65

7-
class Plugin2(Plugin[Any, None, None]):
6+
class Plugin2(Plugin):
87
@override
98
async def handle(self) -> None:
109
pass

tests/test_hook.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Callable
22

3-
from fake_adapter import FakeAdapter, FakeMessageEvent
3+
from fake_adapter import fake_adapter_class_factory, fake_message_event_factor
44

55
from alicebot import Adapter, Bot, Event
66

@@ -37,10 +37,7 @@ async def event_preprocessor_hook(_event: Event[Any]) -> None:
3737
async def event_postprocessor_hook(_event: Event[Any]) -> None:
3838
hook_call_list.append(event_postprocessor_hook)
3939

40-
FakeAdapter.set_event_factories(
41-
lambda self: FakeMessageEvent(adapter=self, type="message")
42-
)
43-
bot.load_adapters(FakeAdapter)
40+
bot.load_adapters(fake_adapter_class_factory(fake_message_event_factor))
4441
bot.run()
4542

4643
assert hook_call_list == [

0 commit comments

Comments
 (0)