about summary refs log tree commit diff
path: root/IrcStates/Tests/Cap.cs
blob: 4f63c556a1e68c5be8e74b7b13b20aa35af743be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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"));
            CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", ""}},
                _server.AvailableCaps);
        }

        [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);
        }
    }
}