about summary refs log blame commit diff
path: root/IRCStates/Tests/Cap.cs
blob: 3c0fabacb5b15789b21ab8e199271cca16285c21 (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 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);
        }
    }
}