IRC parsing, tokenization, and state handling in C#
1// ReSharper disable StringLiteralTypo
2namespace IRCSharp.Tests.State;
3
4public class Who
5{
6 private readonly Server _server = new("test");
7
8 public Who()
9 {
10 _server.Parse(new Line("001 nickname"));
11 _server.Parse(new Line(":nickname JOIN #chan"));
12 }
13
14 [Test]
15 public async Task WhoResponse()
16 {
17 _server.Parse(new Line("352 * #chan user host server nickname * :0 real"));
18 var user = _server.Users["nickname"];
19
20 await Assert.That(user.UserName).IsEqualTo("user");
21 await Assert.That(_server.HostName).IsEqualTo("host");
22 await Assert.That(user.RealName).IsEqualTo("real");
23
24 await Assert.That(_server.UserName).IsEqualTo(user.UserName);
25 await Assert.That(_server.HostName).IsEqualTo(user.HostName);
26 await Assert.That(_server.RealName).IsEqualTo(user.RealName);
27 }
28
29 [Test]
30 public async Task Whox()
31 {
32 _server.Parse(new Line($"354 * {Server.WhoType} user realip host nickname account :real"));
33 var user = _server.Users["nickname"];
34
35 await Assert.That(user.UserName).IsEqualTo("user");
36 await Assert.That(user.HostName).IsEqualTo("host");
37 await Assert.That(user.RealName).IsEqualTo("real");
38 await Assert.That(user.Account).IsEqualTo("account");
39
40 await Assert.That(_server.UserName).IsEqualTo(user.UserName);
41 await Assert.That(_server.HostName).IsEqualTo(user.HostName);
42 await Assert.That(_server.RealName).IsEqualTo(user.RealName);
43 await Assert.That(_server.Account).IsEqualTo(user.Account);
44 }
45
46 [Test]
47 public async Task WhoxNoAccount()
48 {
49 _server.Parse(new Line($"354 * {Server.WhoType} user realip host nickname 0 :real"));
50 var user = _server.Users["nickname"];
51
52 await Assert.That(user.Account).IsNull();
53 await Assert.That(_server.Account).IsEqualTo(user.Account);
54 }
55}