IRC parsing, tokenization, and state handling in C#
1namespace IRCSharp.Tests.Tokenization;
2
3public class Hostmask
4{
5 [Test]
6 public async Task FullHostmask()
7 {
8 var hostmask = new IRCTokens.Hostmask("nick!user@host");
9 await Assert.That(hostmask.NickName).IsEqualTo("nick");
10 await Assert.That(hostmask.UserName).IsEqualTo("user");
11 await Assert.That(hostmask.HostName).IsEqualTo("host");
12 }
13
14 [Test]
15 public async Task NoHostName()
16 {
17 var hostmask = new IRCTokens.Hostmask("nick!user");
18 await Assert.That(hostmask.NickName).IsEqualTo("nick");
19 await Assert.That(hostmask.UserName).IsEqualTo("user");
20 await Assert.That(hostmask.HostName).IsNull();
21 }
22
23 [Test]
24 public async Task NoUserName()
25 {
26 var hostmask = new IRCTokens.Hostmask("nick@host");
27 await Assert.That(hostmask.NickName).IsEqualTo("nick");
28 await Assert.That(hostmask.UserName).IsNull();
29 await Assert.That(hostmask.HostName).IsEqualTo("host");
30 }
31
32 [Test]
33 public async Task OnlyNickName()
34 {
35 var hostmask = new IRCTokens.Hostmask("nick");
36 await Assert.That(hostmask.NickName).IsEqualTo("nick");
37 await Assert.That(hostmask.UserName).IsNull();
38 await Assert.That(hostmask.HostName).IsNull();
39 }
40
41 [Test]
42 public async Task HostmaskFromLine()
43 {
44 var line = new Line(":nick!user@host PRIVMSG #channel hello");
45 var hostmask = new IRCTokens.Hostmask("nick!user@host");
46 await Assert.That(line.Hostmask.ToString()).IsEqualTo(hostmask.ToString());
47 await Assert.That(line.Hostmask.NickName).IsEqualTo("nick");
48 await Assert.That(line.Hostmask.UserName).IsEqualTo("user");
49 await Assert.That(line.Hostmask.HostName).IsEqualTo("host");
50 }
51
52 [Test]
53 public async Task EmptyHostmaskFromLine()
54 {
55 var line = new Line("PRIVMSG #channel hello");
56 await Assert.That(line.Hostmask.HostName).IsNull();
57 await Assert.That(line.Hostmask.UserName).IsNull();
58 await Assert.That(line.Hostmask.NickName).IsNull();
59 }
60}