IRC parsing, tokenization, and state handling in C#
1// ReSharper disable IdentifierTypo
2// ReSharper disable StringLiteralTypo
3
4namespace IRCSharp.Tests.State;
5
6public class Casemap
7{
8 [Test]
9 public async Task Rfc1459()
10 {
11 var lower = IRCStates.Casemap.CaseFold(IRCStates.Casemap.CaseMapping.Rfc1459, @"ÀTEST[]~\");
12 await Assert.That(lower).IsEqualTo("Àtest{}^|");
13 }
14
15 [Test]
16 public async Task Ascii()
17 {
18 var lower = IRCStates.Casemap.CaseFold(IRCStates.Casemap.CaseMapping.Ascii, @"ÀTEST[]~\");
19 await Assert.That(lower).IsEqualTo(@"Àtest[]~\");
20 }
21
22 [Test]
23 public async Task CommandJoin()
24 {
25 var server = new Server("test");
26 server.Parse(new Line("001 nickname"));
27 server.Parse(new Line(":Nickname JOIN #Chan"));
28 server.Parse(new Line(":Other JOIN #Chan"));
29
30 await Assert.That(server.Users).ContainsKey("nickname");
31 await Assert.That(server.Users).ContainsKey("nickname");
32 await Assert.That(server.Users).DoesNotContainKey("Nickname");
33 await Assert.That(server.Users).ContainsKey("other");
34 await Assert.That(server.Users).DoesNotContainKey("Other");
35 await Assert.That(server.Channels).ContainsKey("#chan");
36 await Assert.That(server.Channels).DoesNotContainKey("#Chan");
37
38 var channel = server.Channels["#chan"];
39 await Assert.That(channel.Name).IsEqualTo("#Chan");
40 }
41
42 [Test]
43 public async Task CommandNick()
44 {
45 var server = new Server("test");
46 server.Parse(new Line("001 nickname"));
47 server.Parse(new Line(":nickname JOIN #chan"));
48 var user = server.Users["nickname"];
49 server.Parse(new Line(":nickname NICK NewNickname"));
50 await Assert.That(server.Users).HasCount(1);
51 await Assert.That(server.Users).ContainsKey("newnickname");
52 await Assert.That(user.NickName).IsEqualTo("NewNickname");
53 await Assert.That(user.NickNameLower).IsEqualTo("newnickname");
54 await Assert.That(server.NickName).IsEqualTo("NewNickname");
55 await Assert.That(server.NickNameLower).IsEqualTo("newnickname");
56 }
57}