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