about summary refs log blame commit diff
path: root/IRCSharp.Tests/State/Cap.cs
blob: ea2c718f198e6cee3c64316f7d03c137acb3e5ef (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                    
                
                
                                                   
 
                              



                    












                                                                                               
                                                     



                                                                                                                    
                                
         
                                                       
                                                                                               
                                                   


                                                                  


                    
                              
         
                                                          






                                                                                                        

                                                      





                                                                                       


                                                        



                                                                                            
                              
         

                                                   



                                                                              
                             
         
                                                    



                                                                                                         
                                
         

                                                    



                                                                                                                    
                                 
         

                                                      




                                                                                                       
                                 
         
                                                   




                              


                                                    




                                                                                               
                              
         


                                                      




                                                                                                         
                               
         


                                                      


                                                                                               

     
using System.Collections.Generic;
using IRCStates;
using IRCTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace IRCSharp.Tests.State
{
    [TestClass]
    public class Cap
    {
        private Server _server;

        [TestInitialize]
        public void TestInitialize()
        {
            _server = new Server("test");
        }

        [TestMethod]
        public void LSOneLine()
        {
            Assert.IsFalse(_server.HasCap);
            CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
            _server.Parse(new Line("CAP * LS :a b"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
        }

        [TestMethod]
        public void LsTwoLines()
        {
            _server.Parse(new Line("CAP * LS * :a b"));
            CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
            _server.Parse(new Line("CAP * LS :c"));
            Assert.IsTrue(_server.AvailableCaps.ContainsKey("a"));
            Assert.IsTrue(_server.AvailableCaps.ContainsKey("b"));
            Assert.IsTrue(_server.AvailableCaps.ContainsKey("c"));
        }

        [TestMethod]
        public void LsValues()
        {
            _server.Parse(new Line("CAP * LS :a b= c=1"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", "1"}},
                _server.AvailableCaps);
        }

        [TestMethod]
        public void ACKOneLine()
        {
            _server.Parse(new Line("CAP * LS :a b"));
            _server.Parse(new Line("CAP * ACK :a b"));
            CollectionAssert.AreEqual(new List<string> {"a", "b"}, _server.AgreedCaps);
        }

        [TestMethod]
        public void ACKTwoLines()
        {
            _server.Parse(new Line("CAP * LS :a b c"));
            _server.Parse(new Line("CAP * ACK * :a b"));
            _server.Parse(new Line("CAP * ACK :c"));
            CollectionAssert.AreEqual(new List<string> {"a", "b", "c"}, _server.AgreedCaps);
        }

        [TestMethod]
        public void ACKNotLs()
        {
            _server.Parse(new Line("CAP * LS a"));
            _server.Parse(new Line("CAP * ACK b"));
            CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
        }

        [TestMethod]
        public void NewNoLs()
        {
            _server.Parse(new Line("CAP * NEW :a"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}}, _server.AvailableCaps);
        }

        [TestMethod]
        public void NewOneLine()
        {
            _server.Parse(new Line("CAP * LS :a"));
            _server.Parse(new Line("CAP * NEW :b"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
        }

        [TestMethod]
        public void NewTwoLines()
        {
            _server.Parse(new Line("CAP * LS :a"));
            _server.Parse(new Line("CAP * NEW :b c"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", ""}},
                _server.AvailableCaps);
        }

        [TestMethod]
        public void DelNotAcked()
        {
            _server.Parse(new Line("CAP * DEL a"));
        }

        [TestMethod]
        public void DELOneLS()
        {
            _server.Parse(new Line("CAP * LS :a"));
            _server.Parse(new Line("CAP * ACK :a"));
            _server.Parse(new Line("CAP * DEL :a"));
            CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
            CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
        }

        [TestMethod]
        public void DelTwoLs()
        {
            _server.Parse(new Line("CAP * LS :a b"));
            _server.Parse(new Line("CAP * ACK :a b"));
            _server.Parse(new Line("CAP * DEL :a"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"b", ""}}, _server.AvailableCaps);
            CollectionAssert.AreEqual(new List<string> {"b"}, _server.AgreedCaps);
        }

        [TestMethod]
        public void DelTwoDel()
        {
            _server.Parse(new Line("CAP * LS :a b"));
            _server.Parse(new Line("CAP * ACK :a b"));
            _server.Parse(new Line("CAP * DEL :a b"));
            CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
            CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
        }
    }
}