about summary refs log blame commit diff
path: root/IrcStates/Tests/Mode.cs
blob: 799afd6c06affd008fcc73ee24ada72156140393 (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.Parse(new Line("001 nickname"));
        }

        [TestMethod]
        public void UModeAdd()
        {
            _server.Parse(new Line("MODE nickname +i"));
            CollectionAssert.AreEqual(new List<string> {"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<string>(), _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<string> {"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<string>(), 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<string> {"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<string, List<string>>(), 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<string, string> {{"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<string, string>(), 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<string, string> {{"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<string, string>(), 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<string, string> {{"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<string, string>(), 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<string, string> {{"k", "pass"}, {"l", "10"}, {"i", null}},
                channel.Modes);
            CollectionAssert.AreEqual(new List<string> {"*!*@*"}, 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<string, string> {{"i", null}, {"l", "10"}}, channel.Modes);
        }

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

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