using System.Collections.Generic; using IRCStates; using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State { [TestClass] public class Mode { private Server _server; [TestInitialize] public void TestInitialize() { _server = new Server("test"); _server.Parse(new Line("001 nickname")); } [TestMethod] public void UModeAdd() { _server.Parse(new Line("MODE nickname +i")); CollectionAssert.AreEqual(new List {"i"}, _server.Modes); } [TestMethod] public void UModeRemove() { _server.Parse(new Line("MODE nickname +i")); _server.Parse(new Line("MODE nickname -i")); CollectionAssert.AreEqual(new List(), _server.Modes); } [TestMethod] public void PrefixAdd() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +ov nickname nickname")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; var channelUser = channel.Users[user.NickNameLower]; CollectionAssert.AreEqual(new List {"o", "v"}, channelUser.Modes); } [TestMethod] public void PrefixRemove() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +ov nickname nickname")); _server.Parse(new Line("MODE #chan -ov nickname nickname")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; var channelUser = channel.Users[user.NickNameLower]; CollectionAssert.AreEqual(new List(), channelUser.Modes); } [TestMethod] public void ChannelListAdd() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +b asd!*@*")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new List {"asd!*@*"}, channel.ListModes["b"]); } [TestMethod] public void ChannelListRemove() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +b asd!*@*")); _server.Parse(new Line("MODE #chan -b asd!*@*")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary>(), channel.ListModes); } [TestMethod] public void ChannelTypeBAdd() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +k password")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"k", "password"}}, channel.Modes); } [TestMethod] public void ChannelTypeBRemove() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +k password")); _server.Parse(new Line("MODE #chan -k *")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary(), channel.Modes); } [TestMethod] public void ChannelTypeCAdd() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +l 100")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"l", "100"}}, channel.Modes); } [TestMethod] public void ChannelTypeCRemove() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +l 100")); _server.Parse(new Line("MODE #chan -l")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary(), channel.Modes); } [TestMethod] public void ChannelTypeDAdd() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +i")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"i", null}}, channel.Modes); } [TestMethod] public void ChannelTypeDRemove() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("MODE #chan +i")); _server.Parse(new Line("MODE #chan -i")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary(), channel.Modes); } [TestMethod] public void ChannelNumeric() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("324 * #chan +bkli *!*@* pass 10")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"k", "pass"}, {"l", "10"}, {"i", null}}, channel.Modes); CollectionAssert.AreEqual(new List {"*!*@*"}, channel.ListModes["b"]); } [TestMethod] public void ChannelNumericWithoutPlus() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("324 * #chan il 10")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"i", null}, {"l", "10"}}, channel.Modes); } [TestMethod] public void UserNumeric() { _server.Parse(new Line("221 * +iw")); CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes); } [TestMethod] public void UserNumericWithoutPlus() { _server.Parse(new Line("221 * iw")); CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes); } } }