mirror of
https://github.com/progval/irctest.git
synced 2025-04-04 22:39:50 +00:00
Use a new 'magic' class AnyStr instead of Ellipsis for pattern-matching messages.
This commit is contained in:
@ -65,6 +65,13 @@ TController = TypeVar("TController", bound=basecontrollers._BaseController)
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
class AnyStr:
|
||||
"""Used as a wildcard when matching message arguments
|
||||
(see assertMessageMatch and listMatch)"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class ChannelJoinException(Exception):
|
||||
def __init__(self, code: str, params: List[str]):
|
||||
super().__init__(f"Failed to join channel ({code}): {params}")
|
||||
@ -123,7 +130,7 @@ class _IrcTestCase(unittest.TestCase, Generic[TController]):
|
||||
def messageDiffers(
|
||||
self,
|
||||
msg: Message,
|
||||
params: Optional[List[Any]] = None,
|
||||
params: Optional[List[Union[str, Type[AnyStr]]]] = None,
|
||||
target: Optional[str] = None,
|
||||
nick: Optional[str] = None,
|
||||
fail_msg: Optional[str] = None,
|
||||
@ -163,14 +170,16 @@ class _IrcTestCase(unittest.TestCase, Generic[TController]):
|
||||
|
||||
return None
|
||||
|
||||
def listMatch(self, got: List[str], expected: List[Any]) -> bool:
|
||||
def listMatch(
|
||||
self, got: List[str], expected: List[Union[str, Type[AnyStr]]]
|
||||
) -> bool:
|
||||
"""Returns True iff the list are equal.
|
||||
The ellipsis (aka. "..." aka triple dots) can be used on the 'expected'
|
||||
side as a wildcard, matching any *single* value."""
|
||||
if len(got) != len(expected):
|
||||
return False
|
||||
for (got_value, expected_value) in zip(got, expected):
|
||||
if expected_value is Ellipsis:
|
||||
if expected_value is AnyStr:
|
||||
# wildcard
|
||||
continue
|
||||
if got_value != expected_value:
|
||||
|
@ -1,4 +1,5 @@
|
||||
from irctest import cases
|
||||
from irctest.cases import AnyStr
|
||||
from irctest.runner import CapabilityNotSupported, ImplementationChoice
|
||||
|
||||
|
||||
@ -39,7 +40,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.assertMessageMatch(
|
||||
m,
|
||||
command="CAP",
|
||||
params=[..., "NAK", "foo"],
|
||||
params=[AnyStr, "NAK", "foo"],
|
||||
fail_msg="Expected CAP NAK after requesting non-existing "
|
||||
"capability, got {msg}.",
|
||||
)
|
||||
@ -66,7 +67,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.assertMessageMatch(
|
||||
m,
|
||||
command="CAP",
|
||||
params=[..., "NAK", "foo qux bar baz qux quux"],
|
||||
params=[AnyStr, "NAK", "foo qux bar baz qux quux"],
|
||||
fail_msg="Expected “CAP NAK :foo qux bar baz qux quux” after "
|
||||
"sending “CAP REQ :foo qux bar baz qux quux”, but got {msg}.",
|
||||
)
|
||||
@ -85,7 +86,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.assertMessageMatch(
|
||||
m,
|
||||
command="CAP",
|
||||
params=[..., "NAK", "foo multi-prefix bar"],
|
||||
params=[AnyStr, "NAK", "foo multi-prefix bar"],
|
||||
fail_msg="Expected “CAP NAK :foo multi-prefix bar” after "
|
||||
"sending “CAP REQ :foo multi-prefix bar”, but got {msg}.",
|
||||
)
|
||||
@ -94,7 +95,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.assertMessageMatch(
|
||||
m,
|
||||
command="CAP",
|
||||
params=[..., "NAK", "multi-prefix bar"],
|
||||
params=[AnyStr, "NAK", "multi-prefix bar"],
|
||||
fail_msg="Expected “CAP NAK :multi-prefix bar” after "
|
||||
"sending “CAP REQ :multi-prefix bar”, but got {msg}.",
|
||||
)
|
||||
@ -103,7 +104,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.assertMessageMatch(
|
||||
m,
|
||||
command="CAP",
|
||||
params=[..., "NAK", "foo multi-prefix"],
|
||||
params=[AnyStr, "NAK", "foo multi-prefix"],
|
||||
fail_msg="Expected “CAP NAK :foo multi-prefix” after "
|
||||
"sending “CAP REQ :foo multi-prefix”, but got {msg}.",
|
||||
)
|
||||
@ -113,7 +114,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.assertMessageMatch(
|
||||
m,
|
||||
command="CAP",
|
||||
params=[..., "ACK", "multi-prefix"],
|
||||
params=[AnyStr, "ACK", "multi-prefix"],
|
||||
fail_msg="Expected “CAP ACK :multi-prefix” after "
|
||||
"sending “CAP REQ :multi-prefix”, but got {msg}.",
|
||||
)
|
||||
@ -133,7 +134,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.sendLine(1, "user user 0 * realname")
|
||||
self.sendLine(1, "CAP END")
|
||||
m = self.getRegistrationMessage(1)
|
||||
self.assertMessageMatch(m, command="CAP", params=[..., "ACK", ...])
|
||||
self.assertMessageMatch(m, command="CAP", params=[AnyStr, "ACK", AnyStr])
|
||||
self.assertEqual(
|
||||
set(m.params[2].split()), {cap1, cap2}, "Didn't ACK both REQed caps"
|
||||
)
|
||||
@ -151,8 +152,10 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper):
|
||||
self.sendLine(1, f"CAP REQ :-{cap2}")
|
||||
m = self.getMessage(1)
|
||||
# Must be either ACK or NAK
|
||||
if self.messageDiffers(m, command="CAP", params=[..., "ACK", f"-{cap2}"]):
|
||||
self.assertMessageMatch(m, command="CAP", params=[..., "NAK", f"-{cap2}"])
|
||||
if self.messageDiffers(m, command="CAP", params=[AnyStr, "ACK", f"-{cap2}"]):
|
||||
self.assertMessageMatch(
|
||||
m, command="CAP", params=[AnyStr, "NAK", f"-{cap2}"]
|
||||
)
|
||||
raise ImplementationChoice(f"Does not support CAP REQ -{cap2}")
|
||||
|
||||
# server-time should be disabled
|
||||
|
Reference in New Issue
Block a user