From 44555c7971e06a856e20f64b2217ebd8303e4dd5 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 7 Nov 2023 17:54:58 -0500 Subject: [PATCH] use some new c# lang features --- Examples/States/Client.cs | 121 +++++++--------- Examples/States/Program.cs | 15 +- Examples/States/States.csproj | 2 +- Examples/Tokens/Client.cs | 103 +++++++------- Examples/Tokens/Program.cs | 35 ++--- Examples/Tokens/Tokens.csproj | 2 +- IRCSharp.Tests/IRCSharp.Tests.csproj | 10 +- IRCSharp.Tests/State/Cap.cs | 55 ++++---- IRCSharp.Tests/State/Casemap.cs | 13 +- IRCSharp.Tests/State/Channel.cs | 43 +++--- IRCSharp.Tests/State/Emit.cs | 29 ++-- IRCSharp.Tests/State/ISupport.cs | 47 ++++--- IRCSharp.Tests/State/Mode.cs | 73 +++++----- IRCSharp.Tests/State/Motd.cs | 9 +- IRCSharp.Tests/State/Sasl.cs | 7 +- IRCSharp.Tests/State/User.cs | 129 +++++++++--------- IRCSharp.Tests/State/Who.cs | 13 +- IRCSharp.Tests/Tokenization/Format.cs | 7 +- .../Tokenization/StatefulDecoder.cs | 6 +- .../Tokenization/StatefulEncoder.cs | 8 +- IRCStates/Casemap.cs | 2 +- IRCStates/Channel.cs | 13 +- IRCStates/ChannelUser.cs | 7 +- IRCStates/IRCStates.csproj | 2 +- IRCStates/ISupport.cs | 26 +--- IRCStates/ISupportChanModes.cs | 1 + IRCStates/ISupportPrefix.cs | 3 +- IRCStates/Server.cs | 21 ++- IRCStates/User.cs | 7 +- IRCTokens/IRCTokens.csproj | 2 +- IRCTokens/Line.cs | 6 +- global.json | 7 + 32 files changed, 376 insertions(+), 448 deletions(-) create mode 100644 global.json diff --git a/Examples/States/Client.cs b/Examples/States/Client.cs index 77d2148..5df69f1 100644 --- a/Examples/States/Client.cs +++ b/Examples/States/Client.cs @@ -5,83 +5,68 @@ using System.Threading; using IRCStates; using IRCTokens; -namespace States +namespace States; + +internal class Client(string host, int port, string nick) { - internal class Client + private readonly byte[] _bytes = new byte[1024]; + private readonly StatefulEncoder _encoder = new(); + private readonly Server _server = new("test"); + private readonly Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + + private void Send(string raw) { - private readonly byte[] _bytes; - private readonly StatefulEncoder _encoder; - private readonly string _host; - private readonly string _nick; - private readonly int _port; - private readonly Server _server; - private readonly Socket _socket; + _encoder.Push(new(raw)); + } - public Client(string host, int port, string nick) + public void Start() + { + _socket.Connect(host, port); + while (!_socket.Connected) Thread.Sleep(1000); + + Send("USER test 0 * test"); + Send($"NICK {nick}"); + + while (true) { - _server = new Server("test"); - _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - _encoder = new StatefulEncoder(); - _host = host; - _port = port; - _nick = nick; - _bytes = new byte[1024]; - } - - private void Send(string raw) - { - _encoder.Push(new Line(raw)); - } - - public void Start() - { - _socket.Connect(_host, _port); - while (!_socket.Connected) Thread.Sleep(1000); - - Send("USER test 0 * test"); - Send($"NICK {_nick}"); - - while (true) + while (_encoder.PendingBytes.Any()) { - while (_encoder.PendingBytes.Any()) - { - foreach (var line in _encoder.Pop(_socket.Send(_encoder.PendingBytes))) - Console.WriteLine($"> {line.Format()}"); - } + foreach (var line in _encoder.Pop(_socket.Send(_encoder.PendingBytes))) + Console.WriteLine($"> {line.Format()}"); + } - var bytesReceived = _socket.Receive(_bytes); - if (bytesReceived == 0) - { - Console.WriteLine("! disconnected"); - _socket.Shutdown(SocketShutdown.Both); - _socket.Close(); - break; - } + var bytesReceived = _socket.Receive(_bytes); + if (bytesReceived == 0) + { + Console.WriteLine("! disconnected"); + _socket.Shutdown(SocketShutdown.Both); + _socket.Close(); + break; + } - var receivedLines = _server.Receive(_bytes, bytesReceived); - foreach (var (line, _) in receivedLines) - { - Console.WriteLine($"< {line.Format()}"); + var receivedLines = _server.Receive(_bytes, bytesReceived); + foreach (var (line, _) in receivedLines) + { + Console.WriteLine($"< {line.Format()}"); - switch (line.Command) - { - case Commands.Privmsg: - if (line.Params[1].Contains(_server.NickName)) - Send($"PRIVMSG {line.Params[0]} :hi {line.Hostmask.NickName}!"); - break; - case "PING": - Send($"PONG :{line.Params[0]}"); - break; - case Numeric.RPL_WELCOME: - if (!_server.HasChannel("#irctokens")) Send("JOIN #irctokens"); - break; - case "INVITE": - var c = line.Params[1]; - if (!_server.HasChannel(c)) Send($"JOIN {c}"); - break; - } + switch (line.Command) + { + case Commands.Privmsg: + if (line.Params[1].Contains(_server.NickName)) + Send($"PRIVMSG {line.Params[0]} :hi {line.Hostmask.NickName}!"); + break; + case "PING": + Send($"PONG :{line.Params[0]}"); + break; + case Numeric.RPL_WELCOME: + if (!_server.HasChannel("#irctokens")) Send("JOIN #irctokens"); + break; + case "INVITE": + var c = line.Params[1]; + if (!_server.HasChannel(c)) Send($"JOIN {c}"); + break; } } } } -} +} \ No newline at end of file diff --git a/Examples/States/Program.cs b/Examples/States/Program.cs index 3c98b23..1d101e1 100644 --- a/Examples/States/Program.cs +++ b/Examples/States/Program.cs @@ -1,11 +1,4 @@ -namespace States -{ - public static class Program - { - private static void Main(string[] args) - { - var client = new Client("localhost", 6667, "statesbot"); - client.Start(); - } - } -} +using States; + +var client = new Client("localhost", 6667, "statesbot"); +client.Start(); diff --git a/Examples/States/States.csproj b/Examples/States/States.csproj index 8c69197..8e2b220 100644 --- a/Examples/States/States.csproj +++ b/Examples/States/States.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net8.0 diff --git a/Examples/Tokens/Client.cs b/Examples/Tokens/Client.cs index 8168a22..e517f4c 100644 --- a/Examples/Tokens/Client.cs +++ b/Examples/Tokens/Client.cs @@ -3,71 +3,62 @@ using System.Net.Sockets; using System.Threading; using IRCTokens; -namespace Tokens +namespace Tokens; + +public class Client { - public class Client + private readonly byte[] _bytes = new byte[1024]; + private readonly StatefulDecoder _decoder = new(); + private readonly StatefulEncoder _encoder = new(); + private readonly Socket _socket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); + + public void Start() { - private readonly byte[] _bytes; - private readonly StatefulDecoder _decoder; - private readonly StatefulEncoder _encoder; - private readonly Socket _socket; + _socket.Connect("127.0.0.1", 6667); + while (!_socket.Connected) Thread.Sleep(1000); - public Client() + Send(new("NICK", "tokensbot")); + Send(new("USER", "tokensbot", "0", "*", "real name")); + + while (true) { - _decoder = new StatefulDecoder(); - _encoder = new StatefulEncoder(); - _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); - _bytes = new byte[1024]; - } + var bytesReceived = _socket.Receive(_bytes); - public void Start() - { - _socket.Connect("127.0.0.1", 6667); - while (!_socket.Connected) Thread.Sleep(1000); - - Send(new Line("NICK", "tokensbot")); - Send(new Line("USER", "tokensbot", "0", "*", "real name")); - - while (true) + if (bytesReceived == 0) { - var bytesReceived = _socket.Receive(_bytes); + Console.WriteLine("! disconnected"); + _socket.Shutdown(SocketShutdown.Both); + _socket.Close(); + break; + } - if (bytesReceived == 0) + var lines = _decoder.Push(_bytes, bytesReceived); + + foreach (var line in lines) + { + Console.WriteLine($"< {line.Format()}"); + + switch (line.Command) { - Console.WriteLine("! disconnected"); - _socket.Shutdown(SocketShutdown.Both); - _socket.Close(); - break; - } - - var lines = _decoder.Push(_bytes, bytesReceived); - - foreach (var line in lines) - { - Console.WriteLine($"< {line.Format()}"); - - switch (line.Command) - { - case "PING": - Send(new Line("PONG", line.Params[0])); - break; - case "001": - Send(new Line("JOIN", "#irctokens")); - break; - case "PRIVMSG": - Send(new Line("PRIVMSG", line.Params[0], "hello there")); - break; - } + case "PING": + Send(new("PONG", line.Params[0])); + break; + case "001": + Send(new("JOIN", "#irctokens")); + break; + case "PRIVMSG": + Send(new("PRIVMSG", line.Params[0], "hello there")); + break; } } } - - private void Send(Line line) - { - Console.WriteLine($"> {line.Format()}"); - _encoder.Push(line); - while (_encoder.PendingBytes.Length > 0) - _encoder.Pop(_socket.Send(_encoder.PendingBytes, SocketFlags.None)); - } } -} + + private void Send(Line line) + { + Console.WriteLine($"> {line.Format()}"); + _encoder.Push(line); + while (_encoder.PendingBytes.Length > 0) + _encoder.Pop(_socket.Send(_encoder.PendingBytes, SocketFlags.None)); + } +} \ No newline at end of file diff --git a/Examples/Tokens/Program.cs b/Examples/Tokens/Program.cs index 9f31dbd..9c28646 100644 --- a/Examples/Tokens/Program.cs +++ b/Examples/Tokens/Program.cs @@ -1,25 +1,18 @@ -using System; +// tokenization + +using System; using IRCTokens; +using Tokens; -namespace Tokens -{ - public class Program - { - public static void Main(string[] args) - { - // tokenization - var line = new Line("@id=123 :ben!~ben@hostname PRIVMSG #channel :hello there!"); - Console.WriteLine(line); - Console.WriteLine(line.Format()); +var line = new Line("@id=123 :ben!~ben@hostname PRIVMSG #channel :hello there!"); +Console.WriteLine(line); +Console.WriteLine(line.Format()); - // formatting - var line2 = new Line("USER", "user", "0", "*", "real name"); - Console.WriteLine(line2); - Console.WriteLine(line2.Format()); +// formatting +var line2 = new Line("USER", "user", "0", "*", "real name"); +Console.WriteLine(line2); +Console.WriteLine(line2.Format()); - // stateful example - var client = new Client(); - client.Start(); - } - } -} +// stateful example +var client = new Client(); +client.Start(); diff --git a/Examples/Tokens/Tokens.csproj b/Examples/Tokens/Tokens.csproj index f852d06..31383ae 100644 --- a/Examples/Tokens/Tokens.csproj +++ b/Examples/Tokens/Tokens.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net8.0 diff --git a/IRCSharp.Tests/IRCSharp.Tests.csproj b/IRCSharp.Tests/IRCSharp.Tests.csproj index 9227e87..160d899 100644 --- a/IRCSharp.Tests/IRCSharp.Tests.csproj +++ b/IRCSharp.Tests/IRCSharp.Tests.csproj @@ -1,15 +1,15 @@  - netstandard2.1;net6.0 + net8.0 false - - - - + + + + diff --git a/IRCSharp.Tests/State/Cap.cs b/IRCSharp.Tests/State/Cap.cs index ea2c718..c60e8ff 100644 --- a/IRCSharp.Tests/State/Cap.cs +++ b/IRCSharp.Tests/State/Cap.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -13,7 +12,7 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); + _server = new("test"); } [TestMethod] @@ -21,16 +20,16 @@ namespace IRCSharp.Tests.State { Assert.IsFalse(_server.HasCap); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); - _server.Parse(new Line("CAP * LS :a b")); + _server.Parse(new("CAP * LS :a b")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}}, _server.AvailableCaps); } [TestMethod] public void LsTwoLines() { - _server.Parse(new Line("CAP * LS * :a b")); + _server.Parse(new("CAP * LS * :a b")); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); - _server.Parse(new Line("CAP * LS :c")); + _server.Parse(new("CAP * LS :c")); Assert.IsTrue(_server.AvailableCaps.ContainsKey("a")); Assert.IsTrue(_server.AvailableCaps.ContainsKey("b")); Assert.IsTrue(_server.AvailableCaps.ContainsKey("c")); @@ -39,7 +38,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void LsValues() { - _server.Parse(new Line("CAP * LS :a b= c=1")); + _server.Parse(new("CAP * LS :a b= c=1")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", "1"}}, _server.AvailableCaps); } @@ -47,48 +46,48 @@ namespace IRCSharp.Tests.State [TestMethod] public void ACKOneLine() { - _server.Parse(new Line("CAP * LS :a b")); - _server.Parse(new Line("CAP * ACK :a b")); + _server.Parse(new("CAP * LS :a b")); + _server.Parse(new("CAP * ACK :a b")); CollectionAssert.AreEqual(new List {"a", "b"}, _server.AgreedCaps); } [TestMethod] public void ACKTwoLines() { - _server.Parse(new Line("CAP * LS :a b c")); - _server.Parse(new Line("CAP * ACK * :a b")); - _server.Parse(new Line("CAP * ACK :c")); + _server.Parse(new("CAP * LS :a b c")); + _server.Parse(new("CAP * ACK * :a b")); + _server.Parse(new("CAP * ACK :c")); CollectionAssert.AreEqual(new List {"a", "b", "c"}, _server.AgreedCaps); } [TestMethod] public void ACKNotLs() { - _server.Parse(new Line("CAP * LS a")); - _server.Parse(new Line("CAP * ACK b")); + _server.Parse(new("CAP * LS a")); + _server.Parse(new("CAP * ACK b")); CollectionAssert.AreEqual(new List(), _server.AgreedCaps); } [TestMethod] public void NewNoLs() { - _server.Parse(new Line("CAP * NEW :a")); + _server.Parse(new("CAP * NEW :a")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}}, _server.AvailableCaps); } [TestMethod] public void NewOneLine() { - _server.Parse(new Line("CAP * LS :a")); - _server.Parse(new Line("CAP * NEW :b")); + _server.Parse(new("CAP * LS :a")); + _server.Parse(new("CAP * NEW :b")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}}, _server.AvailableCaps); } [TestMethod] public void NewTwoLines() { - _server.Parse(new Line("CAP * LS :a")); - _server.Parse(new Line("CAP * NEW :b c")); + _server.Parse(new("CAP * LS :a")); + _server.Parse(new("CAP * NEW :b c")); CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", ""}}, _server.AvailableCaps); } @@ -96,15 +95,15 @@ namespace IRCSharp.Tests.State [TestMethod] public void DelNotAcked() { - _server.Parse(new Line("CAP * DEL a")); + _server.Parse(new("CAP * DEL a")); } [TestMethod] public void DELOneLS() { - _server.Parse(new Line("CAP * LS :a")); - _server.Parse(new Line("CAP * ACK :a")); - _server.Parse(new Line("CAP * DEL :a")); + _server.Parse(new("CAP * LS :a")); + _server.Parse(new("CAP * ACK :a")); + _server.Parse(new("CAP * DEL :a")); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); CollectionAssert.AreEqual(new List(), _server.AgreedCaps); } @@ -112,9 +111,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void DelTwoLs() { - _server.Parse(new Line("CAP * LS :a b")); - _server.Parse(new Line("CAP * ACK :a b")); - _server.Parse(new Line("CAP * DEL :a")); + _server.Parse(new("CAP * LS :a b")); + _server.Parse(new("CAP * ACK :a b")); + _server.Parse(new("CAP * DEL :a")); CollectionAssert.AreEqual(new Dictionary {{"b", ""}}, _server.AvailableCaps); CollectionAssert.AreEqual(new List {"b"}, _server.AgreedCaps); } @@ -122,9 +121,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void DelTwoDel() { - _server.Parse(new Line("CAP * LS :a b")); - _server.Parse(new Line("CAP * ACK :a b")); - _server.Parse(new Line("CAP * DEL :a b")); + _server.Parse(new("CAP * LS :a b")); + _server.Parse(new("CAP * ACK :a b")); + _server.Parse(new("CAP * DEL :a b")); CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps); CollectionAssert.AreEqual(new List(), _server.AgreedCaps); } diff --git a/IRCSharp.Tests/State/Casemap.cs b/IRCSharp.Tests/State/Casemap.cs index 29b84d6..c385f75 100644 --- a/IRCSharp.Tests/State/Casemap.cs +++ b/IRCSharp.Tests/State/Casemap.cs @@ -1,5 +1,4 @@ using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -25,9 +24,9 @@ namespace IRCSharp.Tests.State public void CommandJoin() { var server = new Server("test"); - server.Parse(new Line("001 nickname")); - server.Parse(new Line(":Nickname JOIN #Chan")); - server.Parse(new Line(":Other JOIN #Chan")); + server.Parse(new("001 nickname")); + server.Parse(new(":Nickname JOIN #Chan")); + server.Parse(new(":Other JOIN #Chan")); Assert.IsTrue(server.Users.ContainsKey("nickname")); Assert.IsFalse(server.Users.ContainsKey("Nickname")); @@ -44,10 +43,10 @@ namespace IRCSharp.Tests.State public void CommandNick() { var server = new Server("test"); - server.Parse(new Line("001 nickname")); - server.Parse(new Line(":nickname JOIN #chan")); + server.Parse(new("001 nickname")); + server.Parse(new(":nickname JOIN #chan")); var user = server.Users["nickname"]; - server.Parse(new Line(":nickname NICK NewNickname")); + server.Parse(new(":nickname NICK NewNickname")); Assert.AreEqual(1, server.Users.Count); Assert.IsTrue(server.Users.ContainsKey("newnickname")); Assert.AreEqual("NewNickname", user.NickName); diff --git a/IRCSharp.Tests/State/Channel.cs b/IRCSharp.Tests/State/Channel.cs index 10d8a57..aa506bc 100644 --- a/IRCSharp.Tests/State/Channel.cs +++ b/IRCSharp.Tests/State/Channel.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -15,9 +14,9 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("001 nickname")); - _server.Parse(new Line(":nickname JOIN #chan")); + _server = new("test"); + _server.Parse(new("001 nickname")); + _server.Parse(new(":nickname JOIN #chan")); } [TestMethod] @@ -37,7 +36,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void JoinOther() { - _server.Parse(new Line(":other JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); Assert.AreEqual(2, _server.Users.Count); Assert.IsTrue(_server.Users.ContainsKey("other")); @@ -52,7 +51,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void PartSelf() { - _server.Parse(new Line(":nickname PART #chan")); + _server.Parse(new(":nickname PART #chan")); Assert.AreEqual(0, _server.Users.Count); Assert.AreEqual(0, _server.Channels.Count); @@ -61,8 +60,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void PartOther() { - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":other PART #chan")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":other PART #chan")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; @@ -77,7 +76,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void KickSelf() { - _server.Parse(new Line(":nickname KICK #chan nickname")); + _server.Parse(new(":nickname KICK #chan nickname")); Assert.AreEqual(0, _server.Users.Count); Assert.AreEqual(0, _server.Channels.Count); @@ -86,8 +85,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void KickOther() { - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":nickname KICK #chan other")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":nickname KICK #chan other")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; @@ -103,7 +102,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void QuitSelf() { - _server.Parse(new Line("QUIT :i'm outta here")); + _server.Parse(new("QUIT :i'm outta here")); Assert.IsFalse(_server.Users.Any()); Assert.IsFalse(_server.Channels.Any()); } @@ -111,7 +110,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void QuitSelfWithSource() { - _server.Parse(new Line(":nickname QUIT :i'm outta here")); + _server.Parse(new(":nickname QUIT :i'm outta here")); Assert.IsFalse(_server.Users.Any()); Assert.IsFalse(_server.Channels.Any()); } @@ -119,15 +118,15 @@ namespace IRCSharp.Tests.State [TestMethod] public void QuitOther() { - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":other QUIT :see ya")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":other QUIT :see ya")); Assert.IsFalse(_server.Users.ContainsKey("other")); } [TestMethod] public void TopicText() { - _server.Parse(new Line("332 * #chan :test")); + _server.Parse(new("332 * #chan :test")); Assert.AreEqual("test", _server.Channels["#chan"].Topic); } @@ -135,7 +134,7 @@ namespace IRCSharp.Tests.State public void TopicSetByAt() { var dt = DateTimeOffset.FromUnixTimeSeconds(1584023277).DateTime; - _server.Parse(new Line("333 * #chan other 1584023277")); + _server.Parse(new("333 * #chan other 1584023277")); var channel = _server.Channels["#chan"]; @@ -146,21 +145,21 @@ namespace IRCSharp.Tests.State [TestMethod] public void TopicCommand() { - _server.Parse(new Line("TOPIC #chan :hello there")); + _server.Parse(new("TOPIC #chan :hello there")); Assert.AreEqual("hello there", _server.Channels["#chan"].Topic); } [TestMethod] public void CreationDate() { - _server.Parse(new Line("329 * #chan 1584041889")); + _server.Parse(new("329 * #chan 1584041889")); Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1584041889).DateTime, _server.Channels["#chan"].Created); } [TestMethod] public void NamesCommand() { - _server.Parse(new Line("353 * * #chan :nickname @+other")); + _server.Parse(new("353 * * #chan :nickname @+other")); Assert.IsTrue(_server.Users.ContainsKey("nickname")); Assert.IsTrue(_server.Users.ContainsKey("other")); @@ -179,7 +178,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void UserhostInNames() { - _server.Parse(new Line("353 * * #chan :nickname!user@host other!user2@host2")); + _server.Parse(new("353 * * #chan :nickname!user@host other!user2@host2")); Assert.AreEqual("user", _server.UserName); Assert.AreEqual("host", _server.HostName); @@ -194,7 +193,7 @@ namespace IRCSharp.Tests.State var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; var chanUser = channel.Users[user.NickNameLower]; - _server.Parse(new Line(":nickname NICK nickname2")); + _server.Parse(new(":nickname NICK nickname2")); CollectionAssert.AreEqual(new Dictionary {{user.NickNameLower, chanUser}}, channel.Users); } diff --git a/IRCSharp.Tests/State/Emit.cs b/IRCSharp.Tests/State/Emit.cs index 2b4d559..973104b 100644 --- a/IRCSharp.Tests/State/Emit.cs +++ b/IRCSharp.Tests/State/Emit.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -13,21 +12,21 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("001 nickname")); + _server = new("test"); + _server.Parse(new("001 nickname")); } [TestMethod] public void EmitJoin() { - var emit = _server.Parse(new Line(":nickname JOIN #chan")); + var emit = _server.Parse(new(":nickname JOIN #chan")); Assert.AreEqual("JOIN", emit.Command); Assert.IsTrue(emit.Self); Assert.AreEqual(_server.Users["nickname"], emit.User); Assert.AreEqual(_server.Channels["#chan"], emit.Channel); - emit = _server.Parse(new Line(":other JOIN #chan")); + emit = _server.Parse(new(":other JOIN #chan")); Assert.IsNotNull(emit); Assert.AreEqual("JOIN", emit.Command); Assert.IsFalse(emit.Self); @@ -38,8 +37,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void EmitPrivmsg() { - _server.Parse(new Line(":nickname JOIN #chan")); - var emit = _server.Parse(new Line(":nickname PRIVMSG #chan :hello")); + _server.Parse(new(":nickname JOIN #chan")); + var emit = _server.Parse(new(":nickname PRIVMSG #chan :hello")); Assert.IsNotNull(emit); Assert.AreEqual("PRIVMSG", emit.Command); @@ -48,8 +47,8 @@ namespace IRCSharp.Tests.State Assert.AreEqual(_server.Users["nickname"], emit.User); Assert.AreEqual(_server.Channels["#chan"], emit.Channel); - _server.Parse(new Line(":other JOIN #chan")); - emit = _server.Parse(new Line(":other PRIVMSG #chan :hello2")); + _server.Parse(new(":other JOIN #chan")); + emit = _server.Parse(new(":other PRIVMSG #chan :hello2")); Assert.IsNotNull(emit); Assert.AreEqual("PRIVMSG", emit.Command); @@ -62,8 +61,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void EmitPrivmsgNoJoin() { - _server.Parse(new Line(":nickname JOIN #chan")); - var emit = _server.Parse(new Line(":other PRIVMSG #chan :hello")); + _server.Parse(new(":nickname JOIN #chan")); + var emit = _server.Parse(new(":other PRIVMSG #chan :hello")); Assert.IsNotNull(emit); Assert.AreEqual("PRIVMSG", emit.Command); @@ -78,13 +77,13 @@ namespace IRCSharp.Tests.State [TestMethod] public void EmitKick() { - _server.Parse(new Line(":nickname JOIN #chan")); + _server.Parse(new(":nickname JOIN #chan")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; - _server.Parse(new Line(":other JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); var userOther = _server.Users["other"]; - var emit = _server.Parse(new Line(":nickname KICK #chan other :reason")); + var emit = _server.Parse(new(":nickname KICK #chan other :reason")); Assert.IsNotNull(emit); Assert.AreEqual("KICK", emit.Command); @@ -98,7 +97,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void EmitMode() { - var emit = _server.Parse(new Line("MODE nickname x+i-i+wi-wi")); + var emit = _server.Parse(new("MODE nickname x+i-i+wi-wi")); Assert.IsNotNull(emit); Assert.AreEqual("MODE", emit.Command); diff --git a/IRCSharp.Tests/State/ISupport.cs b/IRCSharp.Tests/State/ISupport.cs index a25cba8..476999a 100644 --- a/IRCSharp.Tests/State/ISupport.cs +++ b/IRCSharp.Tests/State/ISupport.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; // ReSharper disable InconsistentNaming @@ -15,8 +14,8 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("001 nickname")); + _server = new("test"); + _server.Parse(new("001 nickname")); } [TestMethod] @@ -35,7 +34,7 @@ namespace IRCSharp.Tests.State "t" }, _server.ISupport.ChanModes.SettingDModes); - _server.Parse(new Line("005 * CHANMODES=a,b,c,d *")); + _server.Parse(new("005 * CHANMODES=a,b,c,d *")); CollectionAssert.AreEqual(new List {"a"}, _server.ISupport.ChanModes.ListModes); CollectionAssert.AreEqual(new List {"b"}, _server.ISupport.ChanModes.SettingBModes); @@ -54,7 +53,7 @@ namespace IRCSharp.Tests.State Assert.AreEqual("o", _server.ISupport.Prefix.FromPrefix("@")); Assert.IsNull(_server.ISupport.Prefix.FromPrefix("&")); - _server.Parse(new Line("005 * PREFIX=(qaohv)~&@%+ *")); + _server.Parse(new("005 * PREFIX=(qaohv)~&@%+ *")); CollectionAssert.AreEqual(new List { "q", @@ -79,7 +78,7 @@ namespace IRCSharp.Tests.State public void ChanTypes() { CollectionAssert.AreEqual(new List {"#"}, _server.ISupport.ChanTypes); - _server.Parse(new Line("005 * CHANTYPES=#& *")); + _server.Parse(new("005 * CHANTYPES=#& *")); CollectionAssert.AreEqual(new List {"#", "&"}, _server.ISupport.ChanTypes); } @@ -88,10 +87,10 @@ namespace IRCSharp.Tests.State { Assert.AreEqual(3, _server.ISupport.Modes); - _server.Parse(new Line("005 * MODES *")); + _server.Parse(new("005 * MODES *")); Assert.AreEqual(-1, _server.ISupport.Modes); - _server.Parse(new Line("005 * MODES=5 *")); + _server.Parse(new("005 * MODES=5 *")); Assert.AreEqual(5, _server.ISupport.Modes); } @@ -99,7 +98,7 @@ namespace IRCSharp.Tests.State public void Rfc1459() { Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping); - _server.Parse(new Line("005 * CASEMAPPING=rfc1459 *")); + _server.Parse(new("005 * CASEMAPPING=rfc1459 *")); Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping); var lower = _server.CaseFold(@"ÀTEST[]~\"); Assert.AreEqual("Àtest{}^|", lower); @@ -108,7 +107,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void Ascii() { - _server.Parse(new Line("005 * CASEMAPPING=ascii *")); + _server.Parse(new("005 * CASEMAPPING=ascii *")); Assert.AreEqual(IRCStates.Casemap.CaseMapping.Ascii, _server.ISupport.CaseMapping); var lower = _server.CaseFold(@"ÀTEST[]~\"); Assert.AreEqual(@"Àtest[]~\", lower); @@ -117,7 +116,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void FallbackToRfc1459() { - _server.Parse(new Line("005 * CASEMAPPING=nonexistent *")); + _server.Parse(new("005 * CASEMAPPING=nonexistent *")); Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping); var lower = _server.CaseFold(@"ÀTEST[]~\"); Assert.AreEqual("Àtest{}^|", lower); @@ -127,7 +126,7 @@ namespace IRCSharp.Tests.State public void Network() { Assert.IsNull(_server.ISupport.Network); - _server.Parse(new Line("005 * NETWORK=testnet *")); + _server.Parse(new("005 * NETWORK=testnet *")); Assert.AreEqual("testnet", _server.ISupport.Network); } @@ -135,7 +134,7 @@ namespace IRCSharp.Tests.State public void StatusMsg() { CollectionAssert.AreEqual(new List(), _server.ISupport.StatusMsg); - _server.Parse(new Line("005 * STATUSMSG=&@ *")); + _server.Parse(new("005 * STATUSMSG=&@ *")); CollectionAssert.AreEqual(new List {"&", "@"}, _server.ISupport.StatusMsg); } @@ -144,10 +143,10 @@ namespace IRCSharp.Tests.State { Assert.IsNull(_server.ISupport.CallerId); - _server.Parse(new Line("005 * CALLERID=U *")); + _server.Parse(new("005 * CALLERID=U *")); Assert.AreEqual("U", _server.ISupport.CallerId); - _server.Parse(new Line("005 * CALLERID *")); + _server.Parse(new("005 * CALLERID *")); Assert.AreEqual("g", _server.ISupport.CallerId); } @@ -156,10 +155,10 @@ namespace IRCSharp.Tests.State { Assert.IsNull(_server.ISupport.Excepts); - _server.Parse(new Line("005 * EXCEPTS=U *")); + _server.Parse(new("005 * EXCEPTS=U *")); Assert.AreEqual("U", _server.ISupport.Excepts); - _server.Parse(new Line("005 * EXCEPTS *")); + _server.Parse(new("005 * EXCEPTS *")); Assert.AreEqual("e", _server.ISupport.Excepts); } @@ -168,10 +167,10 @@ namespace IRCSharp.Tests.State { Assert.IsNull(_server.ISupport.Invex); - _server.Parse(new Line("005 * INVEX=U *")); + _server.Parse(new("005 * INVEX=U *")); Assert.AreEqual("U", _server.ISupport.Invex); - _server.Parse(new Line("005 * INVEX *")); + _server.Parse(new("005 * INVEX *")); Assert.AreEqual("I", _server.ISupport.Invex); } @@ -180,7 +179,7 @@ namespace IRCSharp.Tests.State { Assert.IsFalse(_server.ISupport.Whox); - _server.Parse(new Line("005 * WHOX *")); + _server.Parse(new("005 * WHOX *")); Assert.IsTrue(_server.ISupport.Whox); } @@ -189,10 +188,10 @@ namespace IRCSharp.Tests.State { Assert.IsNull(_server.ISupport.Monitor); - _server.Parse(new Line("005 * MONITOR=123 *")); + _server.Parse(new("005 * MONITOR=123 *")); Assert.AreEqual(123, _server.ISupport.Monitor); - _server.Parse(new Line("005 * MONITOR *")); + _server.Parse(new("005 * MONITOR *")); Assert.AreEqual(-1, _server.ISupport.Monitor); } @@ -201,10 +200,10 @@ namespace IRCSharp.Tests.State { Assert.IsNull(_server.ISupport.Watch); - _server.Parse(new Line("005 * WATCH=123 *")); + _server.Parse(new("005 * WATCH=123 *")); Assert.AreEqual(123, _server.ISupport.Watch); - _server.Parse(new Line("005 * WATCH *")); + _server.Parse(new("005 * WATCH *")); Assert.AreEqual(-1, _server.ISupport.Watch); } } diff --git a/IRCSharp.Tests/State/Mode.cs b/IRCSharp.Tests/State/Mode.cs index 79b8dba..8731500 100644 --- a/IRCSharp.Tests/State/Mode.cs +++ b/IRCSharp.Tests/State/Mode.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -13,30 +12,30 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("001 nickname")); + _server = new("test"); + _server.Parse(new("001 nickname")); } [TestMethod] public void UModeAdd() { - _server.Parse(new Line("MODE nickname +i")); + _server.Parse(new("MODE nickname +i")); CollectionAssert.AreEqual(new List {"i"}, _server.Modes); } [TestMethod] public void UModeRemove() { - _server.Parse(new Line("MODE nickname +i")); - _server.Parse(new Line("MODE nickname -i")); + _server.Parse(new("MODE nickname +i")); + _server.Parse(new("MODE nickname -i")); CollectionAssert.AreEqual(new List(), _server.Modes); } [TestMethod] public void PrefixAdd() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +ov nickname nickname")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +ov nickname nickname")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; @@ -47,9 +46,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void PrefixRemove() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +ov nickname nickname")); - _server.Parse(new Line("MODE #chan -ov nickname nickname")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +ov nickname nickname")); + _server.Parse(new("MODE #chan -ov nickname nickname")); var user = _server.Users["nickname"]; var channel = _server.Channels["#chan"]; @@ -60,8 +59,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelListAdd() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +b asd!*@*")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +b asd!*@*")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new List {"asd!*@*"}, channel.ListModes["b"]); @@ -70,9 +69,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelListRemove() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +b asd!*@*")); - _server.Parse(new Line("MODE #chan -b asd!*@*")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +b asd!*@*")); + _server.Parse(new("MODE #chan -b asd!*@*")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary>(), channel.ListModes); @@ -81,8 +80,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelTypeBAdd() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +k password")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +k password")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"k", "password"}}, channel.Modes); @@ -91,9 +90,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelTypeBRemove() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +k password")); - _server.Parse(new Line("MODE #chan -k *")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +k password")); + _server.Parse(new("MODE #chan -k *")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary(), channel.Modes); @@ -102,8 +101,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelTypeCAdd() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +l 100")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +l 100")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"l", "100"}}, channel.Modes); @@ -112,9 +111,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelTypeCRemove() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +l 100")); - _server.Parse(new Line("MODE #chan -l")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +l 100")); + _server.Parse(new("MODE #chan -l")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary(), channel.Modes); @@ -123,8 +122,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelTypeDAdd() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +i")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +i")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"i", null}}, channel.Modes); @@ -133,9 +132,9 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelTypeDRemove() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("MODE #chan +i")); - _server.Parse(new Line("MODE #chan -i")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("MODE #chan +i")); + _server.Parse(new("MODE #chan -i")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary(), channel.Modes); @@ -144,8 +143,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelNumeric() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("324 * #chan +bkli *!*@* pass 10")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("324 * #chan +bkli *!*@* pass 10")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"k", "pass"}, {"l", "10"}, {"i", null}}, @@ -156,8 +155,8 @@ namespace IRCSharp.Tests.State [TestMethod] public void ChannelNumericWithoutPlus() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("324 * #chan il 10")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("324 * #chan il 10")); var channel = _server.Channels["#chan"]; CollectionAssert.AreEqual(new Dictionary {{"i", null}, {"l", "10"}}, channel.Modes); @@ -166,14 +165,14 @@ namespace IRCSharp.Tests.State [TestMethod] public void UserNumeric() { - _server.Parse(new Line("221 * +iw")); + _server.Parse(new("221 * +iw")); CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes); } [TestMethod] public void UserNumericWithoutPlus() { - _server.Parse(new Line("221 * iw")); + _server.Parse(new("221 * iw")); CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes); } } diff --git a/IRCSharp.Tests/State/Motd.cs b/IRCSharp.Tests/State/Motd.cs index 3efbce7..fefd8ed 100644 --- a/IRCSharp.Tests/State/Motd.cs +++ b/IRCSharp.Tests/State/Motd.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -12,10 +11,10 @@ namespace IRCSharp.Tests.State public void MessageOfTheDay() { var server = new Server("test"); - server.Parse(new Line("001 nickname")); - server.Parse(new Line("375 * :start of motd")); - server.Parse(new Line("372 * :first line of motd")); - server.Parse(new Line("372 * :second line of motd")); + server.Parse(new("001 nickname")); + server.Parse(new("375 * :start of motd")); + server.Parse(new("372 * :first line of motd")); + server.Parse(new("372 * :second line of motd")); CollectionAssert.AreEqual(new List {"start of motd", "first line of motd", "second line of motd"}, server.Motd); diff --git a/IRCSharp.Tests/State/Sasl.cs b/IRCSharp.Tests/State/Sasl.cs index 3056a58..e3ce67d 100644 --- a/IRCSharp.Tests/State/Sasl.cs +++ b/IRCSharp.Tests/State/Sasl.cs @@ -1,5 +1,4 @@ using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -12,8 +11,8 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("900 * nick!user@host account")); + _server = new("test"); + _server.Parse(new("900 * nick!user@host account")); } [TestMethod] @@ -28,7 +27,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void LoggedOut() { - _server.Parse(new Line("901 * nick1!user1@host1")); + _server.Parse(new("901 * nick1!user1@host1")); Assert.AreEqual("nick1", _server.NickName); Assert.AreEqual("user1", _server.UserName); diff --git a/IRCSharp.Tests/State/User.cs b/IRCSharp.Tests/State/User.cs index b1c1caf..7e43cfb 100644 --- a/IRCSharp.Tests/State/User.cs +++ b/IRCSharp.Tests/State/User.cs @@ -1,5 +1,4 @@ using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -12,8 +11,8 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("001 nickname")); + _server = new("test"); + _server.Parse(new("001 nickname")); } [TestMethod] @@ -26,14 +25,14 @@ namespace IRCSharp.Tests.State [TestMethod] public void NicknameChange() { - _server.Parse(new Line(":nickname NICK nickname2")); + _server.Parse(new(":nickname NICK nickname2")); Assert.AreEqual("nickname2", _server.NickName); - _server.Parse(new Line(":nickname2 JOIN #chan")); - _server.Parse(new Line(":other JOIN #chan")); + _server.Parse(new(":nickname2 JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); Assert.IsTrue(_server.Users.ContainsKey("other")); - _server.Parse(new Line(":other NICK other2")); + _server.Parse(new(":other NICK other2")); Assert.IsFalse(_server.Users.ContainsKey("other")); Assert.IsTrue(_server.Users.ContainsKey("other2")); } @@ -41,11 +40,11 @@ namespace IRCSharp.Tests.State [TestMethod] public void HostmaskJoinBoth() { - _server.Parse(new Line(":nickname!user@host JOIN #chan")); + _server.Parse(new(":nickname!user@host JOIN #chan")); Assert.AreEqual("user", _server.UserName); Assert.AreEqual("host", _server.HostName); - _server.Parse(new Line(":other!user@host JOIN #chan")); + _server.Parse(new(":other!user@host JOIN #chan")); var user = _server.Users["other"]; Assert.AreEqual("user", user.UserName); Assert.AreEqual("host", user.HostName); @@ -54,11 +53,11 @@ namespace IRCSharp.Tests.State [TestMethod] public void HostmaskJoinUser() { - _server.Parse(new Line(":nickname!user JOIN #chan")); + _server.Parse(new(":nickname!user JOIN #chan")); Assert.AreEqual("user", _server.UserName); Assert.IsNull(_server.HostName); - _server.Parse(new Line(":other!user JOIN #chan")); + _server.Parse(new(":other!user JOIN #chan")); var user = _server.Users["other"]; Assert.AreEqual("user", user.UserName); Assert.IsNull(user.HostName); @@ -67,11 +66,11 @@ namespace IRCSharp.Tests.State [TestMethod] public void HostmaskJoinHost() { - _server.Parse(new Line(":nickname@host JOIN #chan")); + _server.Parse(new(":nickname@host JOIN #chan")); Assert.IsNull(_server.UserName); Assert.AreEqual("host", _server.HostName); - _server.Parse(new Line(":other@host JOIN #chan")); + _server.Parse(new(":other@host JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(user.UserName); Assert.AreEqual("host", user.HostName); @@ -80,11 +79,11 @@ namespace IRCSharp.Tests.State [TestMethod] public void ExtendedJoinWithoutExtendedJoin() { - _server.Parse(new Line(":nickname JOIN #chan")); + _server.Parse(new(":nickname JOIN #chan")); Assert.IsNull(_server.Account); Assert.IsNull(_server.RealName); - _server.Parse(new Line(":other JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(user.Account); Assert.IsNull(user.RealName); @@ -93,11 +92,11 @@ namespace IRCSharp.Tests.State [TestMethod] public void ExtendedJoinWithAccount() { - _server.Parse(new Line(":nickname JOIN #chan acc :realname")); + _server.Parse(new(":nickname JOIN #chan acc :realname")); Assert.AreEqual("acc", _server.Account); Assert.AreEqual("realname", _server.RealName); - _server.Parse(new Line(":other JOIN #chan acc2 :realname2")); + _server.Parse(new(":other JOIN #chan acc2 :realname2")); var user = _server.Users["other"]; Assert.AreEqual("acc2", user.Account); Assert.AreEqual("realname2", user.RealName); @@ -106,11 +105,11 @@ namespace IRCSharp.Tests.State [TestMethod] public void ExtendedJoinWithoutAccount() { - _server.Parse(new Line(":nickname JOIN #chan * :realname")); + _server.Parse(new(":nickname JOIN #chan * :realname")); Assert.AreEqual("", _server.Account); Assert.AreEqual("realname", _server.RealName); - _server.Parse(new Line(":other JOIN #chan * :realname2")); + _server.Parse(new(":other JOIN #chan * :realname2")); var user = _server.Users["other"]; Assert.AreEqual("", user.Account); Assert.AreEqual("realname2", user.RealName); @@ -119,12 +118,12 @@ namespace IRCSharp.Tests.State [TestMethod] public void AccountNotifyWithAccount() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":nickname ACCOUNT acc")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":nickname ACCOUNT acc")); Assert.AreEqual("acc", _server.Account); - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":other ACCOUNT acc2")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":other ACCOUNT acc2")); var user = _server.Users["other"]; Assert.AreEqual("acc2", user.Account); } @@ -132,12 +131,12 @@ namespace IRCSharp.Tests.State [TestMethod] public void AccountNotifyWithoutAccount() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":nickname ACCOUNT *")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":nickname ACCOUNT *")); Assert.AreEqual("", _server.Account); - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":other ACCOUNT *")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":other ACCOUNT *")); var user = _server.Users["other"]; Assert.AreEqual("", user.Account); } @@ -145,12 +144,12 @@ namespace IRCSharp.Tests.State [TestMethod] public void HostmaskPrivmsgBoth() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":nickname!user@host PRIVMSG #chan :hi")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":nickname!user@host PRIVMSG #chan :hi")); Assert.AreEqual("user", _server.UserName); Assert.AreEqual("host", _server.HostName); - _server.Parse(new Line(":other!user@host PRIVMSG #chan :hi")); + _server.Parse(new(":other!user@host PRIVMSG #chan :hi")); var user = _server.Users["other"]; Assert.AreEqual("user", user.UserName); Assert.AreEqual("host", user.HostName); @@ -159,12 +158,12 @@ namespace IRCSharp.Tests.State [TestMethod] public void HostmaskPrivmsgUser() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":nickname!user PRIVMSG #chan :hi")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":nickname!user PRIVMSG #chan :hi")); Assert.AreEqual("user", _server.UserName); Assert.IsNull(_server.HostName); - _server.Parse(new Line(":other!user PRIVMSG #chan :hi")); + _server.Parse(new(":other!user PRIVMSG #chan :hi")); var user = _server.Users["other"]; Assert.AreEqual("user", user.UserName); Assert.IsNull(user.HostName); @@ -173,12 +172,12 @@ namespace IRCSharp.Tests.State [TestMethod] public void HostmaskPrivmsgHost() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":nickname@host PRIVMSG #chan :hi")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":nickname@host PRIVMSG #chan :hi")); Assert.IsNull(_server.UserName); Assert.AreEqual("host", _server.HostName); - _server.Parse(new Line(":other@host PRIVMSG #chan :hi")); + _server.Parse(new(":other@host PRIVMSG #chan :hi")); var user = _server.Users["other"]; Assert.IsNull(user.UserName); Assert.AreEqual("host", user.HostName); @@ -187,7 +186,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void VisibleHostWithoutUsername() { - _server.Parse(new Line("396 * hostname")); + _server.Parse(new("396 * hostname")); Assert.IsNull(_server.UserName); Assert.AreEqual("hostname", _server.HostName); } @@ -195,7 +194,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void VisibleHostWithUsername() { - _server.Parse(new Line("396 * username@hostname")); + _server.Parse(new("396 * username@hostname")); Assert.AreEqual("username", _server.UserName); Assert.AreEqual("hostname", _server.HostName); } @@ -203,10 +202,10 @@ namespace IRCSharp.Tests.State [TestMethod] public void Who() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line("352 * #chan user host * nickname * :0 real")); - _server.Parse(new Line("352 * #chan user2 host2 * other * :0 real2")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new("352 * #chan user host * nickname * :0 real")); + _server.Parse(new("352 * #chan user2 host2 * other * :0 real2")); Assert.AreEqual("user", _server.UserName); Assert.AreEqual("host", _server.HostName); @@ -221,13 +220,13 @@ namespace IRCSharp.Tests.State [TestMethod] public void Chghost() { - _server.Parse(new Line(":nickname!user@host JOIN #chan")); - _server.Parse(new Line(":nickname CHGHOST u h")); + _server.Parse(new(":nickname!user@host JOIN #chan")); + _server.Parse(new(":nickname CHGHOST u h")); Assert.AreEqual("u", _server.UserName); Assert.AreEqual("h", _server.HostName); - _server.Parse(new Line(":other!user2@host2 JOIN #chan")); - _server.Parse(new Line(":other CHGHOST u2 h2")); + _server.Parse(new(":other!user2@host2 JOIN #chan")); + _server.Parse(new(":other CHGHOST u2 h2")); var user = _server.Users["other"]; Assert.AreEqual("u2", user.UserName); Assert.AreEqual("h2", user.HostName); @@ -236,15 +235,15 @@ namespace IRCSharp.Tests.State [TestMethod] public void Whois() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line("311 * nickname u h * :r")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new("311 * nickname u h * :r")); Assert.AreEqual("u", _server.UserName); Assert.AreEqual("h", _server.HostName); Assert.AreEqual("r", _server.RealName); - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":other CHGHOST u2 h2")); - _server.Parse(new Line("311 * other u2 h2 * :r2")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":other CHGHOST u2 h2")); + _server.Parse(new("311 * other u2 h2 * :r2")); var user = _server.Users["other"]; Assert.AreEqual("u2", user.UserName); Assert.AreEqual("h2", user.HostName); @@ -254,14 +253,14 @@ namespace IRCSharp.Tests.State [TestMethod] public void AwaySet() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":other JOIN #chan")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(_server.Away); Assert.IsNull(user.Away); - _server.Parse(new Line(":nickname AWAY :bye bye")); - _server.Parse(new Line(":other AWAY :ich geh weg")); + _server.Parse(new(":nickname AWAY :bye bye")); + _server.Parse(new(":other AWAY :ich geh weg")); Assert.AreEqual("bye bye", _server.Away); Assert.AreEqual("ich geh weg", user.Away); } @@ -269,12 +268,12 @@ namespace IRCSharp.Tests.State [TestMethod] public void AwayUnset() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":other JOIN #chan")); - _server.Parse(new Line(":nickname AWAY :bye bye")); - _server.Parse(new Line(":nickname AWAY")); - _server.Parse(new Line(":other AWAY :ich geh weg")); - _server.Parse(new Line(":other AWAY")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); + _server.Parse(new(":nickname AWAY :bye bye")); + _server.Parse(new(":nickname AWAY")); + _server.Parse(new(":other AWAY :ich geh weg")); + _server.Parse(new(":other AWAY")); var user = _server.Users["other"]; Assert.IsNull(_server.Away); @@ -284,14 +283,14 @@ namespace IRCSharp.Tests.State [TestMethod] public void Setname() { - _server.Parse(new Line(":nickname JOIN #chan")); - _server.Parse(new Line(":other JOIN #chan")); + _server.Parse(new(":nickname JOIN #chan")); + _server.Parse(new(":other JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(user.RealName); Assert.IsNull(_server.RealName); - _server.Parse(new Line(":nickname SETNAME :new now know how")); - _server.Parse(new Line(":other SETNAME :tyrannosaurus hex")); + _server.Parse(new(":nickname SETNAME :new now know how")); + _server.Parse(new(":other SETNAME :tyrannosaurus hex")); Assert.AreEqual("new now know how", _server.RealName); Assert.AreEqual("tyrannosaurus hex", user.RealName); } diff --git a/IRCSharp.Tests/State/Who.cs b/IRCSharp.Tests/State/Who.cs index 2220b12..610d707 100644 --- a/IRCSharp.Tests/State/Who.cs +++ b/IRCSharp.Tests/State/Who.cs @@ -1,5 +1,4 @@ using IRCStates; -using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State @@ -12,15 +11,15 @@ namespace IRCSharp.Tests.State [TestInitialize] public void TestInitialize() { - _server = new Server("test"); - _server.Parse(new Line("001 nickname")); - _server.Parse(new Line(":nickname JOIN #chan")); + _server = new("test"); + _server.Parse(new("001 nickname")); + _server.Parse(new(":nickname JOIN #chan")); } [TestMethod] public void WhoResponse() { - _server.Parse(new Line("352 * #chan user host server nickname * :0 real")); + _server.Parse(new("352 * #chan user host server nickname * :0 real")); var user = _server.Users["nickname"]; Assert.AreEqual("user", user.UserName); @@ -35,7 +34,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void Whox() { - _server.Parse(new Line($"354 * {Server.WhoType} user realip host nickname account :real")); + _server.Parse(new($"354 * {Server.WhoType} user realip host nickname account :real")); var user = _server.Users["nickname"]; Assert.AreEqual("user", user.UserName); @@ -52,7 +51,7 @@ namespace IRCSharp.Tests.State [TestMethod] public void WhoxNoAccount() { - _server.Parse(new Line($"354 * {Server.WhoType} user realip host nickname 0 :real")); + _server.Parse(new($"354 * {Server.WhoType} user realip host nickname 0 :real")); var user = _server.Users["nickname"]; Assert.IsNull(user.Account); diff --git a/IRCSharp.Tests/Tokenization/Format.cs b/IRCSharp.Tests/Tokenization/Format.cs index 5dc589a..97d3702 100644 --- a/IRCSharp.Tests/Tokenization/Format.cs +++ b/IRCSharp.Tests/Tokenization/Format.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -13,7 +12,7 @@ namespace IRCSharp.Tests.Tokenization { var line = new Line("PRIVMSG", "#channel", "hello") { - Tags = new Dictionary {{"id", "\\" + " " + ";" + "\r\n"}} + Tags = new() {{"id", "\\" + " " + ";" + "\r\n"}} }.Format(); Assert.AreEqual("@id=\\\\\\s\\:\\r\\n PRIVMSG #channel hello", line); @@ -30,7 +29,7 @@ namespace IRCSharp.Tests.Tokenization [TestMethod] public void NullTag() { - var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new Dictionary {{"a", null}}} + var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new() {{"a", null}}} .Format(); Assert.AreEqual("@a PRIVMSG #channel hello", line); @@ -39,7 +38,7 @@ namespace IRCSharp.Tests.Tokenization [TestMethod] public void EmptyTag() { - var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new Dictionary {{"a", ""}}} + var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new() {{"a", ""}}} .Format(); Assert.AreEqual("@a PRIVMSG #channel hello", line); diff --git a/IRCSharp.Tests/Tokenization/StatefulDecoder.cs b/IRCSharp.Tests/Tokenization/StatefulDecoder.cs index 7b9992d..403309a 100644 --- a/IRCSharp.Tests/Tokenization/StatefulDecoder.cs +++ b/IRCSharp.Tests/Tokenization/StatefulDecoder.cs @@ -13,7 +13,7 @@ namespace IRCSharp.Tests.Tokenization [TestInitialize] public void Initialize() { - _decoder = new IRCTokens.StatefulDecoder(); + _decoder = new(); } [TestMethod] @@ -45,7 +45,7 @@ namespace IRCSharp.Tests.Tokenization public void EncodingIso8859() { var iso8859 = Encoding.GetEncoding("iso-8859-1"); - _decoder = new IRCTokens.StatefulDecoder {Encoding = iso8859}; + _decoder = new() {Encoding = iso8859}; var bytes = iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"); var lines = _decoder.Push(bytes, bytes.Length); var line = new Line("PRIVMSG #channel :hello Ç"); @@ -56,7 +56,7 @@ namespace IRCSharp.Tests.Tokenization public void EncodingFallback() { var latin1 = Encoding.GetEncoding("iso-8859-1"); - _decoder = new IRCTokens.StatefulDecoder {Encoding = null, Fallback = latin1}; + _decoder = new() {Encoding = null, Fallback = latin1}; var bytes = latin1.GetBytes("PRIVMSG #channel hélló\r\n"); var lines = _decoder.Push(bytes, bytes.Length); Assert.AreEqual(1, lines.Count); diff --git a/IRCSharp.Tests/Tokenization/StatefulEncoder.cs b/IRCSharp.Tests/Tokenization/StatefulEncoder.cs index 50d2bd5..a2d1863 100644 --- a/IRCSharp.Tests/Tokenization/StatefulEncoder.cs +++ b/IRCSharp.Tests/Tokenization/StatefulEncoder.cs @@ -12,7 +12,7 @@ namespace IRCSharp.Tests.Tokenization [TestInitialize] public void Initialize() { - _encoder = new IRCTokens.StatefulEncoder(); + _encoder = new(); } [TestMethod] @@ -68,7 +68,7 @@ namespace IRCSharp.Tests.Tokenization [TestMethod] public void Clear() { - _encoder.Push(new Line("PRIVMSG #channel hello")); + _encoder.Push(new("PRIVMSG #channel hello")); _encoder.Clear(); Assert.AreEqual(string.Empty, _encoder.Pending()); } @@ -77,8 +77,8 @@ namespace IRCSharp.Tests.Tokenization public void EncodingIso8859() { var iso8859 = Encoding.GetEncoding("iso-8859-1"); - _encoder = new IRCTokens.StatefulEncoder {Encoding = iso8859}; - _encoder.Push(new Line("PRIVMSG #channel :hello Ç")); + _encoder = new() {Encoding = iso8859}; + _encoder.Push(new("PRIVMSG #channel :hello Ç")); CollectionAssert.AreEqual(iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"), _encoder.PendingBytes); } } diff --git a/IRCStates/Casemap.cs b/IRCStates/Casemap.cs index 4546e57..afbd499 100644 --- a/IRCStates/Casemap.cs +++ b/IRCStates/Casemap.cs @@ -13,7 +13,7 @@ namespace IRCStates private const string AsciiUpperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private const string AsciiLowerChars = "abcdefghijklmnopqrstuvwxyz"; private const string Rfc1459UpperChars = AsciiUpperChars + @"[]~\"; - private const string Rfc1459LowerChars = AsciiLowerChars + @"{}^|"; + private const string Rfc1459LowerChars = AsciiLowerChars + "{}^|"; private static string Replace(string s, string upper, string lower) { diff --git a/IRCStates/Channel.cs b/IRCStates/Channel.cs index a9d2302..36f395f 100644 --- a/IRCStates/Channel.cs +++ b/IRCStates/Channel.cs @@ -6,22 +6,15 @@ namespace IRCStates { public class Channel { - public Channel() - { - Users = new Dictionary(); - ListModes = new Dictionary>(); - Modes = new Dictionary(); - } - public string Name { get; private set; } public string NameLower { get; private set; } - public Dictionary Users { get; private set; } + public Dictionary Users { get; private set; } = new Dictionary(); public string Topic { get; set; } public string TopicSetter { get; set; } public DateTime TopicTime { get; set; } public DateTime Created { get; set; } - public Dictionary> ListModes { get; private set; } - public Dictionary Modes { get; private set; } + public Dictionary> ListModes { get; private set; } = new Dictionary>(); + public Dictionary Modes { get; private set; } = new Dictionary(); public override string ToString() { diff --git a/IRCStates/ChannelUser.cs b/IRCStates/ChannelUser.cs index bc5e99b..193aae3 100644 --- a/IRCStates/ChannelUser.cs +++ b/IRCStates/ChannelUser.cs @@ -4,12 +4,7 @@ namespace IRCStates { public class ChannelUser { - public ChannelUser() - { - Modes = new List(); - } - - public List Modes { get; } + public List Modes { get; } = new List(); private bool Equals(ChannelUser other) { diff --git a/IRCStates/IRCStates.csproj b/IRCStates/IRCStates.csproj index 08b2cfa..64cb89b 100644 --- a/IRCStates/IRCStates.csproj +++ b/IRCStates/IRCStates.csproj @@ -1,7 +1,7 @@ - netstandard2.1;net6.0 + netstandard2.1 IRCStates 1.3.0 Ben Harris diff --git a/IRCStates/ISupport.cs b/IRCStates/ISupport.cs index 8dfcb0c..1221ea6 100644 --- a/IRCStates/ISupport.cs +++ b/IRCStates/ISupport.cs @@ -9,26 +9,14 @@ namespace IRCStates { public class ISupport { - public ISupport() - { - Raw = new Dictionary(); - Modes = 3; - CaseMapping = Casemap.CaseMapping.Rfc1459; - Prefix = new ISupportPrefix("(ov)@+"); - ChanModes = new ISupportChanModes("b,k,l,imnpst"); - ChanTypes = new List {"#"}; - StatusMsg = new List(); - Whox = false; - } - - public Dictionary Raw { get; } + public Dictionary Raw { get; } = new Dictionary(); public string Network { get; private set; } - public ISupportChanModes ChanModes { get; private set; } - public ISupportPrefix Prefix { get; private set; } - public int? Modes { get; private set; } - public Casemap.CaseMapping CaseMapping { get; private set; } - public List ChanTypes { get; private set; } - public List StatusMsg { get; private set; } + public ISupportChanModes ChanModes { get; private set; } = new ISupportChanModes("b,k,l,imnpst"); + public ISupportPrefix Prefix { get; private set; } = new ISupportPrefix("(ov)@+"); + public int? Modes { get; private set; } = 3; + public Casemap.CaseMapping CaseMapping { get; private set; } = Casemap.CaseMapping.Rfc1459; + public List ChanTypes { get; private set; } = new List {"#"}; + public List StatusMsg { get; private set; } = new List(); public string CallerId { get; private set; } public string Excepts { get; private set; } public string Invex { get; private set; } diff --git a/IRCStates/ISupportChanModes.cs b/IRCStates/ISupportChanModes.cs index 5a175da..ed3d740 100644 --- a/IRCStates/ISupportChanModes.cs +++ b/IRCStates/ISupportChanModes.cs @@ -4,6 +4,7 @@ using System.Linq; namespace IRCStates { + // ReSharper disable once InconsistentNaming public class ISupportChanModes { /// diff --git a/IRCStates/ISupportPrefix.cs b/IRCStates/ISupportPrefix.cs index 146bdcc..2f20bd6 100644 --- a/IRCStates/ISupportPrefix.cs +++ b/IRCStates/ISupportPrefix.cs @@ -5,6 +5,7 @@ using System.Linq; namespace IRCStates { + // ReSharper disable once InconsistentNaming public class ISupportPrefix { /// @@ -16,7 +17,7 @@ namespace IRCStates { if (splitVal == null) throw new ArgumentNullException(nameof(splitVal)); - var split = splitVal.Substring(1).Split(')', 2); + var split = splitVal[1..].Split(')', 2); Modes = new List(); Modes.AddRange(split[0].Select(c => c.ToString(CultureInfo.InvariantCulture))); Prefixes = new List(); diff --git a/IRCStates/Server.cs b/IRCStates/Server.cs index 2cbbb92..7441d9e 100644 --- a/IRCStates/Server.cs +++ b/IRCStates/Server.cs @@ -46,6 +46,7 @@ namespace IRCStates public Dictionary AvailableCaps { get; set; } public List AgreedCaps { get; set; } + // ReSharper disable once InconsistentNaming public ISupport ISupport { get; set; } public bool HasCap { get; set; } @@ -360,9 +361,8 @@ namespace IRCStates RealName = realname; } - if (Users.ContainsKey(nicknameLower)) + if (Users.TryGetValue(nicknameLower, out var user)) { - var user = Users[nicknameLower]; emit.User = user; user.RealName = realname; } @@ -387,9 +387,8 @@ namespace IRCStates Away = away; } - if (Users.ContainsKey(nicknameLower)) + if (Users.TryGetValue(nicknameLower, out var user)) { - var user = Users[nicknameLower]; emit.User = user; user.Away = away; } @@ -414,9 +413,8 @@ namespace IRCStates Account = account; } - if (Users.ContainsKey(nicknameLower)) + if (Users.TryGetValue(nicknameLower, out var user)) { - var user = Users[nicknameLower]; emit.User = user; user.Account = account; } @@ -473,7 +471,7 @@ namespace IRCStates foreach (var key in tokens.Keys) if (key.StartsWith('-')) { - var k = key.Substring(1); + var k = key[1..]; if (AgreedCaps.Contains(k)) AgreedCaps.Remove(k); } else if (!AgreedCaps.Contains(key) && AvailableCaps.ContainsKey(key)) @@ -518,9 +516,8 @@ namespace IRCStates HostName = hostname; } - if (Users.ContainsKey(nicknameLower)) + if (Users.TryGetValue(nicknameLower, out var user)) { - var user = Users[nicknameLower]; emit.User = user; user.UserName = username; user.HostName = hostname; @@ -688,7 +685,7 @@ namespace IRCStates if (ISupport.StatusMsg.Contains(t)) { statusMsg.Add(t); - target = target.Substring(1); + target = target[1..]; } else { @@ -895,8 +892,8 @@ namespace IRCStates break; } - var hostmask = new Hostmask(nick.Substring(modes.Length)); - var user = GetUser(hostmask.NickName) ?? AddUser(hostmask.NickName); + var hostmask = new Hostmask(nick[modes.Length..]); + var user = GetUser(hostmask.NickName) ?? AddUser(hostmask.NickName); users.Add(user); var channelUser = UserJoin(channel, user); diff --git a/IRCStates/User.cs b/IRCStates/User.cs index 97abb15..4637ba6 100644 --- a/IRCStates/User.cs +++ b/IRCStates/User.cs @@ -4,11 +4,6 @@ namespace IRCStates { public class User { - public User() - { - Channels = new HashSet(); - } - public string NickName { get; private set; } public string NickNameLower { get; private set; } @@ -17,7 +12,7 @@ namespace IRCStates public string RealName { get; set; } public string Account { get; set; } public string Away { get; set; } - public HashSet Channels { get; private set; } + public HashSet Channels { get; private set; } = new HashSet(); public override string ToString() { diff --git a/IRCTokens/IRCTokens.csproj b/IRCTokens/IRCTokens.csproj index 0564ab3..c6cbecd 100644 --- a/IRCTokens/IRCTokens.csproj +++ b/IRCTokens/IRCTokens.csproj @@ -1,7 +1,7 @@  - netstandard2.1;net6.0 + netstandard2.1 IRCTokens 1.3.0 Ben Harris diff --git a/IRCTokens/Line.cs b/IRCTokens/Line.cs index bf3cc91..491ea2e 100644 --- a/IRCTokens/Line.cs +++ b/IRCTokens/Line.cs @@ -13,7 +13,7 @@ namespace IRCTokens { private static readonly string[] TagUnescaped = {"\\", " ", ";", "\r", "\n"}; - private static readonly string[] TagEscaped = {"\\\\", "\\s", "\\:", "\\r", "\\n"}; + private static readonly string[] TagEscaped = {@"\\", "\\s", "\\:", "\\r", "\\n"}; private Hostmask _hostmask; @@ -47,7 +47,7 @@ namespace IRCTokens var messageTags = split[0]; line = split[1]; - foreach (var part in messageTags.Substring(1).Split(';')) + foreach (var part in messageTags[1..].Split(';')) if (part.Contains('=', StringComparison.Ordinal)) { split = part.Split('=', 2); @@ -77,7 +77,7 @@ namespace IRCTokens if (Params[0].StartsWith(':')) { - Source = Params[0].Substring(1); + Source = Params[0][1..]; Params.RemoveAt(0); } diff --git a/global.json b/global.json new file mode 100644 index 0000000..dad2db5 --- /dev/null +++ b/global.json @@ -0,0 +1,7 @@ +{ + "sdk": { + "version": "8.0.0", + "rollForward": "latestMajor", + "allowPrerelease": true + } +} \ No newline at end of file