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


                                                   
 






                                       





                                         
                                                    

















                                                                                                        
                                                                 

















                                                                                                        
                                                                   























                                                                                          
                                                            







                                                                                               
                                                     

                                                        
                                                       






                                                                                                 
                                                                   







                                                                                                 
                                                                 







                                                                                               
                                                                       








                                                                                                 
                                                               






                                                                                      
                                                            







                                                                                               
                                                          

                                                            
                                                        







                                                            
                                                         

                                                           
                                                       







                                                           
                                                       

                                                         
                                                     







                                                         
                                                    







                                                    
                                                           

                                                           
                                                       







                                                          
                                                         

                                                         
                                                     

                                                        

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

// ReSharper disable InconsistentNaming

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

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

        [TestMethod]
        public void ChanModes()
        {
            CollectionAssert.AreEqual(new List<string> {"b"}, _server.ISupport.ChanModes.ListModes);
            CollectionAssert.AreEqual(new List<string> {"k"}, _server.ISupport.ChanModes.SettingBModes);
            CollectionAssert.AreEqual(new List<string> {"l"}, _server.ISupport.ChanModes.SettingCModes);
            CollectionAssert.AreEqual(new List<string>
            {
                "i",
                "m",
                "n",
                "p",
                "s",
                "t"
            }, _server.ISupport.ChanModes.SettingDModes);

            _server.Parse(new Line("005 * CHANMODES=a,b,c,d *"));

            CollectionAssert.AreEqual(new List<string> {"a"}, _server.ISupport.ChanModes.ListModes);
            CollectionAssert.AreEqual(new List<string> {"b"}, _server.ISupport.ChanModes.SettingBModes);
            CollectionAssert.AreEqual(new List<string> {"c"}, _server.ISupport.ChanModes.SettingCModes);
            CollectionAssert.AreEqual(new List<string> {"d"}, _server.ISupport.ChanModes.SettingDModes);
        }

        [TestMethod]
        public void Prefix()
        {
            CollectionAssert.AreEqual(new List<string> {"o", "v"}, _server.ISupport.Prefix.Modes);
            CollectionAssert.AreEqual(new List<string> {"@", "+"}, _server.ISupport.Prefix.Prefixes);

            Assert.AreEqual("@", _server.ISupport.Prefix.FromMode("o"));
            Assert.IsNull(_server.ISupport.Prefix.FromMode("a"));
            Assert.AreEqual("o", _server.ISupport.Prefix.FromPrefix("@"));
            Assert.IsNull(_server.ISupport.Prefix.FromPrefix("&"));

            _server.Parse(new Line("005 * PREFIX=(qaohv)~&@%+ *"));
            CollectionAssert.AreEqual(new List<string>
            {
                "q",
                "a",
                "o",
                "h",
                "v"
            }, _server.ISupport.Prefix.Modes);
            CollectionAssert.AreEqual(new List<string>
            {
                "~",
                "&",
                "@",
                "%",
                "+"
            }, _server.ISupport.Prefix.Prefixes);
            Assert.AreEqual("&", _server.ISupport.Prefix.FromMode("a"));
            Assert.AreEqual("a", _server.ISupport.Prefix.FromPrefix("&"));
        }

        [TestMethod]
        public void ChanTypes()
        {
            CollectionAssert.AreEqual(new List<string> {"#"}, _server.ISupport.ChanTypes);
            _server.Parse(new Line("005 * CHANTYPES=#& *"));
            CollectionAssert.AreEqual(new List<string> {"#", "&"}, _server.ISupport.ChanTypes);
        }

        [TestMethod]
        public void Modes()
        {
            Assert.AreEqual(3, _server.ISupport.Modes);

            _server.Parse(new Line("005 * MODES *"));
            Assert.AreEqual(-1, _server.ISupport.Modes);

            _server.Parse(new Line("005 * MODES=5 *"));
            Assert.AreEqual(5, _server.ISupport.Modes);
        }

        [TestMethod]
        public void Rfc1459()
        {
            Assert.AreEqual(IrcStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
            _server.Parse(new Line("005 * CASEMAPPING=rfc1459 *"));
            Assert.AreEqual(IrcStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
            var lower = _server.CaseFold(@"ÀTEST[]~\");
            Assert.AreEqual("Àtest{}^|", lower);
        }

        [TestMethod]
        public void Ascii()
        {
            _server.Parse(new Line("005 * CASEMAPPING=ascii *"));
            Assert.AreEqual(IrcStates.Casemap.CaseMapping.Ascii, _server.ISupport.CaseMapping);
            var lower = _server.CaseFold(@"ÀTEST[]~\");
            Assert.AreEqual(@"Àtest[]~\", lower);
        }

        [TestMethod]
        public void FallbackToRfc1459()
        {
            _server.Parse(new Line("005 * CASEMAPPING=nonexistent *"));
            Assert.AreEqual(IrcStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
            var lower = _server.CaseFold(@"ÀTEST[]~\");
            Assert.AreEqual("Àtest{}^|", lower);
        }

        [TestMethod]
        public void Network()
        {
            Assert.IsNull(_server.ISupport.Network);
            _server.Parse(new Line("005 * NETWORK=testnet *"));
            Assert.AreEqual("testnet", _server.ISupport.Network);
        }

        [TestMethod]
        public void StatusMsg()
        {
            CollectionAssert.AreEqual(new List<string>(), _server.ISupport.StatusMsg);
            _server.Parse(new Line("005 * STATUSMSG=&@ *"));
            CollectionAssert.AreEqual(new List<string> {"&", "@"}, _server.ISupport.StatusMsg);
        }

        [TestMethod]
        public void CallerId()
        {
            Assert.IsNull(_server.ISupport.CallerId);

            _server.Parse(new Line("005 * CALLERID=U *"));
            Assert.AreEqual("U", _server.ISupport.CallerId);

            _server.Parse(new Line("005 * CALLERID *"));
            Assert.AreEqual("g", _server.ISupport.CallerId);
        }

        [TestMethod]
        public void Excepts()
        {
            Assert.IsNull(_server.ISupport.Excepts);

            _server.Parse(new Line("005 * EXCEPTS=U *"));
            Assert.AreEqual("U", _server.ISupport.Excepts);

            _server.Parse(new Line("005 * EXCEPTS *"));
            Assert.AreEqual("e", _server.ISupport.Excepts);
        }

        [TestMethod]
        public void Invex()
        {
            Assert.IsNull(_server.ISupport.Invex);

            _server.Parse(new Line("005 * INVEX=U *"));
            Assert.AreEqual("U", _server.ISupport.Invex);

            _server.Parse(new Line("005 * INVEX *"));
            Assert.AreEqual("I", _server.ISupport.Invex);
        }

        [TestMethod]
        public void Whox()
        {
            Assert.IsFalse(_server.ISupport.Whox);

            _server.Parse(new Line("005 * WHOX *"));
            Assert.IsTrue(_server.ISupport.Whox);
        }

        [TestMethod]
        public void Monitor()
        {
            Assert.IsNull(_server.ISupport.Monitor);

            _server.Parse(new Line("005 * MONITOR=123 *"));
            Assert.AreEqual(123, _server.ISupport.Monitor);

            _server.Parse(new Line("005 * MONITOR *"));
            Assert.AreEqual(-1, _server.ISupport.Monitor);
        }

        [TestMethod]
        public void Watch()
        {
            Assert.IsNull(_server.ISupport.Watch);

            _server.Parse(new Line("005 * WATCH=123 *"));
            Assert.AreEqual(123, _server.ISupport.Watch);

            _server.Parse(new Line("005 * WATCH *"));
            Assert.AreEqual(-1, _server.ISupport.Watch);
        }
    }
}