irctest/irctest/server_tests/channel.py

62 lines
2.1 KiB
Python

import pytest
from irctest import cases, client_mock, runner
class TestChannelCaseSensitivity(cases.BaseServerTestCase):
@pytest.mark.parametrize(
"casemapping,name1,name2",
[
("ascii", "#Foo", "#foo"),
("rfc1459", "#Foo", "#foo"),
("rfc1459", "#F]|oo{", "#f}\\oo["),
("rfc1459", "#F}o\\o[", "#f]o|o{"),
],
)
@cases.mark_specifications("RFC1459", "RFC2812", strict=True)
def testChannelsEquivalent(self, casemapping, name1, name2):
self.connectClient("foo")
self.connectClient("bar")
if self.server_support["CASEMAPPING"] != casemapping:
raise runner.NotImplementedByController(
"Casemapping {} not implemented".format(casemapping)
)
self.joinClient(1, name1)
self.joinClient(2, name2)
try:
m = self.getMessage(1)
self.assertMessageMatch(m, command="JOIN", nick="bar")
except client_mock.NoMessageException:
raise AssertionError(
"Channel names {} and {} are not equivalent.".format(name1, name2)
)
@pytest.mark.parametrize(
"casemapping,name1,name2",
[
("ascii", "#Foo", "#fooa"),
("rfc1459", "#Foo", "#fooa"),
],
)
@cases.mark_specifications("RFC1459", "RFC2812", strict=True)
def testChannelsNotEquivalent(self, casemapping, name1, name2):
self.connectClient("foo")
self.connectClient("bar")
if self.server_support["CASEMAPPING"] != casemapping:
raise runner.NotImplementedByController(
"Casemapping {} not implemented".format(casemapping)
)
self.joinClient(1, name1)
self.joinClient(2, name2)
try:
m = self.getMessage(1)
except client_mock.NoMessageException:
pass
else:
self.assertMessageMatch(
m, command="JOIN", nick="bar"
) # This should always be true
raise AssertionError(
"Channel names {} and {} are equivalent.".format(name1, name2)
)