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