IRC parsing, tokenization, and state handling in C#
at main 56 lines 1.9 kB view raw
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}