IRC parsing, tokenization, and state handling in C#
1namespace IRCSharp.Tests.State;
2
3[TestClass]
4public class Cap
5{
6 private Server _server;
7
8 [TestInitialize]
9 public void TestInitialize()
10 {
11 _server = new("test");
12 }
13
14 [TestMethod]
15 public void LSOneLine()
16 {
17 Assert.IsFalse(_server.HasCap);
18 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
19 _server.Parse(new("CAP * LS :a b"));
20 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
21 }
22
23 [TestMethod]
24 public void LsTwoLines()
25 {
26 _server.Parse(new("CAP * LS * :a b"));
27 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
28 _server.Parse(new("CAP * LS :c"));
29 Assert.IsTrue(_server.AvailableCaps.ContainsKey("a"));
30 Assert.IsTrue(_server.AvailableCaps.ContainsKey("b"));
31 Assert.IsTrue(_server.AvailableCaps.ContainsKey("c"));
32 }
33
34 [TestMethod]
35 public void LsValues()
36 {
37 _server.Parse(new("CAP * LS :a b= c=1"));
38 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", "1"}},
39 _server.AvailableCaps);
40 }
41
42 [TestMethod]
43 public void ACKOneLine()
44 {
45 _server.Parse(new("CAP * LS :a b"));
46 _server.Parse(new("CAP * ACK :a b"));
47 CollectionAssert.AreEqual(new List<string> {"a", "b"}, _server.AgreedCaps);
48 }
49
50 [TestMethod]
51 public void ACKTwoLines()
52 {
53 _server.Parse(new("CAP * LS :a b c"));
54 _server.Parse(new("CAP * ACK * :a b"));
55 _server.Parse(new("CAP * ACK :c"));
56 CollectionAssert.AreEqual(new List<string> {"a", "b", "c"}, _server.AgreedCaps);
57 }
58
59 [TestMethod]
60 public void ACKNotLs()
61 {
62 _server.Parse(new("CAP * LS a"));
63 _server.Parse(new("CAP * ACK b"));
64 CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
65 }
66
67 [TestMethod]
68 public void NewNoLs()
69 {
70 _server.Parse(new("CAP * NEW :a"));
71 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}}, _server.AvailableCaps);
72 }
73
74 [TestMethod]
75 public void NewOneLine()
76 {
77 _server.Parse(new("CAP * LS :a"));
78 _server.Parse(new("CAP * NEW :b"));
79 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
80 }
81
82 [TestMethod]
83 public void NewTwoLines()
84 {
85 _server.Parse(new("CAP * LS :a"));
86 _server.Parse(new("CAP * NEW :b c"));
87 CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", ""}},
88 _server.AvailableCaps);
89 }
90
91 [TestMethod]
92 public void DelNotAcked()
93 {
94 _server.Parse(new("CAP * DEL a"));
95 }
96
97 [TestMethod]
98 public void DELOneLS()
99 {
100 _server.Parse(new("CAP * LS :a"));
101 _server.Parse(new("CAP * ACK :a"));
102 _server.Parse(new("CAP * DEL :a"));
103 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
104 CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
105 }
106
107 [TestMethod]
108 public void DelTwoLs()
109 {
110 _server.Parse(new("CAP * LS :a b"));
111 _server.Parse(new("CAP * ACK :a b"));
112 _server.Parse(new("CAP * DEL :a"));
113 CollectionAssert.AreEqual(new Dictionary<string, string> {{"b", ""}}, _server.AvailableCaps);
114 CollectionAssert.AreEqual(new List<string> {"b"}, _server.AgreedCaps);
115 }
116
117 [TestMethod]
118 public void DelTwoDel()
119 {
120 _server.Parse(new("CAP * LS :a b"));
121 _server.Parse(new("CAP * ACK :a b"));
122 _server.Parse(new("CAP * DEL :a b"));
123 CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
124 CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
125 }
126}