IRC parsing, tokenization, and state handling in C#
at ircrobots 205 lines 6.3 kB view raw
1// ReSharper disable InconsistentNaming 2// ReSharper disable StringLiteralTypo 3namespace IRCSharp.Tests.States; 4 5[TestClass] 6public class ISupport 7{ 8 private Server _server; 9 10 [TestInitialize] 11 public void TestInitialize() 12 { 13 _server = new("test"); 14 _server.Parse(new("001 nickname")); 15 } 16 17 [TestMethod] 18 public void ChanModes() 19 { 20 CollectionAssert.AreEqual(new List<string> {"b"}, _server.ISupport.ChanModes.ListModes); 21 CollectionAssert.AreEqual(new List<string> {"k"}, _server.ISupport.ChanModes.SettingBModes); 22 CollectionAssert.AreEqual(new List<string> {"l"}, _server.ISupport.ChanModes.SettingCModes); 23 CollectionAssert.AreEqual(new List<string> 24 { 25 "i", 26 "m", 27 "n", 28 "p", 29 "s", 30 "t" 31 }, _server.ISupport.ChanModes.SettingDModes); 32 33 _server.Parse(new("005 * CHANMODES=a,b,c,d *")); 34 35 CollectionAssert.AreEqual(new List<string> {"a"}, _server.ISupport.ChanModes.ListModes); 36 CollectionAssert.AreEqual(new List<string> {"b"}, _server.ISupport.ChanModes.SettingBModes); 37 CollectionAssert.AreEqual(new List<string> {"c"}, _server.ISupport.ChanModes.SettingCModes); 38 CollectionAssert.AreEqual(new List<string> {"d"}, _server.ISupport.ChanModes.SettingDModes); 39 } 40 41 [TestMethod] 42 public void Prefix() 43 { 44 CollectionAssert.AreEqual(new List<string> {"o", "v"}, _server.ISupport.Prefix.Modes); 45 CollectionAssert.AreEqual(new List<string> {"@", "+"}, _server.ISupport.Prefix.Prefixes); 46 47 Assert.AreEqual("@", _server.ISupport.Prefix.FromMode("o")); 48 Assert.IsNull(_server.ISupport.Prefix.FromMode("a")); 49 Assert.AreEqual("o", _server.ISupport.Prefix.FromPrefix("@")); 50 Assert.IsNull(_server.ISupport.Prefix.FromPrefix("&")); 51 52 _server.Parse(new("005 * PREFIX=(qaohv)~&@%+ *")); 53 CollectionAssert.AreEqual(new List<string> 54 { 55 "q", 56 "a", 57 "o", 58 "h", 59 "v" 60 }, _server.ISupport.Prefix.Modes); 61 CollectionAssert.AreEqual(new List<string> 62 { 63 "~", 64 "&", 65 "@", 66 "%", 67 "+" 68 }, _server.ISupport.Prefix.Prefixes); 69 Assert.AreEqual("&", _server.ISupport.Prefix.FromMode("a")); 70 Assert.AreEqual("a", _server.ISupport.Prefix.FromPrefix("&")); 71 } 72 73 [TestMethod] 74 public void ChanTypes() 75 { 76 CollectionAssert.AreEqual(new List<string> {"#"}, _server.ISupport.ChanTypes); 77 _server.Parse(new("005 * CHANTYPES=#& *")); 78 CollectionAssert.AreEqual(new List<string> {"#", "&"}, _server.ISupport.ChanTypes); 79 } 80 81 [TestMethod] 82 public void Modes() 83 { 84 Assert.AreEqual(3, _server.ISupport.Modes); 85 86 _server.Parse(new("005 * MODES *")); 87 Assert.AreEqual(-1, _server.ISupport.Modes); 88 89 _server.Parse(new("005 * MODES=5 *")); 90 Assert.AreEqual(5, _server.ISupport.Modes); 91 } 92 93 [TestMethod] 94 public void Rfc1459() 95 { 96 Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping); 97 _server.Parse(new("005 * CASEMAPPING=rfc1459 *")); 98 Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping); 99 var lower = _server.CaseFold(@"ÀTEST[]~\"); 100 Assert.AreEqual("Àtest{}^|", lower); 101 } 102 103 [TestMethod] 104 public void Ascii() 105 { 106 _server.Parse(new("005 * CASEMAPPING=ascii *")); 107 Assert.AreEqual(IRCStates.Casemap.CaseMapping.Ascii, _server.ISupport.CaseMapping); 108 var lower = _server.CaseFold(@"ÀTEST[]~\"); 109 Assert.AreEqual(@"Àtest[]~\", lower); 110 } 111 112 [TestMethod] 113 public void FallbackToRfc1459() 114 { 115 _server.Parse(new("005 * CASEMAPPING=nonexistent *")); 116 Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping); 117 var lower = _server.CaseFold(@"ÀTEST[]~\"); 118 Assert.AreEqual("Àtest{}^|", lower); 119 } 120 121 [TestMethod] 122 public void Network() 123 { 124 Assert.IsNull(_server.ISupport.Network); 125 _server.Parse(new("005 * NETWORK=testnet *")); 126 Assert.AreEqual("testnet", _server.ISupport.Network); 127 } 128 129 [TestMethod] 130 public void StatusMsg() 131 { 132 CollectionAssert.AreEqual(new List<string>(), _server.ISupport.StatusMsg); 133 _server.Parse(new("005 * STATUSMSG=&@ *")); 134 CollectionAssert.AreEqual(new List<string> {"&", "@"}, _server.ISupport.StatusMsg); 135 } 136 137 [TestMethod] 138 public void CallerId() 139 { 140 Assert.IsNull(_server.ISupport.CallerId); 141 142 _server.Parse(new("005 * CALLERID=U *")); 143 Assert.AreEqual("U", _server.ISupport.CallerId); 144 145 _server.Parse(new("005 * CALLERID *")); 146 Assert.AreEqual("g", _server.ISupport.CallerId); 147 } 148 149 [TestMethod] 150 public void Excepts() 151 { 152 Assert.IsNull(_server.ISupport.Excepts); 153 154 _server.Parse(new("005 * EXCEPTS=U *")); 155 Assert.AreEqual("U", _server.ISupport.Excepts); 156 157 _server.Parse(new("005 * EXCEPTS *")); 158 Assert.AreEqual("e", _server.ISupport.Excepts); 159 } 160 161 [TestMethod] 162 public void Invex() 163 { 164 Assert.IsNull(_server.ISupport.Invex); 165 166 _server.Parse(new("005 * INVEX=U *")); 167 Assert.AreEqual("U", _server.ISupport.Invex); 168 169 _server.Parse(new("005 * INVEX *")); 170 Assert.AreEqual("I", _server.ISupport.Invex); 171 } 172 173 [TestMethod] 174 public void Whox() 175 { 176 Assert.IsFalse(_server.ISupport.Whox); 177 178 _server.Parse(new("005 * WHOX *")); 179 Assert.IsTrue(_server.ISupport.Whox); 180 } 181 182 [TestMethod] 183 public void Monitor() 184 { 185 Assert.IsNull(_server.ISupport.Monitor); 186 187 _server.Parse(new("005 * MONITOR=123 *")); 188 Assert.AreEqual(123, _server.ISupport.Monitor); 189 190 _server.Parse(new("005 * MONITOR *")); 191 Assert.AreEqual(-1, _server.ISupport.Monitor); 192 } 193 194 [TestMethod] 195 public void Watch() 196 { 197 Assert.IsNull(_server.ISupport.Watch); 198 199 _server.Parse(new("005 * WATCH=123 *")); 200 Assert.AreEqual(123, _server.ISupport.Watch); 201 202 _server.Parse(new("005 * WATCH *")); 203 Assert.AreEqual(-1, _server.ISupport.Watch); 204 } 205}