IRC parsing, tokenization, and state handling in C#
1namespace IRCSharp.Tests.State;
2
3[TestClass]
4public class Mode
5{
6 private Server _server;
7
8 [TestInitialize]
9 public void TestInitialize()
10 {
11 _server = new("test");
12 _server.Parse(new("001 nickname"));
13 }
14
15 [TestMethod]
16 public void UModeAdd()
17 {
18 _server.Parse(new("MODE nickname +i"));
19 CollectionAssert.AreEqual(new List<string> {"i"}, _server.Modes);
20 }
21
22 [TestMethod]
23 public void UModeRemove()
24 {
25 _server.Parse(new("MODE nickname +i"));
26 _server.Parse(new("MODE nickname -i"));
27 CollectionAssert.AreEqual(new List<string>(), _server.Modes);
28 }
29
30 [TestMethod]
31 public void PrefixAdd()
32 {
33 _server.Parse(new(":nickname JOIN #chan"));
34 _server.Parse(new("MODE #chan +ov nickname nickname"));
35
36 var user = _server.Users["nickname"];
37 var channel = _server.Channels["#chan"];
38 var channelUser = channel.Users[user.NickNameLower];
39 CollectionAssert.AreEqual(new List<string> {"o", "v"}, channelUser.Modes);
40 }
41
42 [TestMethod]
43 public void PrefixRemove()
44 {
45 _server.Parse(new(":nickname JOIN #chan"));
46 _server.Parse(new("MODE #chan +ov nickname nickname"));
47 _server.Parse(new("MODE #chan -ov nickname nickname"));
48
49 var user = _server.Users["nickname"];
50 var channel = _server.Channels["#chan"];
51 var channelUser = channel.Users[user.NickNameLower];
52 CollectionAssert.AreEqual(new List<string>(), channelUser.Modes);
53 }
54
55 [TestMethod]
56 public void ChannelListAdd()
57 {
58 _server.Parse(new(":nickname JOIN #chan"));
59 _server.Parse(new("MODE #chan +b asd!*@*"));
60
61 var channel = _server.Channels["#chan"];
62 CollectionAssert.AreEqual(new List<string> {"asd!*@*"}, channel.ListModes["b"]);
63 }
64
65 [TestMethod]
66 public void ChannelListRemove()
67 {
68 _server.Parse(new(":nickname JOIN #chan"));
69 _server.Parse(new("MODE #chan +b asd!*@*"));
70 _server.Parse(new("MODE #chan -b asd!*@*"));
71
72 var channel = _server.Channels["#chan"];
73 CollectionAssert.AreEqual(new Dictionary<string, List<string>>(), channel.ListModes);
74 }
75
76 [TestMethod]
77 public void ChannelTypeBAdd()
78 {
79 _server.Parse(new(":nickname JOIN #chan"));
80 _server.Parse(new("MODE #chan +k password"));
81
82 var channel = _server.Channels["#chan"];
83 CollectionAssert.AreEqual(new Dictionary<string, string> {{"k", "password"}}, channel.Modes);
84 }
85
86 [TestMethod]
87 public void ChannelTypeBRemove()
88 {
89 _server.Parse(new(":nickname JOIN #chan"));
90 _server.Parse(new("MODE #chan +k password"));
91 _server.Parse(new("MODE #chan -k *"));
92
93 var channel = _server.Channels["#chan"];
94 CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
95 }
96
97 [TestMethod]
98 public void ChannelTypeCAdd()
99 {
100 _server.Parse(new(":nickname JOIN #chan"));
101 _server.Parse(new("MODE #chan +l 100"));
102
103 var channel = _server.Channels["#chan"];
104 CollectionAssert.AreEqual(new Dictionary<string, string> {{"l", "100"}}, channel.Modes);
105 }
106
107 [TestMethod]
108 public void ChannelTypeCRemove()
109 {
110 _server.Parse(new(":nickname JOIN #chan"));
111 _server.Parse(new("MODE #chan +l 100"));
112 _server.Parse(new("MODE #chan -l"));
113
114 var channel = _server.Channels["#chan"];
115 CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
116 }
117
118 [TestMethod]
119 public void ChannelTypeDAdd()
120 {
121 _server.Parse(new(":nickname JOIN #chan"));
122 _server.Parse(new("MODE #chan +i"));
123
124 var channel = _server.Channels["#chan"];
125 CollectionAssert.AreEqual(new Dictionary<string, string> {{"i", null}}, channel.Modes);
126 }
127
128 [TestMethod]
129 public void ChannelTypeDRemove()
130 {
131 _server.Parse(new(":nickname JOIN #chan"));
132 _server.Parse(new("MODE #chan +i"));
133 _server.Parse(new("MODE #chan -i"));
134
135 var channel = _server.Channels["#chan"];
136 CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
137 }
138
139 [TestMethod]
140 public void ChannelNumeric()
141 {
142 _server.Parse(new(":nickname JOIN #chan"));
143 _server.Parse(new("324 * #chan +bkli *!*@* pass 10"));
144
145 var channel = _server.Channels["#chan"];
146 CollectionAssert.AreEqual(new Dictionary<string, string> {{"k", "pass"}, {"l", "10"}, {"i", null}},
147 channel.Modes);
148 CollectionAssert.AreEqual(new List<string> {"*!*@*"}, channel.ListModes["b"]);
149 }
150
151 [TestMethod]
152 public void ChannelNumericWithoutPlus()
153 {
154 _server.Parse(new(":nickname JOIN #chan"));
155 _server.Parse(new("324 * #chan il 10"));
156
157 var channel = _server.Channels["#chan"];
158 CollectionAssert.AreEqual(new Dictionary<string, string> {{"i", null}, {"l", "10"}}, channel.Modes);
159 }
160
161 [TestMethod]
162 public void UserNumeric()
163 {
164 _server.Parse(new("221 * +iw"));
165 CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
166 }
167
168 [TestMethod]
169 public void UserNumericWithoutPlus()
170 {
171 _server.Parse(new("221 * iw"));
172 CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
173 }
174}