diff --git a/irctest/cases.py b/irctest/cases.py index dedcedf..ea3f06d 100644 --- a/irctest/cases.py +++ b/irctest/cases.py @@ -57,6 +57,7 @@ CHANNEL_JOIN_FAIL_NUMERICS = frozenset( # typevar for decorators TCallable = TypeVar("TCallable", bound=Callable) +TClass = TypeVar("TClass", bound=Type) # typevar for the client name used by tests (usually int or str) TClientName = TypeVar("TClientName", bound=Union[Hashable, int]) @@ -716,6 +717,11 @@ class OptionalityHelper(Generic[TController]): return newf +def mark_services(cls: TClass) -> TClass: + cls.run_services = True + return pytest.mark.services(cls) # type: ignore + + def mark_specifications( *specifications_str: str, deprecated: bool = False, strict: bool = False ) -> Callable[[TCallable], TCallable]: diff --git a/irctest/server_tests/test_account_tag.py b/irctest/server_tests/test_account_tag.py index c107807..ea909db 100644 --- a/irctest/server_tests/test_account_tag.py +++ b/irctest/server_tests/test_account_tag.py @@ -5,9 +5,8 @@ from irctest import cases +@cases.mark_services class AccountTagTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): - run_services = True - def connectRegisteredClient(self, nick): self.addClient() self.sendLine(2, "CAP LS 302") diff --git a/irctest/server_tests/test_bouncer.py b/irctest/server_tests/test_bouncer.py index 6d60bd2..c22e065 100644 --- a/irctest/server_tests/test_bouncer.py +++ b/irctest/server_tests/test_bouncer.py @@ -4,9 +4,8 @@ from irctest.numerics import ERR_NICKNAMEINUSE, RPL_WELCOME from irctest.patma import ANYSTR, StrRe +@cases.mark_services class Bouncer(cases.BaseServerTestCase): - run_services = True - @cases.mark_specifications("Ergo") def testBouncer(self): """Test basic bouncer functionality.""" diff --git a/irctest/server_tests/test_cap.py b/irctest/server_tests/test_cap.py index aaa9860..7a7b74e 100644 --- a/irctest/server_tests/test_cap.py +++ b/irctest/server_tests/test_cap.py @@ -146,7 +146,7 @@ class CapTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): enabled_caps = set(cap_list.params[2].split()) enabled_caps.discard("cap-notify") # implicitly added by some impls self.assertEqual(enabled_caps, {cap1, cap2}) - self.assertIn("time", cap_list.tags) + self.assertIn("time", cap_list.tags, cap_list) # remove the server-time cap self.sendLine(1, f"CAP REQ :-{cap2}") diff --git a/irctest/server_tests/test_channel_operations.py b/irctest/server_tests/test_channel_operations.py index ca0977a..8415441 100644 --- a/irctest/server_tests/test_channel_operations.py +++ b/irctest/server_tests/test_channel_operations.py @@ -1180,9 +1180,8 @@ class ModeratedMode(cases.BaseServerTestCase): ) +@cases.mark_services class RegisteredOnlySpeakMode(cases.BaseServerTestCase): - run_services = True - @cases.mark_specifications("Ergo") def testRegisteredOnlySpeakMode(self): self.controller.registerUser(self, "evan", "sesame") diff --git a/irctest/server_tests/test_chathistory.py b/irctest/server_tests/test_chathistory.py index 9108ce1..2f620df 100644 --- a/irctest/server_tests/test_chathistory.py +++ b/irctest/server_tests/test_chathistory.py @@ -33,9 +33,8 @@ def validate_chathistory_batch(msgs): return result +@cases.mark_services class ChathistoryTestCase(cases.BaseServerTestCase): - run_services = True - @staticmethod def config() -> cases.TestCaseControllerConfig: return cases.TestCaseControllerConfig(chathistory=True) diff --git a/irctest/server_tests/test_confusables.py b/irctest/server_tests/test_confusables.py index bfe55c6..223d84b 100644 --- a/irctest/server_tests/test_confusables.py +++ b/irctest/server_tests/test_confusables.py @@ -2,9 +2,8 @@ from irctest import cases from irctest.numerics import ERR_NICKNAMEINUSE, RPL_WELCOME +@cases.mark_services class ConfusablesTestCase(cases.BaseServerTestCase): - run_services = True - @staticmethod def config() -> cases.TestCaseControllerConfig: return cases.TestCaseControllerConfig( diff --git a/irctest/server_tests/test_extended_join.py b/irctest/server_tests/test_extended_join.py index 69eea8a..7adf811 100644 --- a/irctest/server_tests/test_extended_join.py +++ b/irctest/server_tests/test_extended_join.py @@ -5,9 +5,8 @@ from irctest import cases +@cases.mark_services class MetadataTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): - run_services = True - def connectRegisteredClient(self, nick): self.addClient() self.sendLine(2, "CAP LS 302") diff --git a/irctest/server_tests/test_sasl.py b/irctest/server_tests/test_sasl.py index b4b37c3..9dee3e2 100644 --- a/irctest/server_tests/test_sasl.py +++ b/irctest/server_tests/test_sasl.py @@ -4,16 +4,14 @@ from irctest import cases from irctest.patma import ANYSTR +@cases.mark_services class RegistrationTestCase(cases.BaseServerTestCase): - run_services = True - def testRegistration(self): self.controller.registerUser(self, "testuser", "mypassword") +@cases.mark_services class SaslTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): - run_services = True - @cases.mark_specifications("IRCv3") @cases.OptionalityHelper.skipUnlessHasMechanism("PLAIN") def testPlain(self): diff --git a/irctest/server_tests/test_user_commands.py b/irctest/server_tests/test_user_commands.py index abfd5a3..068c9c0 100644 --- a/irctest/server_tests/test_user_commands.py +++ b/irctest/server_tests/test_user_commands.py @@ -13,9 +13,8 @@ from irctest.numerics import ( ) +@cases.mark_services class WhoisTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): - run_services = True - @cases.mark_specifications("RFC2812") def testWhoisUser(self): """Test basic WHOIS behavior""" diff --git a/irctest/server_tests/test_znc_playback.py b/irctest/server_tests/test_znc_playback.py index a742ecc..a5ac61f 100644 --- a/irctest/server_tests/test_znc_playback.py +++ b/irctest/server_tests/test_znc_playback.py @@ -13,9 +13,8 @@ def extract_playback_privmsgs(messages): return result +@cases.mark_services class ZncPlaybackTestCase(cases.BaseServerTestCase): - run_services = True - @staticmethod def config() -> cases.TestCaseControllerConfig: return cases.TestCaseControllerConfig(chathistory=True) diff --git a/pytest.ini b/pytest.ini index 35b2457..9eb742d 100644 --- a/pytest.ini +++ b/pytest.ini @@ -11,6 +11,7 @@ markers = # misc marks strict deprecated + services # capabilities account-tag