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