namespace IRCSharp.Tests.State; [TestClass] public class Emit { private Server _server; [TestInitialize] public void TestInitialize() { _server = new("test"); _server.Parse(new("001 nickname")); } [TestMethod] public void EmitJoin() { var emit = _server.Parse(new(":nickname JOIN #chan")); Assert.AreEqual("JOIN", emit.Command); Assert.IsTrue(emit.Self); Assert.AreEqual(_server.Users["nickname"], emit.User); Assert.AreEqual(_server.Channels["#chan"], emit.Channel); emit = _server.Parse(new(":other JOIN #chan")); Assert.IsNotNull(emit); Assert.AreEqual("JOIN", emit.Command); Assert.IsFalse(emit.Self); Assert.AreEqual(_server.Users["other"], emit.User); Assert.AreEqual(_server.Channels["#chan"], emit.Channel); } [TestMethod] public void EmitPrivmsg() { _server.Parse(new(":nickname JOIN #chan")); var emit = _server.Parse(new(":nickname PRIVMSG #chan :hello")); Assert.IsNotNull(emit); Assert.AreEqual("PRIVMSG", emit.Command); Assert.AreEqual("hello", emit.Text); Assert.IsTrue(emit.SelfSource); Assert.AreEqual(_server.Users["nickname"], emit.User); Assert.AreEqual(_server.Channels["#chan"], emit.Channel); _server.Parse(new(":other JOIN #chan")); emit = _server.Parse(new(":other PRIVMSG #chan :hello2")); Assert.IsNotNull(emit); Assert.AreEqual("PRIVMSG", emit.Command); Assert.AreEqual("hello2", emit.Text); Assert.IsFalse(emit.SelfSource); Assert.AreEqual(_server.Users["other"], emit.User); Assert.AreEqual(_server.Channels["#chan"], emit.Channel); } [TestMethod] public void EmitPrivmsgNoJoin() { _server.Parse(new(":nickname JOIN #chan")); var emit = _server.Parse(new(":other PRIVMSG #chan :hello")); Assert.IsNotNull(emit); Assert.AreEqual("PRIVMSG", emit.Command); Assert.AreEqual("hello", emit.Text); Assert.IsFalse(emit.SelfSource); Assert.IsNotNull(emit.User); var channel = _server.Channels["#chan"]; Assert.AreEqual(channel, emit.Channel); } [TestMethod] public void EmitKick() { _server.Parse(new(":nickname JOIN #chan")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; _server.Parse(new(":other JOIN #chan")); var userOther = _server.Users["other"]; var emit = _server.Parse(new(":nickname KICK #chan other :reason")); Assert.IsNotNull(emit); Assert.AreEqual("KICK", emit.Command); Assert.AreEqual("reason", emit.Text); Assert.IsTrue(emit.SelfSource); Assert.AreEqual(user, emit.UserSource); Assert.AreEqual(userOther, emit.UserTarget); Assert.AreEqual(channel, emit.Channel); } [TestMethod] public void EmitMode() { var emit = _server.Parse(new("MODE nickname x+i-i+wi-wi")); Assert.IsNotNull(emit); Assert.AreEqual("MODE", emit.Command); Assert.IsTrue(emit.SelfTarget); CollectionAssert.AreEqual(new List { "+x", "+i", "-i", "+w", "+i", "-w", "-i" }, emit.Tokens); } }