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