about summary refs log blame commit diff
path: root/IrcStates/Tests/Mode.cs
blob: 3418adb110ef098e8976b6b2cfa202f7de35fb98 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                                   





                         


























                                                                             






                                                                                      




                                  







                                                                              




                                    





                                                                                                                 




                                       





                                                                                                 




                                     




                                                                                                         




                                        





                                                                                       




                                     




                                                                                                    




                                        





                                                                                       




                                     




                                                                                                   




                                        





                                                                                       




                                    







                                                                                                               




                                               




                                                                                                                




                                 

                                                                                  




                                            

                                                                                  
         

     
using System.Collections.Generic;
using IrcTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace IrcStates.Tests
{
    [TestClass]
    public class Mode
    {
        private Server _server;

        [TestInitialize]
        public void TestInitialize()
        {
            _server = new Server("test");
            _server.ParseTokens(new Line("001 nickname"));
        }

        [TestMethod]
        public void UModeAdd()
        {
            _server.ParseTokens(new Line("MODE nickname +i"));
            CollectionAssert.AreEqual(new List<string> {"i"}, _server.Modes);
        }

        [TestMethod]
        public void UModeRemove()
        {
            _server.ParseTokens(new Line("MODE nickname +i"));
            _server.ParseTokens(new Line("MODE nickname -i"));
            CollectionAssert.AreEqual(new List<string>(), _server.Modes);
        }

        [TestMethod]
        public void PrefixAdd()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(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<string> {"o", "v"}, channelUser.Modes);
        }

        [TestMethod]
        public void PrefixRemove()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +ov nickname nickname"));
            _server.ParseTokens(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<string>(), channelUser.Modes);
        }

        [TestMethod]
        public void ChannelListAdd()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +b asd!*@*"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, List<string>> {{"b", new List<string> {"asd!*@*"}}},
                channel.ListModes);
        }

        [TestMethod]
        public void ChannelListRemove()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +b asd!*@*"));
            _server.ParseTokens(new Line("MODE #chan -b asd!*@*"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, List<string>>(), channel.ListModes);
        }

        [TestMethod]
        public void ChannelTypeBAdd()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +k password"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"k", "password"}}, channel.Modes);
        }

        [TestMethod]
        public void ChannelTypeBRemove()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +k password"));
            _server.ParseTokens(new Line("MODE #chan -k *"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
        }

        [TestMethod]
        public void ChannelTypeCAdd()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +l 100"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"l", "100"}}, channel.Modes);
        }

        [TestMethod]
        public void ChannelTypeCRemove()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +l 100"));
            _server.ParseTokens(new Line("MODE #chan -l"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
        }

        [TestMethod]
        public void ChannelTypeDAdd()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +i"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"i", null}}, channel.Modes);
        }

        [TestMethod]
        public void ChannelTypeDRemove()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("MODE #chan +i"));
            _server.ParseTokens(new Line("MODE #chan -i"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
        }

        [TestMethod]
        public void ChannelNumeric()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("324 * #chan +bkli *!*@* pass 10"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"k", "pass"}, {"l", "10"}, {"i", null}},
                channel.Modes);
            CollectionAssert.AreEqual(new Dictionary<string, List<string>> {{"b", new List<string> {"*!*@*"}}},
                channel.ListModes);
        }

        [TestMethod]
        public void ChannelNumericWithoutPlus()
        {
            _server.ParseTokens(new Line(":nickname JOIN #chan"));
            _server.ParseTokens(new Line("324 * #chan il 10"));

            var channel = _server.Channels["#chan"];
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"i", null}, {"l", "10"}}, channel.Modes);
        }

        [TestMethod]
        public void UserNumeric()
        {
            _server.ParseTokens(new Line("221 * +iw"));
            CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
        }

        [TestMethod]
        public void UserNumericWithoutPlus()
        {
            _server.ParseTokens(new Line("221 * iw"));
            CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
        }
    }
}