IRC parsing, tokenization, and state handling in C#
at a1df2ed6b496cfac5770a6bd7e4806ca18bf39a5 174 lines 5.4 kB view raw
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}