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