// ReSharper disable InconsistentNaming // ReSharper disable StringLiteralTypo namespace IRCSharp.Tests.State; public class ISupport { private readonly Server _server = new("test"); public ISupport() { _server.Parse(new Line("001 nickname")); } [Test] public async Task ChanModes() { await Assert.That(_server.ISupport.ChanModes.ListModes).IsEquivalentTo(["b"]); await Assert.That(_server.ISupport.ChanModes.SettingBModes).IsEquivalentTo(["k"]); await Assert.That(_server.ISupport.ChanModes.SettingCModes).IsEquivalentTo(["l"]); await Assert.That(_server.ISupport.ChanModes.SettingDModes).IsEquivalentTo(["i", "m", "n", "p", "s", "t"]); _server.Parse(new Line("005 * CHANMODES=a,b,c,d *")); await Assert.That(_server.ISupport.ChanModes.ListModes).IsEquivalentTo(["a"]); await Assert.That(_server.ISupport.ChanModes.SettingBModes).IsEquivalentTo(["b"]); await Assert.That(_server.ISupport.ChanModes.SettingCModes).IsEquivalentTo(["c"]); await Assert.That(_server.ISupport.ChanModes.SettingDModes).IsEquivalentTo(["d"]); } [Test] public async Task Prefix() { await Assert.That(_server.ISupport.Prefix.Modes).IsEquivalentTo(["o", "v"]); await Assert.That(_server.ISupport.Prefix.Prefixes).IsEquivalentTo(["@", "+"]); await Assert.That(_server.ISupport.Prefix.FromMode("o")).IsEqualTo("@"); await Assert.That(_server.ISupport.Prefix.FromMode("a")).IsNull(); await Assert.That(_server.ISupport.Prefix.FromPrefix("@")).IsEqualTo("o"); await Assert.That(_server.ISupport.Prefix.FromPrefix("&")).IsNull(); _server.Parse(new Line("005 * PREFIX=(qaohv)~&@%+ *")); await Assert.That(_server.ISupport.Prefix.Modes).IsEquivalentTo(["q", "a", "o", "h", "v"]); await Assert.That(_server.ISupport.Prefix.Prefixes).IsEquivalentTo(["~", "&", "@", "%", "+",]); await Assert.That(_server.ISupport.Prefix.FromMode("a")).IsEqualTo("&"); await Assert.That(_server.ISupport.Prefix.FromPrefix("&")).IsEqualTo("a"); } [Test] public async Task ChanTypes() { await Assert.That(_server.ISupport.ChanTypes).IsEquivalentTo(["#"]); _server.Parse(new Line("005 * CHANTYPES=#& *")); await Assert.That(_server.ISupport.ChanTypes).IsEquivalentTo(["#", "&"]); } [Test] public async Task Modes() { await Assert.That(_server.ISupport.Modes).IsEqualTo(3); _server.Parse(new Line("005 * MODES *")); await Assert.That(_server.ISupport.Modes).IsEqualTo(-1); _server.Parse(new Line("005 * MODES=5 *")); await Assert.That(_server.ISupport.Modes).IsEqualTo(5); } [Test] public async Task Rfc1459() { await Assert.That(_server.ISupport.CaseMapping).IsEqualTo(IRCStates.Casemap.CaseMapping.Rfc1459); _server.Parse(new Line("005 * CASEMAPPING=rfc1459 *")); await Assert.That(_server.ISupport.CaseMapping).IsEqualTo(IRCStates.Casemap.CaseMapping.Rfc1459); var lower = _server.CaseFold(@"ÀTEST[]~\"); await Assert.That(lower).IsEqualTo("Àtest{}^|"); } [Test] public async Task Ascii() { _server.Parse(new Line("005 * CASEMAPPING=ascii *")); await Assert.That(_server.ISupport.CaseMapping).IsEqualTo(IRCStates.Casemap.CaseMapping.Ascii); var lower = _server.CaseFold(@"ÀTEST[]~\"); await Assert.That(lower).IsEqualTo(@"Àtest[]~\"); } [Test] public async Task FallbackToRfc1459() { _server.Parse(new Line("005 * CASEMAPPING=nonexistent *")); await Assert.That(_server.ISupport.CaseMapping).IsEqualTo(IRCStates.Casemap.CaseMapping.Rfc1459); var lower = _server.CaseFold(@"ÀTEST[]~\"); await Assert.That(lower).IsEqualTo("Àtest{}^|"); } [Test] public async Task Network() { await Assert.That(_server.ISupport.Network).IsNull(); _server.Parse(new Line("005 * NETWORK=testnet *")); await Assert.That(_server.ISupport.Network).IsEqualTo("testnet"); } [Test] public async Task StatusMsg() { await Assert.That(_server.ISupport.StatusMsg).IsEmpty(); _server.Parse(new Line("005 * STATUSMSG=&@ *")); await Assert.That(_server.ISupport.StatusMsg).IsEquivalentTo(["&", "@"]); } [Test] public async Task CallerId() { await Assert.That(_server.ISupport.CallerId).IsNull(); _server.Parse(new Line("005 * CALLERID=U *")); await Assert.That(_server.ISupport.CallerId).IsEqualTo("U"); _server.Parse(new Line("005 * CALLERID *")); await Assert.That(_server.ISupport.CallerId).IsEqualTo("g"); } [Test] public async Task Excepts() { await Assert.That(_server.ISupport.Excepts).IsNull(); _server.Parse(new Line("005 * EXCEPTS=U *")); await Assert.That(_server.ISupport.Excepts).IsEqualTo("U"); _server.Parse(new Line("005 * EXCEPTS *")); await Assert.That(_server.ISupport.Excepts).IsEqualTo("e"); } [Test] public async Task Invex() { await Assert.That(_server.ISupport.Invex).IsNull(); _server.Parse(new Line("005 * INVEX=U *")); await Assert.That(_server.ISupport.Invex).IsEqualTo("U"); _server.Parse(new Line("005 * INVEX *")); await Assert.That(_server.ISupport.Invex).IsEqualTo("I"); } [Test] public async Task Whox() { await Assert.That(_server.ISupport.Whox).IsFalse(); _server.Parse(new Line("005 * WHOX *")); await Assert.That(_server.ISupport.Whox).IsTrue(); } [Test] public async Task Monitor() { await Assert.That(_server.ISupport.Monitor).IsNull(); _server.Parse(new Line("005 * MONITOR=123 *")); await Assert.That(_server.ISupport.Monitor).IsEqualTo(123); _server.Parse(new Line("005 * MONITOR *")); await Assert.That(_server.ISupport.Monitor).IsEqualTo(-1); } [Test] public async Task Watch() { await Assert.That(_server.ISupport.Watch).IsNull(); _server.Parse(new Line("005 * WATCH=123 *")); await Assert.That(_server.ISupport.Watch).IsEqualTo(123); _server.Parse(new Line("005 * WATCH *")); await Assert.That(_server.ISupport.Watch).IsEqualTo(-1); } }