IRC parsing, tokenization, and state handling in C#
at ircrobots 112 lines 3.4 kB view raw
1namespace IRCSharp.Tests.States; 2 3[TestClass] 4public class Emit 5{ 6 private Server _server; 7 8 [TestInitialize] 9 public void TestInitialize() 10 { 11 _server = new("test"); 12 _server.Parse(new("001 nickname")); 13 } 14 15 [TestMethod] 16 public void EmitJoin() 17 { 18 var emit = _server.Parse(new(":nickname JOIN #chan")); 19 20 Assert.AreEqual("JOIN", emit.Command); 21 Assert.IsTrue(emit.Self); 22 Assert.AreEqual(_server.Users["nickname"], emit.User); 23 Assert.AreEqual(_server.Channels["#chan"], emit.Channel); 24 25 emit = _server.Parse(new(":other JOIN #chan")); 26 Assert.IsNotNull(emit); 27 Assert.AreEqual("JOIN", emit.Command); 28 Assert.IsFalse(emit.Self); 29 Assert.AreEqual(_server.Users["other"], emit.User); 30 Assert.AreEqual(_server.Channels["#chan"], emit.Channel); 31 } 32 33 [TestMethod] 34 public void EmitPrivmsg() 35 { 36 _server.Parse(new(":nickname JOIN #chan")); 37 var emit = _server.Parse(new(":nickname PRIVMSG #chan :hello")); 38 39 Assert.IsNotNull(emit); 40 Assert.AreEqual("PRIVMSG", emit.Command); 41 Assert.AreEqual("hello", emit.Text); 42 Assert.IsTrue(emit.SelfSource); 43 Assert.AreEqual(_server.Users["nickname"], emit.User); 44 Assert.AreEqual(_server.Channels["#chan"], emit.Channel); 45 46 _server.Parse(new(":other JOIN #chan")); 47 emit = _server.Parse(new(":other PRIVMSG #chan :hello2")); 48 49 Assert.IsNotNull(emit); 50 Assert.AreEqual("PRIVMSG", emit.Command); 51 Assert.AreEqual("hello2", emit.Text); 52 Assert.IsFalse(emit.SelfSource); 53 Assert.AreEqual(_server.Users["other"], emit.User); 54 Assert.AreEqual(_server.Channels["#chan"], emit.Channel); 55 } 56 57 [TestMethod] 58 public void EmitPrivmsgNoJoin() 59 { 60 _server.Parse(new(":nickname JOIN #chan")); 61 var emit = _server.Parse(new(":other PRIVMSG #chan :hello")); 62 63 Assert.IsNotNull(emit); 64 Assert.AreEqual("PRIVMSG", emit.Command); 65 Assert.AreEqual("hello", emit.Text); 66 Assert.IsFalse(emit.SelfSource); 67 Assert.IsNotNull(emit.User); 68 69 var channel = _server.Channels["#chan"]; 70 Assert.AreEqual(channel, emit.Channel); 71 } 72 73 [TestMethod] 74 public void EmitKick() 75 { 76 _server.Parse(new(":nickname JOIN #chan")); 77 78 var user = _server.Users["nickname"]; 79 var channel = _server.Channels["#chan"]; 80 _server.Parse(new(":other JOIN #chan")); 81 var userOther = _server.Users["other"]; 82 var emit = _server.Parse(new(":nickname KICK #chan other :reason")); 83 84 Assert.IsNotNull(emit); 85 Assert.AreEqual("KICK", emit.Command); 86 Assert.AreEqual("reason", emit.Text); 87 Assert.IsTrue(emit.SelfSource); 88 Assert.AreEqual(user, emit.UserSource); 89 Assert.AreEqual(userOther, emit.UserTarget); 90 Assert.AreEqual(channel, emit.Channel); 91 } 92 93 [TestMethod] 94 public void EmitMode() 95 { 96 var emit = _server.Parse(new("MODE nickname x+i-i+wi-wi")); 97 98 Assert.IsNotNull(emit); 99 Assert.AreEqual("MODE", emit.Command); 100 Assert.IsTrue(emit.SelfTarget); 101 CollectionAssert.AreEqual(new List<string> 102 { 103 "+x", 104 "+i", 105 "-i", 106 "+w", 107 "+i", 108 "-w", 109 "-i" 110 }, emit.Tokens); 111 } 112}