diff --git a/Examples/States/Client.cs b/Examples/States/Client.cs
index 5df69f1..55d4651 100644
--- a/Examples/States/Client.cs
+++ b/Examples/States/Client.cs
@@ -29,7 +29,7 @@ internal class Client(string host, int port, string nick)
while (true)
{
- while (_encoder.PendingBytes.Any())
+ while (_encoder.PendingBytes.Length != 0)
{
foreach (var line in _encoder.Pop(_socket.Send(_encoder.PendingBytes)))
Console.WriteLine($"> {line.Format()}");
diff --git a/IRCSharp.Tests/IRCSharp.Tests.csproj b/IRCSharp.Tests/IRCSharp.Tests.csproj
index 2655506..6a3f906 100644
--- a/IRCSharp.Tests/IRCSharp.Tests.csproj
+++ b/IRCSharp.Tests/IRCSharp.Tests.csproj
@@ -16,6 +16,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/IRCSharp.Tests/State/Cap.cs b/IRCSharp.Tests/State/Cap.cs
index c60e8ff..bbe2f0f 100644
--- a/IRCSharp.Tests/State/Cap.cs
+++ b/IRCSharp.Tests/State/Cap.cs
@@ -1,131 +1,126 @@
-using System.Collections.Generic;
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Cap
{
- [TestClass]
- public class Cap
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- }
-
- [TestMethod]
- public void LSOneLine()
- {
- Assert.IsFalse(_server.HasCap);
- CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps);
- _server.Parse(new("CAP * LS :a b"));
- CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
- }
-
- [TestMethod]
- public void LsTwoLines()
- {
- _server.Parse(new("CAP * LS * :a b"));
- CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps);
- _server.Parse(new("CAP * LS :c"));
- Assert.IsTrue(_server.AvailableCaps.ContainsKey("a"));
- Assert.IsTrue(_server.AvailableCaps.ContainsKey("b"));
- Assert.IsTrue(_server.AvailableCaps.ContainsKey("c"));
- }
-
- [TestMethod]
- public void LsValues()
- {
- _server.Parse(new("CAP * LS :a b= c=1"));
- CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", "1"}},
- _server.AvailableCaps);
- }
-
- [TestMethod]
- public void ACKOneLine()
- {
- _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("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("CAP * LS a"));
- _server.Parse(new("CAP * ACK b"));
- CollectionAssert.AreEqual(new List(), _server.AgreedCaps);
- }
-
- [TestMethod]
- public void NewNoLs()
- {
- _server.Parse(new("CAP * NEW :a"));
- CollectionAssert.AreEqual(new Dictionary {{"a", ""}}, _server.AvailableCaps);
- }
-
- [TestMethod]
- public void NewOneLine()
- {
- _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("CAP * LS :a"));
- _server.Parse(new("CAP * NEW :b c"));
- CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", ""}},
- _server.AvailableCaps);
- }
-
- [TestMethod]
- public void DelNotAcked()
- {
- _server.Parse(new("CAP * DEL a"));
- }
-
- [TestMethod]
- public void DELOneLS()
- {
- _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);
- }
-
- [TestMethod]
- public void DelTwoLs()
- {
- _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);
- }
-
- [TestMethod]
- public void DelTwoDel()
- {
- _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);
- }
+ _server = new("test");
}
-}
+
+ [TestMethod]
+ public void LSOneLine()
+ {
+ Assert.IsFalse(_server.HasCap);
+ CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps);
+ _server.Parse(new("CAP * LS :a b"));
+ CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
+ }
+
+ [TestMethod]
+ public void LsTwoLines()
+ {
+ _server.Parse(new("CAP * LS * :a b"));
+ CollectionAssert.AreEqual(new Dictionary(), _server.AvailableCaps);
+ _server.Parse(new("CAP * LS :c"));
+ Assert.IsTrue(_server.AvailableCaps.ContainsKey("a"));
+ Assert.IsTrue(_server.AvailableCaps.ContainsKey("b"));
+ Assert.IsTrue(_server.AvailableCaps.ContainsKey("c"));
+ }
+
+ [TestMethod]
+ public void LsValues()
+ {
+ _server.Parse(new("CAP * LS :a b= c=1"));
+ CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", "1"}},
+ _server.AvailableCaps);
+ }
+
+ [TestMethod]
+ public void ACKOneLine()
+ {
+ _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("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("CAP * LS a"));
+ _server.Parse(new("CAP * ACK b"));
+ CollectionAssert.AreEqual(new List(), _server.AgreedCaps);
+ }
+
+ [TestMethod]
+ public void NewNoLs()
+ {
+ _server.Parse(new("CAP * NEW :a"));
+ CollectionAssert.AreEqual(new Dictionary {{"a", ""}}, _server.AvailableCaps);
+ }
+
+ [TestMethod]
+ public void NewOneLine()
+ {
+ _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("CAP * LS :a"));
+ _server.Parse(new("CAP * NEW :b c"));
+ CollectionAssert.AreEqual(new Dictionary {{"a", ""}, {"b", ""}, {"c", ""}},
+ _server.AvailableCaps);
+ }
+
+ [TestMethod]
+ public void DelNotAcked()
+ {
+ _server.Parse(new("CAP * DEL a"));
+ }
+
+ [TestMethod]
+ public void DELOneLS()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void DelTwoLs()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void DelTwoDel()
+ {
+ _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);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Casemap.cs b/IRCSharp.Tests/State/Casemap.cs
index c385f75..f19cc2c 100644
--- a/IRCSharp.Tests/State/Casemap.cs
+++ b/IRCSharp.Tests/State/Casemap.cs
@@ -1,58 +1,54 @@
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Casemap
{
- [TestClass]
- public class Casemap
+ [TestMethod]
+ public void Rfc1459()
{
- [TestMethod]
- public void Rfc1459()
- {
- var lower = IRCStates.Casemap.CaseFold(IRCStates.Casemap.CaseMapping.Rfc1459, @"ÀTEST[]~\");
- Assert.AreEqual("Àtest{}^|", lower);
- }
-
- [TestMethod]
- public void Ascii()
- {
- var lower = IRCStates.Casemap.CaseFold(IRCStates.Casemap.CaseMapping.Ascii, @"ÀTEST[]~\");
- Assert.AreEqual(@"Àtest[]~\", lower);
- }
-
- [TestMethod]
- public void CommandJoin()
- {
- var server = new Server("test");
- 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"));
- Assert.IsTrue(server.Users.ContainsKey("other"));
- Assert.IsFalse(server.Users.ContainsKey("Other"));
- Assert.IsTrue(server.Channels.ContainsKey("#chan"));
- Assert.IsFalse(server.Channels.ContainsKey("#Chan"));
-
- var channel = server.Channels["#chan"];
- Assert.AreEqual("#Chan", channel.Name);
- }
-
- [TestMethod]
- public void CommandNick()
- {
- var server = new Server("test");
- server.Parse(new("001 nickname"));
- server.Parse(new(":nickname JOIN #chan"));
- var user = server.Users["nickname"];
- server.Parse(new(":nickname NICK NewNickname"));
- Assert.AreEqual(1, server.Users.Count);
- Assert.IsTrue(server.Users.ContainsKey("newnickname"));
- Assert.AreEqual("NewNickname", user.NickName);
- Assert.AreEqual("newnickname", user.NickNameLower);
- Assert.AreEqual("NewNickname", server.NickName);
- Assert.AreEqual("newnickname", server.NickNameLower);
- }
+ var lower = IRCStates.Casemap.CaseFold(IRCStates.Casemap.CaseMapping.Rfc1459, @"ÀTEST[]~\");
+ Assert.AreEqual("Àtest{}^|", lower);
}
-}
+
+ [TestMethod]
+ public void Ascii()
+ {
+ var lower = IRCStates.Casemap.CaseFold(IRCStates.Casemap.CaseMapping.Ascii, @"ÀTEST[]~\");
+ Assert.AreEqual(@"Àtest[]~\", lower);
+ }
+
+ [TestMethod]
+ public void CommandJoin()
+ {
+ var server = new Server("test");
+ 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"));
+ Assert.IsTrue(server.Users.ContainsKey("other"));
+ Assert.IsFalse(server.Users.ContainsKey("Other"));
+ Assert.IsTrue(server.Channels.ContainsKey("#chan"));
+ Assert.IsFalse(server.Channels.ContainsKey("#Chan"));
+
+ var channel = server.Channels["#chan"];
+ Assert.AreEqual("#Chan", channel.Name);
+ }
+
+ [TestMethod]
+ public void CommandNick()
+ {
+ var server = new Server("test");
+ server.Parse(new("001 nickname"));
+ server.Parse(new(":nickname JOIN #chan"));
+ var user = server.Users["nickname"];
+ server.Parse(new(":nickname NICK NewNickname"));
+ Assert.AreEqual(1, server.Users.Count);
+ Assert.IsTrue(server.Users.ContainsKey("newnickname"));
+ Assert.AreEqual("NewNickname", user.NickName);
+ Assert.AreEqual("newnickname", user.NickNameLower);
+ Assert.AreEqual("NewNickname", server.NickName);
+ Assert.AreEqual("newnickname", server.NickNameLower);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Channel.cs b/IRCSharp.Tests/State/Channel.cs
index aa506bc..bec455c 100644
--- a/IRCSharp.Tests/State/Channel.cs
+++ b/IRCSharp.Tests/State/Channel.cs
@@ -1,201 +1,194 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Channel
{
- [TestClass]
- public class Channel
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("001 nickname"));
- _server.Parse(new(":nickname JOIN #chan"));
- }
-
- [TestMethod]
- public void JoinSelf()
- {
- Assert.IsTrue(_server.Channels.ContainsKey("#chan"));
- Assert.IsTrue(_server.Users.ContainsKey("nickname"));
- Assert.AreEqual(1, _server.Channels.Count);
- Assert.AreEqual(1, _server.Users.Count);
-
- var user = _server.Users["nickname"];
- var chan = _server.Channels["#chan"];
- Assert.IsTrue(chan.Users.ContainsKey(user.NickNameLower));
- CollectionAssert.AreEqual(new List {chan.NameLower}, user.Channels.ToList());
- }
-
- [TestMethod]
- public void JoinOther()
- {
- _server.Parse(new(":other JOIN #chan"));
-
- Assert.AreEqual(2, _server.Users.Count);
- Assert.IsTrue(_server.Users.ContainsKey("other"));
-
- var channel = _server.Channels["#chan"];
- Assert.AreEqual(2, channel.Users.Count);
-
- var user = _server.Users["other"];
- CollectionAssert.AreEqual(new List {channel.NameLower}, user.Channels.ToList());
- }
-
- [TestMethod]
- public void PartSelf()
- {
- _server.Parse(new(":nickname PART #chan"));
-
- Assert.AreEqual(0, _server.Users.Count);
- Assert.AreEqual(0, _server.Channels.Count);
- }
-
- [TestMethod]
- public void PartOther()
- {
- _server.Parse(new(":other JOIN #chan"));
- _server.Parse(new(":other PART #chan"));
-
- var user = _server.Users["nickname"];
- var channel = _server.Channels["#chan"];
- var chanUser = channel.Users[user.NickNameLower];
-
- Assert.AreEqual(channel.NameLower, user.Channels.Single());
- CollectionAssert.AreEqual(new Dictionary {{"nickname", user}}, _server.Users);
- CollectionAssert.AreEqual(new Dictionary {{"#chan", channel}}, _server.Channels);
- CollectionAssert.AreEqual(new Dictionary {{"nickname", chanUser}}, channel.Users);
- }
-
- [TestMethod]
- public void KickSelf()
- {
- _server.Parse(new(":nickname KICK #chan nickname"));
-
- Assert.AreEqual(0, _server.Users.Count);
- Assert.AreEqual(0, _server.Channels.Count);
- }
-
- [TestMethod]
- public void KickOther()
- {
- _server.Parse(new(":other JOIN #chan"));
- _server.Parse(new(":nickname KICK #chan other"));
-
- var user = _server.Users["nickname"];
- var channel = _server.Channels["#chan"];
- var chanUser = channel.Users[user.NickNameLower];
-
- Assert.AreEqual(1, _server.Users.Count);
- Assert.AreEqual(1, _server.Channels.Count);
- Assert.AreEqual(channel.NameLower, user.Channels.Single());
- CollectionAssert.AreEqual(new Dictionary {{user.NickNameLower, chanUser}},
- channel.Users);
- }
-
- [TestMethod]
- public void QuitSelf()
- {
- _server.Parse(new("QUIT :i'm outta here"));
- Assert.IsFalse(_server.Users.Any());
- Assert.IsFalse(_server.Channels.Any());
- }
-
- [TestMethod]
- public void QuitSelfWithSource()
- {
- _server.Parse(new(":nickname QUIT :i'm outta here"));
- Assert.IsFalse(_server.Users.Any());
- Assert.IsFalse(_server.Channels.Any());
- }
-
- [TestMethod]
- public void QuitOther()
- {
- _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("332 * #chan :test"));
- Assert.AreEqual("test", _server.Channels["#chan"].Topic);
- }
-
- [TestMethod]
- public void TopicSetByAt()
- {
- var dt = DateTimeOffset.FromUnixTimeSeconds(1584023277).DateTime;
- _server.Parse(new("333 * #chan other 1584023277"));
-
- var channel = _server.Channels["#chan"];
-
- Assert.AreEqual("other", channel.TopicSetter);
- Assert.AreEqual(dt, channel.TopicTime);
- }
-
- [TestMethod]
- public void TopicCommand()
- {
- _server.Parse(new("TOPIC #chan :hello there"));
- Assert.AreEqual("hello there", _server.Channels["#chan"].Topic);
- }
-
- [TestMethod]
- public void CreationDate()
- {
- _server.Parse(new("329 * #chan 1584041889"));
- Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1584041889).DateTime, _server.Channels["#chan"].Created);
- }
-
- [TestMethod]
- public void NamesCommand()
- {
- _server.Parse(new("353 * * #chan :nickname @+other"));
- Assert.IsTrue(_server.Users.ContainsKey("nickname"));
- Assert.IsTrue(_server.Users.ContainsKey("other"));
-
- var user = _server.Users["other"];
- var channel = _server.Channels["#chan"];
- var chanUser1 = channel.Users[user.NickNameLower];
- var chanUser2 = channel.Users[_server.NickNameLower];
-
- Assert.AreEqual(2, channel.Users.Count);
- CollectionAssert.AreEqual(chanUser1.Modes, channel.Users[user.NickNameLower].Modes);
- CollectionAssert.AreEqual(chanUser2.Modes, channel.Users[_server.NickNameLower].Modes);
- CollectionAssert.AreEqual(new List {"o", "v"}, chanUser1.Modes);
- Assert.AreEqual(channel.NameLower, user.Channels.Single());
- }
-
- [TestMethod]
- public void UserhostInNames()
- {
- _server.Parse(new("353 * * #chan :nickname!user@host other!user2@host2"));
- Assert.AreEqual("user", _server.UserName);
- Assert.AreEqual("host", _server.HostName);
-
- var user = _server.Users["other"];
- Assert.AreEqual("user2", user.UserName);
- Assert.AreEqual("host2", user.HostName);
- }
-
- [TestMethod]
- public void NickAfterJoin()
- {
- var user = _server.Users["nickname"];
- var channel = _server.Channels["#chan"];
- var chanUser = channel.Users[user.NickNameLower];
- _server.Parse(new(":nickname NICK nickname2"));
- CollectionAssert.AreEqual(new Dictionary {{user.NickNameLower, chanUser}},
- channel.Users);
- }
+ _server = new("test");
+ _server.Parse(new("001 nickname"));
+ _server.Parse(new(":nickname JOIN #chan"));
}
-}
+
+ [TestMethod]
+ public void JoinSelf()
+ {
+ Assert.IsTrue(_server.Channels.ContainsKey("#chan"));
+ Assert.IsTrue(_server.Users.ContainsKey("nickname"));
+ Assert.AreEqual(1, _server.Channels.Count);
+ Assert.AreEqual(1, _server.Users.Count);
+
+ var user = _server.Users["nickname"];
+ var chan = _server.Channels["#chan"];
+ Assert.IsTrue(chan.Users.ContainsKey(user.NickNameLower));
+ CollectionAssert.AreEqual(new List {chan.NameLower}, user.Channels.ToList());
+ }
+
+ [TestMethod]
+ public void JoinOther()
+ {
+ _server.Parse(new(":other JOIN #chan"));
+
+ Assert.AreEqual(2, _server.Users.Count);
+ Assert.IsTrue(_server.Users.ContainsKey("other"));
+
+ var channel = _server.Channels["#chan"];
+ Assert.AreEqual(2, channel.Users.Count);
+
+ var user = _server.Users["other"];
+ CollectionAssert.AreEqual(new List {channel.NameLower}, user.Channels.ToList());
+ }
+
+ [TestMethod]
+ public void PartSelf()
+ {
+ _server.Parse(new(":nickname PART #chan"));
+
+ Assert.AreEqual(0, _server.Users.Count);
+ Assert.AreEqual(0, _server.Channels.Count);
+ }
+
+ [TestMethod]
+ public void PartOther()
+ {
+ _server.Parse(new(":other JOIN #chan"));
+ _server.Parse(new(":other PART #chan"));
+
+ var user = _server.Users["nickname"];
+ var channel = _server.Channels["#chan"];
+ var chanUser = channel.Users[user.NickNameLower];
+
+ Assert.AreEqual(channel.NameLower, user.Channels.Single());
+ CollectionAssert.AreEqual(new Dictionary {{"nickname", user}}, _server.Users);
+ CollectionAssert.AreEqual(new Dictionary {{"#chan", channel}}, _server.Channels);
+ CollectionAssert.AreEqual(new Dictionary {{"nickname", chanUser}}, channel.Users);
+ }
+
+ [TestMethod]
+ public void KickSelf()
+ {
+ _server.Parse(new(":nickname KICK #chan nickname"));
+
+ Assert.AreEqual(0, _server.Users.Count);
+ Assert.AreEqual(0, _server.Channels.Count);
+ }
+
+ [TestMethod]
+ public void KickOther()
+ {
+ _server.Parse(new(":other JOIN #chan"));
+ _server.Parse(new(":nickname KICK #chan other"));
+
+ var user = _server.Users["nickname"];
+ var channel = _server.Channels["#chan"];
+ var chanUser = channel.Users[user.NickNameLower];
+
+ Assert.AreEqual(1, _server.Users.Count);
+ Assert.AreEqual(1, _server.Channels.Count);
+ Assert.AreEqual(channel.NameLower, user.Channels.Single());
+ CollectionAssert.AreEqual(new Dictionary {{user.NickNameLower, chanUser}},
+ channel.Users);
+ }
+
+ [TestMethod]
+ public void QuitSelf()
+ {
+ _server.Parse(new("QUIT :i'm outta here"));
+ Assert.IsFalse(_server.Users.Count != 0);
+ Assert.IsFalse(_server.Channels.Count != 0);
+ }
+
+ [TestMethod]
+ public void QuitSelfWithSource()
+ {
+ _server.Parse(new(":nickname QUIT :i'm outta here"));
+ Assert.IsFalse(_server.Users.Count != 0);
+ Assert.IsFalse(_server.Channels.Count != 0);
+ }
+
+ [TestMethod]
+ public void QuitOther()
+ {
+ _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("332 * #chan :test"));
+ Assert.AreEqual("test", _server.Channels["#chan"].Topic);
+ }
+
+ [TestMethod]
+ public void TopicSetByAt()
+ {
+ var dt = DateTimeOffset.FromUnixTimeSeconds(1584023277).DateTime;
+ _server.Parse(new("333 * #chan other 1584023277"));
+
+ var channel = _server.Channels["#chan"];
+
+ Assert.AreEqual("other", channel.TopicSetter);
+ Assert.AreEqual(dt, channel.TopicTime);
+ }
+
+ [TestMethod]
+ public void TopicCommand()
+ {
+ _server.Parse(new("TOPIC #chan :hello there"));
+ Assert.AreEqual("hello there", _server.Channels["#chan"].Topic);
+ }
+
+ [TestMethod]
+ public void CreationDate()
+ {
+ _server.Parse(new("329 * #chan 1584041889"));
+ Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1584041889).DateTime, _server.Channels["#chan"].Created);
+ }
+
+ [TestMethod]
+ public void NamesCommand()
+ {
+ _server.Parse(new("353 * * #chan :nickname @+other"));
+ Assert.IsTrue(_server.Users.ContainsKey("nickname"));
+ Assert.IsTrue(_server.Users.ContainsKey("other"));
+
+ var user = _server.Users["other"];
+ var channel = _server.Channels["#chan"];
+ var chanUser1 = channel.Users[user.NickNameLower];
+ var chanUser2 = channel.Users[_server.NickNameLower];
+
+ Assert.AreEqual(2, channel.Users.Count);
+ CollectionAssert.AreEqual(chanUser1.Modes, channel.Users[user.NickNameLower].Modes);
+ CollectionAssert.AreEqual(chanUser2.Modes, channel.Users[_server.NickNameLower].Modes);
+ CollectionAssert.AreEqual(new List {"o", "v"}, chanUser1.Modes);
+ Assert.AreEqual(channel.NameLower, user.Channels.Single());
+ }
+
+ [TestMethod]
+ public void UserhostInNames()
+ {
+ _server.Parse(new("353 * * #chan :nickname!user@host other!user2@host2"));
+ Assert.AreEqual("user", _server.UserName);
+ Assert.AreEqual("host", _server.HostName);
+
+ var user = _server.Users["other"];
+ Assert.AreEqual("user2", user.UserName);
+ Assert.AreEqual("host2", user.HostName);
+ }
+
+ [TestMethod]
+ public void NickAfterJoin()
+ {
+ var user = _server.Users["nickname"];
+ var channel = _server.Channels["#chan"];
+ var chanUser = channel.Users[user.NickNameLower];
+ _server.Parse(new(":nickname NICK nickname2"));
+ CollectionAssert.AreEqual(new Dictionary {{user.NickNameLower, chanUser}},
+ channel.Users);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Emit.cs b/IRCSharp.Tests/State/Emit.cs
index 973104b..71af1af 100644
--- a/IRCSharp.Tests/State/Emit.cs
+++ b/IRCSharp.Tests/State/Emit.cs
@@ -1,117 +1,112 @@
-using System.Collections.Generic;
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Emit
{
- [TestClass]
- public class Emit
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("001 nickname"));
- }
-
- [TestMethod]
- public void EmitJoin()
- {
- 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(":other JOIN #chan"));
- Assert.IsNotNull(emit);
- Assert.AreEqual("JOIN", emit.Command);
- Assert.IsFalse(emit.Self);
- Assert.AreEqual(_server.Users["other"], emit.User);
- Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
- }
-
- [TestMethod]
- public void EmitPrivmsg()
- {
- _server.Parse(new(":nickname JOIN #chan"));
- var emit = _server.Parse(new(":nickname PRIVMSG #chan :hello"));
-
- Assert.IsNotNull(emit);
- Assert.AreEqual("PRIVMSG", emit.Command);
- Assert.AreEqual("hello", emit.Text);
- Assert.IsTrue(emit.SelfSource);
- Assert.AreEqual(_server.Users["nickname"], emit.User);
- Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
-
- _server.Parse(new(":other JOIN #chan"));
- emit = _server.Parse(new(":other PRIVMSG #chan :hello2"));
-
- Assert.IsNotNull(emit);
- Assert.AreEqual("PRIVMSG", emit.Command);
- Assert.AreEqual("hello2", emit.Text);
- Assert.IsFalse(emit.SelfSource);
- Assert.AreEqual(_server.Users["other"], emit.User);
- Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
- }
-
- [TestMethod]
- public void EmitPrivmsgNoJoin()
- {
- _server.Parse(new(":nickname JOIN #chan"));
- var emit = _server.Parse(new(":other PRIVMSG #chan :hello"));
-
- Assert.IsNotNull(emit);
- Assert.AreEqual("PRIVMSG", emit.Command);
- Assert.AreEqual("hello", emit.Text);
- Assert.IsFalse(emit.SelfSource);
- Assert.IsNotNull(emit.User);
-
- var channel = _server.Channels["#chan"];
- Assert.AreEqual(channel, emit.Channel);
- }
-
- [TestMethod]
- public void EmitKick()
- {
- _server.Parse(new(":nickname JOIN #chan"));
-
- var user = _server.Users["nickname"];
- var channel = _server.Channels["#chan"];
- _server.Parse(new(":other JOIN #chan"));
- var userOther = _server.Users["other"];
- var emit = _server.Parse(new(":nickname KICK #chan other :reason"));
-
- Assert.IsNotNull(emit);
- Assert.AreEqual("KICK", emit.Command);
- Assert.AreEqual("reason", emit.Text);
- Assert.IsTrue(emit.SelfSource);
- Assert.AreEqual(user, emit.UserSource);
- Assert.AreEqual(userOther, emit.UserTarget);
- Assert.AreEqual(channel, emit.Channel);
- }
-
- [TestMethod]
- public void EmitMode()
- {
- var emit = _server.Parse(new("MODE nickname x+i-i+wi-wi"));
-
- Assert.IsNotNull(emit);
- Assert.AreEqual("MODE", emit.Command);
- Assert.IsTrue(emit.SelfTarget);
- CollectionAssert.AreEqual(new List
- {
- "+x",
- "+i",
- "-i",
- "+w",
- "+i",
- "-w",
- "-i"
- }, emit.Tokens);
- }
+ _server = new("test");
+ _server.Parse(new("001 nickname"));
}
-}
+
+ [TestMethod]
+ public void EmitJoin()
+ {
+ 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(":other JOIN #chan"));
+ Assert.IsNotNull(emit);
+ Assert.AreEqual("JOIN", emit.Command);
+ Assert.IsFalse(emit.Self);
+ Assert.AreEqual(_server.Users["other"], emit.User);
+ Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
+ }
+
+ [TestMethod]
+ public void EmitPrivmsg()
+ {
+ _server.Parse(new(":nickname JOIN #chan"));
+ var emit = _server.Parse(new(":nickname PRIVMSG #chan :hello"));
+
+ Assert.IsNotNull(emit);
+ Assert.AreEqual("PRIVMSG", emit.Command);
+ Assert.AreEqual("hello", emit.Text);
+ Assert.IsTrue(emit.SelfSource);
+ Assert.AreEqual(_server.Users["nickname"], emit.User);
+ Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
+
+ _server.Parse(new(":other JOIN #chan"));
+ emit = _server.Parse(new(":other PRIVMSG #chan :hello2"));
+
+ Assert.IsNotNull(emit);
+ Assert.AreEqual("PRIVMSG", emit.Command);
+ Assert.AreEqual("hello2", emit.Text);
+ Assert.IsFalse(emit.SelfSource);
+ Assert.AreEqual(_server.Users["other"], emit.User);
+ Assert.AreEqual(_server.Channels["#chan"], emit.Channel);
+ }
+
+ [TestMethod]
+ public void EmitPrivmsgNoJoin()
+ {
+ _server.Parse(new(":nickname JOIN #chan"));
+ var emit = _server.Parse(new(":other PRIVMSG #chan :hello"));
+
+ Assert.IsNotNull(emit);
+ Assert.AreEqual("PRIVMSG", emit.Command);
+ Assert.AreEqual("hello", emit.Text);
+ Assert.IsFalse(emit.SelfSource);
+ Assert.IsNotNull(emit.User);
+
+ var channel = _server.Channels["#chan"];
+ Assert.AreEqual(channel, emit.Channel);
+ }
+
+ [TestMethod]
+ public void EmitKick()
+ {
+ _server.Parse(new(":nickname JOIN #chan"));
+
+ var user = _server.Users["nickname"];
+ var channel = _server.Channels["#chan"];
+ _server.Parse(new(":other JOIN #chan"));
+ var userOther = _server.Users["other"];
+ var emit = _server.Parse(new(":nickname KICK #chan other :reason"));
+
+ Assert.IsNotNull(emit);
+ Assert.AreEqual("KICK", emit.Command);
+ Assert.AreEqual("reason", emit.Text);
+ Assert.IsTrue(emit.SelfSource);
+ Assert.AreEqual(user, emit.UserSource);
+ Assert.AreEqual(userOther, emit.UserTarget);
+ Assert.AreEqual(channel, emit.Channel);
+ }
+
+ [TestMethod]
+ public void EmitMode()
+ {
+ var emit = _server.Parse(new("MODE nickname x+i-i+wi-wi"));
+
+ Assert.IsNotNull(emit);
+ Assert.AreEqual("MODE", emit.Command);
+ Assert.IsTrue(emit.SelfTarget);
+ CollectionAssert.AreEqual(new List
+ {
+ "+x",
+ "+i",
+ "-i",
+ "+w",
+ "+i",
+ "-w",
+ "-i"
+ }, emit.Tokens);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/ISupport.cs b/IRCSharp.Tests/State/ISupport.cs
index 476999a..177ed5f 100644
--- a/IRCSharp.Tests/State/ISupport.cs
+++ b/IRCSharp.Tests/State/ISupport.cs
@@ -1,210 +1,204 @@
-using System.Collections.Generic;
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+// ReSharper disable InconsistentNaming
+namespace IRCSharp.Tests.State;
-// ReSharper disable InconsistentNaming
-
-namespace IRCSharp.Tests.State
+[TestClass]
+public class ISupport
{
- [TestClass]
- public class ISupport
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("001 nickname"));
- }
-
- [TestMethod]
- public void ChanModes()
- {
- CollectionAssert.AreEqual(new List {"b"}, _server.ISupport.ChanModes.ListModes);
- CollectionAssert.AreEqual(new List {"k"}, _server.ISupport.ChanModes.SettingBModes);
- CollectionAssert.AreEqual(new List {"l"}, _server.ISupport.ChanModes.SettingCModes);
- CollectionAssert.AreEqual(new List
- {
- "i",
- "m",
- "n",
- "p",
- "s",
- "t"
- }, _server.ISupport.ChanModes.SettingDModes);
-
- _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);
- CollectionAssert.AreEqual(new List {"c"}, _server.ISupport.ChanModes.SettingCModes);
- CollectionAssert.AreEqual(new List {"d"}, _server.ISupport.ChanModes.SettingDModes);
- }
-
- [TestMethod]
- public void Prefix()
- {
- CollectionAssert.AreEqual(new List {"o", "v"}, _server.ISupport.Prefix.Modes);
- CollectionAssert.AreEqual(new List {"@", "+"}, _server.ISupport.Prefix.Prefixes);
-
- Assert.AreEqual("@", _server.ISupport.Prefix.FromMode("o"));
- Assert.IsNull(_server.ISupport.Prefix.FromMode("a"));
- Assert.AreEqual("o", _server.ISupport.Prefix.FromPrefix("@"));
- Assert.IsNull(_server.ISupport.Prefix.FromPrefix("&"));
-
- _server.Parse(new("005 * PREFIX=(qaohv)~&@%+ *"));
- CollectionAssert.AreEqual(new List
- {
- "q",
- "a",
- "o",
- "h",
- "v"
- }, _server.ISupport.Prefix.Modes);
- CollectionAssert.AreEqual(new List
- {
- "~",
- "&",
- "@",
- "%",
- "+"
- }, _server.ISupport.Prefix.Prefixes);
- Assert.AreEqual("&", _server.ISupport.Prefix.FromMode("a"));
- Assert.AreEqual("a", _server.ISupport.Prefix.FromPrefix("&"));
- }
-
- [TestMethod]
- public void ChanTypes()
- {
- CollectionAssert.AreEqual(new List {"#"}, _server.ISupport.ChanTypes);
- _server.Parse(new("005 * CHANTYPES=#& *"));
- CollectionAssert.AreEqual(new List {"#", "&"}, _server.ISupport.ChanTypes);
- }
-
- [TestMethod]
- public void Modes()
- {
- Assert.AreEqual(3, _server.ISupport.Modes);
-
- _server.Parse(new("005 * MODES *"));
- Assert.AreEqual(-1, _server.ISupport.Modes);
-
- _server.Parse(new("005 * MODES=5 *"));
- Assert.AreEqual(5, _server.ISupport.Modes);
- }
-
- [TestMethod]
- public void Rfc1459()
- {
- Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
- _server.Parse(new("005 * CASEMAPPING=rfc1459 *"));
- Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
- var lower = _server.CaseFold(@"ÀTEST[]~\");
- Assert.AreEqual("Àtest{}^|", lower);
- }
-
- [TestMethod]
- public void 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);
- }
-
- [TestMethod]
- public void FallbackToRfc1459()
- {
- _server.Parse(new("005 * CASEMAPPING=nonexistent *"));
- Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
- var lower = _server.CaseFold(@"ÀTEST[]~\");
- Assert.AreEqual("Àtest{}^|", lower);
- }
-
- [TestMethod]
- public void Network()
- {
- Assert.IsNull(_server.ISupport.Network);
- _server.Parse(new("005 * NETWORK=testnet *"));
- Assert.AreEqual("testnet", _server.ISupport.Network);
- }
-
- [TestMethod]
- public void StatusMsg()
- {
- CollectionAssert.AreEqual(new List(), _server.ISupport.StatusMsg);
- _server.Parse(new("005 * STATUSMSG=&@ *"));
- CollectionAssert.AreEqual(new List {"&", "@"}, _server.ISupport.StatusMsg);
- }
-
- [TestMethod]
- public void CallerId()
- {
- Assert.IsNull(_server.ISupport.CallerId);
-
- _server.Parse(new("005 * CALLERID=U *"));
- Assert.AreEqual("U", _server.ISupport.CallerId);
-
- _server.Parse(new("005 * CALLERID *"));
- Assert.AreEqual("g", _server.ISupport.CallerId);
- }
-
- [TestMethod]
- public void Excepts()
- {
- Assert.IsNull(_server.ISupport.Excepts);
-
- _server.Parse(new("005 * EXCEPTS=U *"));
- Assert.AreEqual("U", _server.ISupport.Excepts);
-
- _server.Parse(new("005 * EXCEPTS *"));
- Assert.AreEqual("e", _server.ISupport.Excepts);
- }
-
- [TestMethod]
- public void Invex()
- {
- Assert.IsNull(_server.ISupport.Invex);
-
- _server.Parse(new("005 * INVEX=U *"));
- Assert.AreEqual("U", _server.ISupport.Invex);
-
- _server.Parse(new("005 * INVEX *"));
- Assert.AreEqual("I", _server.ISupport.Invex);
- }
-
- [TestMethod]
- public void Whox()
- {
- Assert.IsFalse(_server.ISupport.Whox);
-
- _server.Parse(new("005 * WHOX *"));
- Assert.IsTrue(_server.ISupport.Whox);
- }
-
- [TestMethod]
- public void Monitor()
- {
- Assert.IsNull(_server.ISupport.Monitor);
-
- _server.Parse(new("005 * MONITOR=123 *"));
- Assert.AreEqual(123, _server.ISupport.Monitor);
-
- _server.Parse(new("005 * MONITOR *"));
- Assert.AreEqual(-1, _server.ISupport.Monitor);
- }
-
- [TestMethod]
- public void Watch()
- {
- Assert.IsNull(_server.ISupport.Watch);
-
- _server.Parse(new("005 * WATCH=123 *"));
- Assert.AreEqual(123, _server.ISupport.Watch);
-
- _server.Parse(new("005 * WATCH *"));
- Assert.AreEqual(-1, _server.ISupport.Watch);
- }
+ _server = new("test");
+ _server.Parse(new("001 nickname"));
}
-}
+
+ [TestMethod]
+ public void ChanModes()
+ {
+ CollectionAssert.AreEqual(new List {"b"}, _server.ISupport.ChanModes.ListModes);
+ CollectionAssert.AreEqual(new List {"k"}, _server.ISupport.ChanModes.SettingBModes);
+ CollectionAssert.AreEqual(new List {"l"}, _server.ISupport.ChanModes.SettingCModes);
+ CollectionAssert.AreEqual(new List
+ {
+ "i",
+ "m",
+ "n",
+ "p",
+ "s",
+ "t"
+ }, _server.ISupport.ChanModes.SettingDModes);
+
+ _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);
+ CollectionAssert.AreEqual(new List {"c"}, _server.ISupport.ChanModes.SettingCModes);
+ CollectionAssert.AreEqual(new List {"d"}, _server.ISupport.ChanModes.SettingDModes);
+ }
+
+ [TestMethod]
+ public void Prefix()
+ {
+ CollectionAssert.AreEqual(new List {"o", "v"}, _server.ISupport.Prefix.Modes);
+ CollectionAssert.AreEqual(new List {"@", "+"}, _server.ISupport.Prefix.Prefixes);
+
+ Assert.AreEqual("@", _server.ISupport.Prefix.FromMode("o"));
+ Assert.IsNull(_server.ISupport.Prefix.FromMode("a"));
+ Assert.AreEqual("o", _server.ISupport.Prefix.FromPrefix("@"));
+ Assert.IsNull(_server.ISupport.Prefix.FromPrefix("&"));
+
+ _server.Parse(new("005 * PREFIX=(qaohv)~&@%+ *"));
+ CollectionAssert.AreEqual(new List
+ {
+ "q",
+ "a",
+ "o",
+ "h",
+ "v"
+ }, _server.ISupport.Prefix.Modes);
+ CollectionAssert.AreEqual(new List
+ {
+ "~",
+ "&",
+ "@",
+ "%",
+ "+"
+ }, _server.ISupport.Prefix.Prefixes);
+ Assert.AreEqual("&", _server.ISupport.Prefix.FromMode("a"));
+ Assert.AreEqual("a", _server.ISupport.Prefix.FromPrefix("&"));
+ }
+
+ [TestMethod]
+ public void ChanTypes()
+ {
+ CollectionAssert.AreEqual(new List {"#"}, _server.ISupport.ChanTypes);
+ _server.Parse(new("005 * CHANTYPES=#& *"));
+ CollectionAssert.AreEqual(new List {"#", "&"}, _server.ISupport.ChanTypes);
+ }
+
+ [TestMethod]
+ public void Modes()
+ {
+ Assert.AreEqual(3, _server.ISupport.Modes);
+
+ _server.Parse(new("005 * MODES *"));
+ Assert.AreEqual(-1, _server.ISupport.Modes);
+
+ _server.Parse(new("005 * MODES=5 *"));
+ Assert.AreEqual(5, _server.ISupport.Modes);
+ }
+
+ [TestMethod]
+ public void Rfc1459()
+ {
+ Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
+ _server.Parse(new("005 * CASEMAPPING=rfc1459 *"));
+ Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
+ var lower = _server.CaseFold(@"ÀTEST[]~\");
+ Assert.AreEqual("Àtest{}^|", lower);
+ }
+
+ [TestMethod]
+ public void 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);
+ }
+
+ [TestMethod]
+ public void FallbackToRfc1459()
+ {
+ _server.Parse(new("005 * CASEMAPPING=nonexistent *"));
+ Assert.AreEqual(IRCStates.Casemap.CaseMapping.Rfc1459, _server.ISupport.CaseMapping);
+ var lower = _server.CaseFold(@"ÀTEST[]~\");
+ Assert.AreEqual("Àtest{}^|", lower);
+ }
+
+ [TestMethod]
+ public void Network()
+ {
+ Assert.IsNull(_server.ISupport.Network);
+ _server.Parse(new("005 * NETWORK=testnet *"));
+ Assert.AreEqual("testnet", _server.ISupport.Network);
+ }
+
+ [TestMethod]
+ public void StatusMsg()
+ {
+ CollectionAssert.AreEqual(new List(), _server.ISupport.StatusMsg);
+ _server.Parse(new("005 * STATUSMSG=&@ *"));
+ CollectionAssert.AreEqual(new List {"&", "@"}, _server.ISupport.StatusMsg);
+ }
+
+ [TestMethod]
+ public void CallerId()
+ {
+ Assert.IsNull(_server.ISupport.CallerId);
+
+ _server.Parse(new("005 * CALLERID=U *"));
+ Assert.AreEqual("U", _server.ISupport.CallerId);
+
+ _server.Parse(new("005 * CALLERID *"));
+ Assert.AreEqual("g", _server.ISupport.CallerId);
+ }
+
+ [TestMethod]
+ public void Excepts()
+ {
+ Assert.IsNull(_server.ISupport.Excepts);
+
+ _server.Parse(new("005 * EXCEPTS=U *"));
+ Assert.AreEqual("U", _server.ISupport.Excepts);
+
+ _server.Parse(new("005 * EXCEPTS *"));
+ Assert.AreEqual("e", _server.ISupport.Excepts);
+ }
+
+ [TestMethod]
+ public void Invex()
+ {
+ Assert.IsNull(_server.ISupport.Invex);
+
+ _server.Parse(new("005 * INVEX=U *"));
+ Assert.AreEqual("U", _server.ISupport.Invex);
+
+ _server.Parse(new("005 * INVEX *"));
+ Assert.AreEqual("I", _server.ISupport.Invex);
+ }
+
+ [TestMethod]
+ public void Whox()
+ {
+ Assert.IsFalse(_server.ISupport.Whox);
+
+ _server.Parse(new("005 * WHOX *"));
+ Assert.IsTrue(_server.ISupport.Whox);
+ }
+
+ [TestMethod]
+ public void Monitor()
+ {
+ Assert.IsNull(_server.ISupport.Monitor);
+
+ _server.Parse(new("005 * MONITOR=123 *"));
+ Assert.AreEqual(123, _server.ISupport.Monitor);
+
+ _server.Parse(new("005 * MONITOR *"));
+ Assert.AreEqual(-1, _server.ISupport.Monitor);
+ }
+
+ [TestMethod]
+ public void Watch()
+ {
+ Assert.IsNull(_server.ISupport.Watch);
+
+ _server.Parse(new("005 * WATCH=123 *"));
+ Assert.AreEqual(123, _server.ISupport.Watch);
+
+ _server.Parse(new("005 * WATCH *"));
+ Assert.AreEqual(-1, _server.ISupport.Watch);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Mode.cs b/IRCSharp.Tests/State/Mode.cs
index 8731500..4611881 100644
--- a/IRCSharp.Tests/State/Mode.cs
+++ b/IRCSharp.Tests/State/Mode.cs
@@ -1,179 +1,174 @@
-using System.Collections.Generic;
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Mode
{
- [TestClass]
- public class Mode
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("001 nickname"));
- }
-
- [TestMethod]
- public void UModeAdd()
- {
- _server.Parse(new("MODE nickname +i"));
- CollectionAssert.AreEqual(new List {"i"}, _server.Modes);
- }
-
- [TestMethod]
- public void UModeRemove()
- {
- _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(":nickname JOIN #chan"));
- _server.Parse(new("MODE #chan +ov nickname nickname"));
-
- var user = _server.Users["nickname"];
- var channel = _server.Channels["#chan"];
- var channelUser = channel.Users[user.NickNameLower];
- CollectionAssert.AreEqual(new List {"o", "v"}, channelUser.Modes);
- }
-
- [TestMethod]
- public void PrefixRemove()
- {
- _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"];
- var channelUser = channel.Users[user.NickNameLower];
- CollectionAssert.AreEqual(new List(), channelUser.Modes);
- }
-
- [TestMethod]
- public void ChannelListAdd()
- {
- _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"]);
- }
-
- [TestMethod]
- public void ChannelListRemove()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelTypeBAdd()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelTypeBRemove()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelTypeCAdd()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelTypeCRemove()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelTypeDAdd()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelTypeDRemove()
- {
- _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);
- }
-
- [TestMethod]
- public void ChannelNumeric()
- {
- _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}},
- channel.Modes);
- CollectionAssert.AreEqual(new List {"*!*@*"}, channel.ListModes["b"]);
- }
-
- [TestMethod]
- public void ChannelNumericWithoutPlus()
- {
- _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);
- }
-
- [TestMethod]
- public void UserNumeric()
- {
- _server.Parse(new("221 * +iw"));
- CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes);
- }
-
- [TestMethod]
- public void UserNumericWithoutPlus()
- {
- _server.Parse(new("221 * iw"));
- CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes);
- }
+ _server = new("test");
+ _server.Parse(new("001 nickname"));
}
-}
+
+ [TestMethod]
+ public void UModeAdd()
+ {
+ _server.Parse(new("MODE nickname +i"));
+ CollectionAssert.AreEqual(new List {"i"}, _server.Modes);
+ }
+
+ [TestMethod]
+ public void UModeRemove()
+ {
+ _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(":nickname JOIN #chan"));
+ _server.Parse(new("MODE #chan +ov nickname nickname"));
+
+ var user = _server.Users["nickname"];
+ var channel = _server.Channels["#chan"];
+ var channelUser = channel.Users[user.NickNameLower];
+ CollectionAssert.AreEqual(new List {"o", "v"}, channelUser.Modes);
+ }
+
+ [TestMethod]
+ public void PrefixRemove()
+ {
+ _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"];
+ var channelUser = channel.Users[user.NickNameLower];
+ CollectionAssert.AreEqual(new List(), channelUser.Modes);
+ }
+
+ [TestMethod]
+ public void ChannelListAdd()
+ {
+ _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"]);
+ }
+
+ [TestMethod]
+ public void ChannelListRemove()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelTypeBAdd()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelTypeBRemove()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelTypeCAdd()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelTypeCRemove()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelTypeDAdd()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelTypeDRemove()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void ChannelNumeric()
+ {
+ _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}},
+ channel.Modes);
+ CollectionAssert.AreEqual(new List {"*!*@*"}, channel.ListModes["b"]);
+ }
+
+ [TestMethod]
+ public void ChannelNumericWithoutPlus()
+ {
+ _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);
+ }
+
+ [TestMethod]
+ public void UserNumeric()
+ {
+ _server.Parse(new("221 * +iw"));
+ CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes);
+ }
+
+ [TestMethod]
+ public void UserNumericWithoutPlus()
+ {
+ _server.Parse(new("221 * iw"));
+ CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Motd.cs b/IRCSharp.Tests/State/Motd.cs
index fefd8ed..17237cc 100644
--- a/IRCSharp.Tests/State/Motd.cs
+++ b/IRCSharp.Tests/State/Motd.cs
@@ -1,23 +1,18 @@
-using System.Collections.Generic;
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Motd
{
- [TestClass]
- public class Motd
+ [TestMethod]
+ public void MessageOfTheDay()
{
- [TestMethod]
- public void MessageOfTheDay()
- {
- var server = new Server("test");
- 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"));
+ var server = new Server("test");
+ 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);
- }
+ CollectionAssert.AreEqual(new List {"start of motd", "first line of motd", "second line of motd"},
+ server.Motd);
}
-}
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Sasl.cs b/IRCSharp.Tests/State/Sasl.cs
index e3ce67d..24128b4 100644
--- a/IRCSharp.Tests/State/Sasl.cs
+++ b/IRCSharp.Tests/State/Sasl.cs
@@ -1,38 +1,34 @@
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Sasl
{
- [TestClass]
- public class Sasl
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("900 * nick!user@host account"));
- }
-
- [TestMethod]
- public void LoggedIn()
- {
- Assert.AreEqual("nick", _server.NickName);
- Assert.AreEqual("user", _server.UserName);
- Assert.AreEqual("host", _server.HostName);
- Assert.AreEqual("account", _server.Account);
- }
-
- [TestMethod]
- public void LoggedOut()
- {
- _server.Parse(new("901 * nick1!user1@host1"));
-
- Assert.AreEqual("nick1", _server.NickName);
- Assert.AreEqual("user1", _server.UserName);
- Assert.AreEqual("host1", _server.HostName);
- Assert.IsTrue(string.IsNullOrEmpty(_server.Account));
- }
+ _server = new("test");
+ _server.Parse(new("900 * nick!user@host account"));
}
-}
+
+ [TestMethod]
+ public void LoggedIn()
+ {
+ Assert.AreEqual("nick", _server.NickName);
+ Assert.AreEqual("user", _server.UserName);
+ Assert.AreEqual("host", _server.HostName);
+ Assert.AreEqual("account", _server.Account);
+ }
+
+ [TestMethod]
+ public void LoggedOut()
+ {
+ _server.Parse(new("901 * nick1!user1@host1"));
+
+ Assert.AreEqual("nick1", _server.NickName);
+ Assert.AreEqual("user1", _server.UserName);
+ Assert.AreEqual("host1", _server.HostName);
+ Assert.IsTrue(string.IsNullOrEmpty(_server.Account));
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/User.cs b/IRCSharp.Tests/State/User.cs
index 7e43cfb..c19f402 100644
--- a/IRCSharp.Tests/State/User.cs
+++ b/IRCSharp.Tests/State/User.cs
@@ -1,298 +1,294 @@
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class User
{
- [TestClass]
- public class User
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("001 nickname"));
- }
-
- [TestMethod]
- public void Welcome()
- {
- Assert.AreEqual("test", _server.Name);
- Assert.AreEqual("nickname", _server.NickName);
- }
-
- [TestMethod]
- public void NicknameChange()
- {
- _server.Parse(new(":nickname NICK nickname2"));
- Assert.AreEqual("nickname2", _server.NickName);
-
- _server.Parse(new(":nickname2 JOIN #chan"));
- _server.Parse(new(":other JOIN #chan"));
- Assert.IsTrue(_server.Users.ContainsKey("other"));
-
- _server.Parse(new(":other NICK other2"));
- Assert.IsFalse(_server.Users.ContainsKey("other"));
- Assert.IsTrue(_server.Users.ContainsKey("other2"));
- }
-
- [TestMethod]
- public void HostmaskJoinBoth()
- {
- _server.Parse(new(":nickname!user@host JOIN #chan"));
- Assert.AreEqual("user", _server.UserName);
- Assert.AreEqual("host", _server.HostName);
-
- _server.Parse(new(":other!user@host JOIN #chan"));
- var user = _server.Users["other"];
- Assert.AreEqual("user", user.UserName);
- Assert.AreEqual("host", user.HostName);
- }
-
- [TestMethod]
- public void HostmaskJoinUser()
- {
- _server.Parse(new(":nickname!user JOIN #chan"));
- Assert.AreEqual("user", _server.UserName);
- Assert.IsNull(_server.HostName);
-
- _server.Parse(new(":other!user JOIN #chan"));
- var user = _server.Users["other"];
- Assert.AreEqual("user", user.UserName);
- Assert.IsNull(user.HostName);
- }
-
- [TestMethod]
- public void HostmaskJoinHost()
- {
- _server.Parse(new(":nickname@host JOIN #chan"));
- Assert.IsNull(_server.UserName);
- Assert.AreEqual("host", _server.HostName);
-
- _server.Parse(new(":other@host JOIN #chan"));
- var user = _server.Users["other"];
- Assert.IsNull(user.UserName);
- Assert.AreEqual("host", user.HostName);
- }
-
- [TestMethod]
- public void ExtendedJoinWithoutExtendedJoin()
- {
- _server.Parse(new(":nickname JOIN #chan"));
- Assert.IsNull(_server.Account);
- Assert.IsNull(_server.RealName);
-
- _server.Parse(new(":other JOIN #chan"));
- var user = _server.Users["other"];
- Assert.IsNull(user.Account);
- Assert.IsNull(user.RealName);
- }
-
- [TestMethod]
- public void ExtendedJoinWithAccount()
- {
- _server.Parse(new(":nickname JOIN #chan acc :realname"));
- Assert.AreEqual("acc", _server.Account);
- Assert.AreEqual("realname", _server.RealName);
-
- _server.Parse(new(":other JOIN #chan acc2 :realname2"));
- var user = _server.Users["other"];
- Assert.AreEqual("acc2", user.Account);
- Assert.AreEqual("realname2", user.RealName);
- }
-
- [TestMethod]
- public void ExtendedJoinWithoutAccount()
- {
- _server.Parse(new(":nickname JOIN #chan * :realname"));
- Assert.AreEqual("", _server.Account);
- Assert.AreEqual("realname", _server.RealName);
-
- _server.Parse(new(":other JOIN #chan * :realname2"));
- var user = _server.Users["other"];
- Assert.AreEqual("", user.Account);
- Assert.AreEqual("realname2", user.RealName);
- }
-
- [TestMethod]
- public void AccountNotifyWithAccount()
- {
- _server.Parse(new(":nickname JOIN #chan"));
- _server.Parse(new(":nickname ACCOUNT acc"));
- Assert.AreEqual("acc", _server.Account);
-
- _server.Parse(new(":other JOIN #chan"));
- _server.Parse(new(":other ACCOUNT acc2"));
- var user = _server.Users["other"];
- Assert.AreEqual("acc2", user.Account);
- }
-
- [TestMethod]
- public void AccountNotifyWithoutAccount()
- {
- _server.Parse(new(":nickname JOIN #chan"));
- _server.Parse(new(":nickname ACCOUNT *"));
- Assert.AreEqual("", _server.Account);
-
- _server.Parse(new(":other JOIN #chan"));
- _server.Parse(new(":other ACCOUNT *"));
- var user = _server.Users["other"];
- Assert.AreEqual("", user.Account);
- }
-
- [TestMethod]
- public void HostmaskPrivmsgBoth()
- {
- _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(":other!user@host PRIVMSG #chan :hi"));
- var user = _server.Users["other"];
- Assert.AreEqual("user", user.UserName);
- Assert.AreEqual("host", user.HostName);
- }
-
- [TestMethod]
- public void HostmaskPrivmsgUser()
- {
- _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(":other!user PRIVMSG #chan :hi"));
- var user = _server.Users["other"];
- Assert.AreEqual("user", user.UserName);
- Assert.IsNull(user.HostName);
- }
-
- [TestMethod]
- public void HostmaskPrivmsgHost()
- {
- _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(":other@host PRIVMSG #chan :hi"));
- var user = _server.Users["other"];
- Assert.IsNull(user.UserName);
- Assert.AreEqual("host", user.HostName);
- }
-
- [TestMethod]
- public void VisibleHostWithoutUsername()
- {
- _server.Parse(new("396 * hostname"));
- Assert.IsNull(_server.UserName);
- Assert.AreEqual("hostname", _server.HostName);
- }
-
- [TestMethod]
- public void VisibleHostWithUsername()
- {
- _server.Parse(new("396 * username@hostname"));
- Assert.AreEqual("username", _server.UserName);
- Assert.AreEqual("hostname", _server.HostName);
- }
-
- [TestMethod]
- public void Who()
- {
- _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);
- Assert.AreEqual("real", _server.RealName);
-
- var user = _server.Users["other"];
- Assert.AreEqual("user2", user.UserName);
- Assert.AreEqual("host2", user.HostName);
- Assert.AreEqual("real2", user.RealName);
- }
-
- [TestMethod]
- public void Chghost()
- {
- _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(":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);
- }
-
- [TestMethod]
- public void Whois()
- {
- _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(":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);
- Assert.AreEqual("r2", user.RealName);
- }
-
- [TestMethod]
- public void AwaySet()
- {
- _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(":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);
- }
-
- [TestMethod]
- public void AwayUnset()
- {
- _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);
- Assert.IsNull(user.Away);
- }
-
- [TestMethod]
- public void Setname()
- {
- _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(":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);
- }
+ _server = new("test");
+ _server.Parse(new("001 nickname"));
}
-}
+
+ [TestMethod]
+ public void Welcome()
+ {
+ Assert.AreEqual("test", _server.Name);
+ Assert.AreEqual("nickname", _server.NickName);
+ }
+
+ [TestMethod]
+ public void NicknameChange()
+ {
+ _server.Parse(new(":nickname NICK nickname2"));
+ Assert.AreEqual("nickname2", _server.NickName);
+
+ _server.Parse(new(":nickname2 JOIN #chan"));
+ _server.Parse(new(":other JOIN #chan"));
+ Assert.IsTrue(_server.Users.ContainsKey("other"));
+
+ _server.Parse(new(":other NICK other2"));
+ Assert.IsFalse(_server.Users.ContainsKey("other"));
+ Assert.IsTrue(_server.Users.ContainsKey("other2"));
+ }
+
+ [TestMethod]
+ public void HostmaskJoinBoth()
+ {
+ _server.Parse(new(":nickname!user@host JOIN #chan"));
+ Assert.AreEqual("user", _server.UserName);
+ Assert.AreEqual("host", _server.HostName);
+
+ _server.Parse(new(":other!user@host JOIN #chan"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("user", user.UserName);
+ Assert.AreEqual("host", user.HostName);
+ }
+
+ [TestMethod]
+ public void HostmaskJoinUser()
+ {
+ _server.Parse(new(":nickname!user JOIN #chan"));
+ Assert.AreEqual("user", _server.UserName);
+ Assert.IsNull(_server.HostName);
+
+ _server.Parse(new(":other!user JOIN #chan"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("user", user.UserName);
+ Assert.IsNull(user.HostName);
+ }
+
+ [TestMethod]
+ public void HostmaskJoinHost()
+ {
+ _server.Parse(new(":nickname@host JOIN #chan"));
+ Assert.IsNull(_server.UserName);
+ Assert.AreEqual("host", _server.HostName);
+
+ _server.Parse(new(":other@host JOIN #chan"));
+ var user = _server.Users["other"];
+ Assert.IsNull(user.UserName);
+ Assert.AreEqual("host", user.HostName);
+ }
+
+ [TestMethod]
+ public void ExtendedJoinWithoutExtendedJoin()
+ {
+ _server.Parse(new(":nickname JOIN #chan"));
+ Assert.IsNull(_server.Account);
+ Assert.IsNull(_server.RealName);
+
+ _server.Parse(new(":other JOIN #chan"));
+ var user = _server.Users["other"];
+ Assert.IsNull(user.Account);
+ Assert.IsNull(user.RealName);
+ }
+
+ [TestMethod]
+ public void ExtendedJoinWithAccount()
+ {
+ _server.Parse(new(":nickname JOIN #chan acc :realname"));
+ Assert.AreEqual("acc", _server.Account);
+ Assert.AreEqual("realname", _server.RealName);
+
+ _server.Parse(new(":other JOIN #chan acc2 :realname2"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("acc2", user.Account);
+ Assert.AreEqual("realname2", user.RealName);
+ }
+
+ [TestMethod]
+ public void ExtendedJoinWithoutAccount()
+ {
+ _server.Parse(new(":nickname JOIN #chan * :realname"));
+ Assert.AreEqual("", _server.Account);
+ Assert.AreEqual("realname", _server.RealName);
+
+ _server.Parse(new(":other JOIN #chan * :realname2"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("", user.Account);
+ Assert.AreEqual("realname2", user.RealName);
+ }
+
+ [TestMethod]
+ public void AccountNotifyWithAccount()
+ {
+ _server.Parse(new(":nickname JOIN #chan"));
+ _server.Parse(new(":nickname ACCOUNT acc"));
+ Assert.AreEqual("acc", _server.Account);
+
+ _server.Parse(new(":other JOIN #chan"));
+ _server.Parse(new(":other ACCOUNT acc2"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("acc2", user.Account);
+ }
+
+ [TestMethod]
+ public void AccountNotifyWithoutAccount()
+ {
+ _server.Parse(new(":nickname JOIN #chan"));
+ _server.Parse(new(":nickname ACCOUNT *"));
+ Assert.AreEqual("", _server.Account);
+
+ _server.Parse(new(":other JOIN #chan"));
+ _server.Parse(new(":other ACCOUNT *"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("", user.Account);
+ }
+
+ [TestMethod]
+ public void HostmaskPrivmsgBoth()
+ {
+ _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(":other!user@host PRIVMSG #chan :hi"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("user", user.UserName);
+ Assert.AreEqual("host", user.HostName);
+ }
+
+ [TestMethod]
+ public void HostmaskPrivmsgUser()
+ {
+ _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(":other!user PRIVMSG #chan :hi"));
+ var user = _server.Users["other"];
+ Assert.AreEqual("user", user.UserName);
+ Assert.IsNull(user.HostName);
+ }
+
+ [TestMethod]
+ public void HostmaskPrivmsgHost()
+ {
+ _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(":other@host PRIVMSG #chan :hi"));
+ var user = _server.Users["other"];
+ Assert.IsNull(user.UserName);
+ Assert.AreEqual("host", user.HostName);
+ }
+
+ [TestMethod]
+ public void VisibleHostWithoutUsername()
+ {
+ _server.Parse(new("396 * hostname"));
+ Assert.IsNull(_server.UserName);
+ Assert.AreEqual("hostname", _server.HostName);
+ }
+
+ [TestMethod]
+ public void VisibleHostWithUsername()
+ {
+ _server.Parse(new("396 * username@hostname"));
+ Assert.AreEqual("username", _server.UserName);
+ Assert.AreEqual("hostname", _server.HostName);
+ }
+
+ [TestMethod]
+ public void Who()
+ {
+ _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);
+ Assert.AreEqual("real", _server.RealName);
+
+ var user = _server.Users["other"];
+ Assert.AreEqual("user2", user.UserName);
+ Assert.AreEqual("host2", user.HostName);
+ Assert.AreEqual("real2", user.RealName);
+ }
+
+ [TestMethod]
+ public void Chghost()
+ {
+ _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(":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);
+ }
+
+ [TestMethod]
+ public void Whois()
+ {
+ _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(":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);
+ Assert.AreEqual("r2", user.RealName);
+ }
+
+ [TestMethod]
+ public void AwaySet()
+ {
+ _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(":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);
+ }
+
+ [TestMethod]
+ public void AwayUnset()
+ {
+ _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);
+ Assert.IsNull(user.Away);
+ }
+
+ [TestMethod]
+ public void Setname()
+ {
+ _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(":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);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/State/Who.cs b/IRCSharp.Tests/State/Who.cs
index 610d707..0460544 100644
--- a/IRCSharp.Tests/State/Who.cs
+++ b/IRCSharp.Tests/State/Who.cs
@@ -1,61 +1,57 @@
-using IRCStates;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.State;
-namespace IRCSharp.Tests.State
+[TestClass]
+public class Who
{
- [TestClass]
- public class Who
+ private Server _server;
+
+ [TestInitialize]
+ public void TestInitialize()
{
- private Server _server;
-
- [TestInitialize]
- public void TestInitialize()
- {
- _server = new("test");
- _server.Parse(new("001 nickname"));
- _server.Parse(new(":nickname JOIN #chan"));
- }
-
- [TestMethod]
- public void WhoResponse()
- {
- _server.Parse(new("352 * #chan user host server nickname * :0 real"));
- var user = _server.Users["nickname"];
-
- Assert.AreEqual("user", user.UserName);
- Assert.AreEqual("host", _server.HostName);
- Assert.AreEqual("real", user.RealName);
-
- Assert.AreEqual(user.UserName, _server.UserName);
- Assert.AreEqual(user.HostName, _server.HostName);
- Assert.AreEqual(user.RealName, _server.RealName);
- }
-
- [TestMethod]
- public void Whox()
- {
- _server.Parse(new($"354 * {Server.WhoType} user realip host nickname account :real"));
- var user = _server.Users["nickname"];
-
- Assert.AreEqual("user", user.UserName);
- Assert.AreEqual("host", user.HostName);
- Assert.AreEqual("real", user.RealName);
- Assert.AreEqual("account", user.Account);
-
- Assert.AreEqual(user.UserName, _server.UserName);
- Assert.AreEqual(user.HostName, _server.HostName);
- Assert.AreEqual(user.RealName, _server.RealName);
- Assert.AreEqual(user.Account, _server.Account);
- }
-
- [TestMethod]
- public void WhoxNoAccount()
- {
- _server.Parse(new($"354 * {Server.WhoType} user realip host nickname 0 :real"));
- var user = _server.Users["nickname"];
-
- Assert.IsNull(user.Account);
- Assert.AreEqual(user.Account, _server.Account);
- }
+ _server = new("test");
+ _server.Parse(new("001 nickname"));
+ _server.Parse(new(":nickname JOIN #chan"));
}
-}
+
+ [TestMethod]
+ public void WhoResponse()
+ {
+ _server.Parse(new("352 * #chan user host server nickname * :0 real"));
+ var user = _server.Users["nickname"];
+
+ Assert.AreEqual("user", user.UserName);
+ Assert.AreEqual("host", _server.HostName);
+ Assert.AreEqual("real", user.RealName);
+
+ Assert.AreEqual(user.UserName, _server.UserName);
+ Assert.AreEqual(user.HostName, _server.HostName);
+ Assert.AreEqual(user.RealName, _server.RealName);
+ }
+
+ [TestMethod]
+ public void Whox()
+ {
+ _server.Parse(new($"354 * {Server.WhoType} user realip host nickname account :real"));
+ var user = _server.Users["nickname"];
+
+ Assert.AreEqual("user", user.UserName);
+ Assert.AreEqual("host", user.HostName);
+ Assert.AreEqual("real", user.RealName);
+ Assert.AreEqual("account", user.Account);
+
+ Assert.AreEqual(user.UserName, _server.UserName);
+ Assert.AreEqual(user.HostName, _server.HostName);
+ Assert.AreEqual(user.RealName, _server.RealName);
+ Assert.AreEqual(user.Account, _server.Account);
+ }
+
+ [TestMethod]
+ public void WhoxNoAccount()
+ {
+ _server.Parse(new($"354 * {Server.WhoType} user realip host nickname 0 :real"));
+ var user = _server.Users["nickname"];
+
+ Assert.IsNull(user.Account);
+ Assert.AreEqual(user.Account, _server.Account);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/Data/JoinModel.cs b/IRCSharp.Tests/Tokenization/Data/JoinModel.cs
index 638ae23..e3cebdd 100644
--- a/IRCSharp.Tests/Tokenization/Data/JoinModel.cs
+++ b/IRCSharp.Tests/Tokenization/Data/JoinModel.cs
@@ -1,30 +1,28 @@
-using System.Collections.Generic;
-using YamlDotNet.Serialization;
+using YamlDotNet.Serialization;
-namespace IRCSharp.Tests.Tokenization.Data
+namespace IRCSharp.Tests.Tokenization.Data;
+
+public class JoinModel
{
- public class JoinModel
+ public List Tests { get; set; }
+
+ public class Test
{
- public List Tests { get; set; }
+ [YamlMember(Alias = "desc")] public string Description { get; set; }
- public class Test
- {
- [YamlMember(Alias = "desc")] public string Description { get; set; }
+ public Atoms Atoms { get; set; }
- public Atoms Atoms { get; set; }
-
- public List Matches { get; set; }
- }
-
- public class Atoms
- {
- public Dictionary Tags { get; set; }
-
- public string Source { get; set; }
-
- public string Verb { get; set; }
-
- public List Params { get; set; }
- }
+ public List Matches { get; set; }
}
-}
+
+ public class Atoms
+ {
+ public Dictionary Tags { get; set; }
+
+ public string Source { get; set; }
+
+ public string Verb { get; set; }
+
+ public List Params { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/Data/SplitModel.cs b/IRCSharp.Tests/Tokenization/Data/SplitModel.cs
index 1856dd9..cee9f14 100644
--- a/IRCSharp.Tests/Tokenization/Data/SplitModel.cs
+++ b/IRCSharp.Tests/Tokenization/Data/SplitModel.cs
@@ -1,15 +1,12 @@
-using System.Collections.Generic;
+namespace IRCSharp.Tests.Tokenization.Data;
-namespace IRCSharp.Tests.Tokenization.Data
+public class SplitModel
{
- public class SplitModel
- {
- public List Tests { get; set; }
+ public List Tests { get; set; }
- public class Test
- {
- public string Input { get; set; }
- public JoinModel.Atoms Atoms { get; set; }
- }
+ public class Test
+ {
+ public string Input { get; set; }
+ public JoinModel.Atoms Atoms { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/Format.cs b/IRCSharp.Tests/Tokenization/Format.cs
index 97d3702..2ae5ada 100644
--- a/IRCSharp.Tests/Tokenization/Format.cs
+++ b/IRCSharp.Tests/Tokenization/Format.cs
@@ -1,105 +1,100 @@
-using System;
-using IRCTokens;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.Tokenization;
-namespace IRCSharp.Tests.Tokenization
+[TestClass]
+public class Format
{
- [TestClass]
- public class Format
+ [TestMethod]
+ public void Tags()
{
- [TestMethod]
- public void Tags()
+ var line = new Line("PRIVMSG", "#channel", "hello")
{
- var line = new Line("PRIVMSG", "#channel", "hello")
- {
- Tags = new() {{"id", "\\" + " " + ";" + "\r\n"}}
- }.Format();
+ Tags = new() {{"id", "\\" + " " + ";" + "\r\n"}}
+ }.Format();
- Assert.AreEqual("@id=\\\\\\s\\:\\r\\n PRIVMSG #channel hello", line);
- }
-
- [TestMethod]
- public void MissingTag()
- {
- var line = new Line("PRIVMSG", "#channel", "hello").Format();
-
- Assert.AreEqual("PRIVMSG #channel hello", line);
- }
-
- [TestMethod]
- public void NullTag()
- {
- var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new() {{"a", null}}}
- .Format();
-
- Assert.AreEqual("@a PRIVMSG #channel hello", line);
- }
-
- [TestMethod]
- public void EmptyTag()
- {
- var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new() {{"a", ""}}}
- .Format();
-
- Assert.AreEqual("@a PRIVMSG #channel hello", line);
- }
-
- [TestMethod]
- public void Source()
- {
- var line = new Line("PRIVMSG", "#channel", "hello") {Source = "nick!user@host"}.Format();
-
- Assert.AreEqual(":nick!user@host PRIVMSG #channel hello", line);
- }
-
- [TestMethod]
- public void CommandLowercase()
- {
- var line = new Line {Command = "privmsg"}.Format();
- Assert.AreEqual("privmsg", line);
- }
-
- [TestMethod]
- public void CommandUppercase()
- {
- var line = new Line {Command = "PRIVMSG"}.Format();
- Assert.AreEqual("PRIVMSG", line);
- }
-
- [TestMethod]
- public void TrailingSpace()
- {
- var line = new Line("PRIVMSG", "#channel", "hello world").Format();
-
- Assert.AreEqual("PRIVMSG #channel :hello world", line);
- }
-
- [TestMethod]
- public void TrailingNoSpace()
- {
- var line = new Line("PRIVMSG", "#channel", "helloworld").Format();
-
- Assert.AreEqual("PRIVMSG #channel helloworld", line);
- }
-
- [TestMethod]
- public void TrailingDoubleColon()
- {
- var line = new Line("PRIVMSG", "#channel", ":helloworld").Format();
-
- Assert.AreEqual("PRIVMSG #channel ::helloworld", line);
- }
-
- [TestMethod]
- public void InvalidNonLastSpace()
- {
- Assert.ThrowsException(() => { new Line("USER", "user", "0 *", "real name").Format(); });
- }
-
- [TestMethod]
- public void InvalidNonLastColon()
- {
- Assert.ThrowsException(() => { new Line("PRIVMSG", ":#channel", "hello").Format(); });
- }
+ Assert.AreEqual(@"@id=\\\s\:\r\n PRIVMSG #channel hello", line);
}
-}
+
+ [TestMethod]
+ public void MissingTag()
+ {
+ var line = new Line("PRIVMSG", "#channel", "hello").Format();
+
+ Assert.AreEqual("PRIVMSG #channel hello", line);
+ }
+
+ [TestMethod]
+ public void NullTag()
+ {
+ var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new() {{"a", null}}}
+ .Format();
+
+ Assert.AreEqual("@a PRIVMSG #channel hello", line);
+ }
+
+ [TestMethod]
+ public void EmptyTag()
+ {
+ var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new() {{"a", ""}}}
+ .Format();
+
+ Assert.AreEqual("@a PRIVMSG #channel hello", line);
+ }
+
+ [TestMethod]
+ public void Source()
+ {
+ var line = new Line("PRIVMSG", "#channel", "hello") {Source = "nick!user@host"}.Format();
+
+ Assert.AreEqual(":nick!user@host PRIVMSG #channel hello", line);
+ }
+
+ [TestMethod]
+ public void CommandLowercase()
+ {
+ var line = new Line {Command = "privmsg"}.Format();
+ Assert.AreEqual("privmsg", line);
+ }
+
+ [TestMethod]
+ public void CommandUppercase()
+ {
+ var line = new Line {Command = "PRIVMSG"}.Format();
+ Assert.AreEqual("PRIVMSG", line);
+ }
+
+ [TestMethod]
+ public void TrailingSpace()
+ {
+ var line = new Line("PRIVMSG", "#channel", "hello world").Format();
+
+ Assert.AreEqual("PRIVMSG #channel :hello world", line);
+ }
+
+ [TestMethod]
+ public void TrailingNoSpace()
+ {
+ var line = new Line("PRIVMSG", "#channel", "helloworld").Format();
+
+ Assert.AreEqual("PRIVMSG #channel helloworld", line);
+ }
+
+ [TestMethod]
+ public void TrailingDoubleColon()
+ {
+ var line = new Line("PRIVMSG", "#channel", ":helloworld").Format();
+
+ Assert.AreEqual("PRIVMSG #channel ::helloworld", line);
+ }
+
+ [TestMethod]
+ public void InvalidNonLastSpace()
+ {
+ Assert.ThrowsException(() => { new Line("USER", "user", "0 *", "real name").Format(); });
+ }
+
+ [TestMethod]
+ public void InvalidNonLastColon()
+ {
+ Assert.ThrowsException(() => { new Line("PRIVMSG", ":#channel", "hello").Format(); });
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/Hostmask.cs b/IRCSharp.Tests/Tokenization/Hostmask.cs
index a7de338..4d15134 100644
--- a/IRCSharp.Tests/Tokenization/Hostmask.cs
+++ b/IRCSharp.Tests/Tokenization/Hostmask.cs
@@ -1,65 +1,61 @@
-using IRCTokens;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.Tokenization;
-namespace IRCSharp.Tests.Tokenization
+[TestClass]
+public class Hostmask
{
- [TestClass]
- public class Hostmask
+ [TestMethod]
+ public void FullHostmask()
{
- [TestMethod]
- public void FullHostmask()
- {
- var hostmask = new IRCTokens.Hostmask("nick!user@host");
- Assert.AreEqual("nick", hostmask.NickName);
- Assert.AreEqual("user", hostmask.UserName);
- Assert.AreEqual("host", hostmask.HostName);
- }
-
- [TestMethod]
- public void NoHostName()
- {
- var hostmask = new IRCTokens.Hostmask("nick!user");
- Assert.AreEqual("nick", hostmask.NickName);
- Assert.AreEqual("user", hostmask.UserName);
- Assert.IsNull(hostmask.HostName);
- }
-
- [TestMethod]
- public void NoUserName()
- {
- var hostmask = new IRCTokens.Hostmask("nick@host");
- Assert.AreEqual("nick", hostmask.NickName);
- Assert.IsNull(hostmask.UserName);
- Assert.AreEqual("host", hostmask.HostName);
- }
-
- [TestMethod]
- public void OnlyNickName()
- {
- var hostmask = new IRCTokens.Hostmask("nick");
- Assert.AreEqual("nick", hostmask.NickName);
- Assert.IsNull(hostmask.UserName);
- Assert.IsNull(hostmask.HostName);
- }
-
- [TestMethod]
- public void HostmaskFromLine()
- {
- var line = new Line(":nick!user@host PRIVMSG #channel hello");
- var hostmask = new IRCTokens.Hostmask("nick!user@host");
- Assert.AreEqual(hostmask.ToString(), line.Hostmask.ToString());
- Assert.AreEqual("nick", line.Hostmask.NickName);
- Assert.AreEqual("user", line.Hostmask.UserName);
- Assert.AreEqual("host", line.Hostmask.HostName);
- }
-
- [TestMethod]
- public void EmptyHostmaskFromLine()
- {
- var line = new Line("PRIVMSG #channel hello");
- Assert.IsNull(line.Hostmask.HostName);
- Assert.IsNull(line.Hostmask.UserName);
- Assert.IsNull(line.Hostmask.NickName);
- }
+ var hostmask = new IRCTokens.Hostmask("nick!user@host");
+ Assert.AreEqual("nick", hostmask.NickName);
+ Assert.AreEqual("user", hostmask.UserName);
+ Assert.AreEqual("host", hostmask.HostName);
}
-}
+
+ [TestMethod]
+ public void NoHostName()
+ {
+ var hostmask = new IRCTokens.Hostmask("nick!user");
+ Assert.AreEqual("nick", hostmask.NickName);
+ Assert.AreEqual("user", hostmask.UserName);
+ Assert.IsNull(hostmask.HostName);
+ }
+
+ [TestMethod]
+ public void NoUserName()
+ {
+ var hostmask = new IRCTokens.Hostmask("nick@host");
+ Assert.AreEqual("nick", hostmask.NickName);
+ Assert.IsNull(hostmask.UserName);
+ Assert.AreEqual("host", hostmask.HostName);
+ }
+
+ [TestMethod]
+ public void OnlyNickName()
+ {
+ var hostmask = new IRCTokens.Hostmask("nick");
+ Assert.AreEqual("nick", hostmask.NickName);
+ Assert.IsNull(hostmask.UserName);
+ Assert.IsNull(hostmask.HostName);
+ }
+
+ [TestMethod]
+ public void HostmaskFromLine()
+ {
+ var line = new Line(":nick!user@host PRIVMSG #channel hello");
+ var hostmask = new IRCTokens.Hostmask("nick!user@host");
+ Assert.AreEqual(hostmask.ToString(), line.Hostmask.ToString());
+ Assert.AreEqual("nick", line.Hostmask.NickName);
+ Assert.AreEqual("user", line.Hostmask.UserName);
+ Assert.AreEqual("host", line.Hostmask.HostName);
+ }
+
+ [TestMethod]
+ public void EmptyHostmaskFromLine()
+ {
+ var line = new Line("PRIVMSG #channel hello");
+ Assert.IsNull(line.Hostmask.HostName);
+ Assert.IsNull(line.Hostmask.UserName);
+ Assert.IsNull(line.Hostmask.NickName);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/Parser.cs b/IRCSharp.Tests/Tokenization/Parser.cs
index 4f4338b..9b12214 100644
--- a/IRCSharp.Tests/Tokenization/Parser.cs
+++ b/IRCSharp.Tests/Tokenization/Parser.cs
@@ -1,56 +1,52 @@
-using System.Collections.Generic;
-using System.Globalization;
+using System.Globalization;
using System.IO;
using IRCSharp.Tests.Tokenization.Data;
-using IRCTokens;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
-namespace IRCSharp.Tests.Tokenization
+namespace IRCSharp.Tests.Tokenization;
+
+[TestClass]
+public class Parser
{
- [TestClass]
- public class Parser
+ private static T LoadYaml(string path)
{
- private static T LoadYaml(string path)
+ var deserializer = new DeserializerBuilder()
+ .WithNamingConvention(CamelCaseNamingConvention.Instance)
+ .Build();
+
+ return deserializer.Deserialize(File.ReadAllText(path));
+ }
+
+ [TestMethod]
+ public void Split()
+ {
+ foreach (var test in LoadYaml("Tokenization/Data/msg-split.yaml").Tests)
{
- var deserializer = new DeserializerBuilder()
- .WithNamingConvention(CamelCaseNamingConvention.Instance)
- .Build();
+ var tokens = new Line(test.Input);
+ var atoms = test.Atoms;
- return deserializer.Deserialize(File.ReadAllText(path));
- }
-
- [TestMethod]
- public void Split()
- {
- foreach (var test in LoadYaml("Tokenization/Data/msg-split.yaml").Tests)
- {
- var tokens = new Line(test.Input);
- var atoms = test.Atoms;
-
- Assert.AreEqual(atoms.Verb.ToUpper(CultureInfo.InvariantCulture), tokens.Command,
- $"command failed on: '{test.Input}'");
- Assert.AreEqual(atoms.Source, tokens.Source, $"source failed on: '{test.Input}'");
- CollectionAssert.AreEqual(atoms.Tags, tokens.Tags, $"tags failed on: '{test.Input}'");
- CollectionAssert.AreEqual(atoms.Params ?? new List(), tokens.Params,
- $"params failed on: '{test.Input}'");
- }
- }
-
- [TestMethod]
- public void Join()
- {
- foreach (var test in LoadYaml("Tokenization/Data/msg-join.yaml").Tests)
- {
- var atoms = test.Atoms;
- var line = new Line
- {
- Command = atoms.Verb, Params = atoms.Params, Source = atoms.Source, Tags = atoms.Tags
- }.Format();
-
- Assert.IsTrue(test.Matches.Contains(line), test.Description);
- }
+ Assert.AreEqual(atoms.Verb.ToUpper(CultureInfo.InvariantCulture), tokens.Command,
+ $"command failed on: '{test.Input}'");
+ Assert.AreEqual(atoms.Source, tokens.Source, $"source failed on: '{test.Input}'");
+ CollectionAssert.AreEqual(atoms.Tags, tokens.Tags, $"tags failed on: '{test.Input}'");
+ CollectionAssert.AreEqual(atoms.Params ?? [], tokens.Params,
+ $"params failed on: '{test.Input}'");
}
}
-}
+
+ [TestMethod]
+ public void Join()
+ {
+ foreach (var test in LoadYaml("Tokenization/Data/msg-join.yaml").Tests)
+ {
+ var atoms = test.Atoms;
+ var line = new Line
+ {
+ Command = atoms.Verb, Params = atoms.Params, Source = atoms.Source, Tags = atoms.Tags
+ }.Format();
+
+ Assert.IsTrue(test.Matches.Contains(line), test.Description);
+ }
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/StatefulDecoder.cs b/IRCSharp.Tests/Tokenization/StatefulDecoder.cs
index 403309a..8caa443 100644
--- a/IRCSharp.Tests/Tokenization/StatefulDecoder.cs
+++ b/IRCSharp.Tests/Tokenization/StatefulDecoder.cs
@@ -1,89 +1,83 @@
-using System.Collections.Generic;
-using System.Text;
-using IRCTokens;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.Tokenization;
-namespace IRCSharp.Tests.Tokenization
+[TestClass]
+public class StatefulDecoder
{
- [TestClass]
- public class StatefulDecoder
+ private IRCTokens.StatefulDecoder _decoder;
+
+ [TestInitialize]
+ public void Initialize()
{
- private IRCTokens.StatefulDecoder _decoder;
-
- [TestInitialize]
- public void Initialize()
- {
- _decoder = new();
- }
-
- [TestMethod]
- public void Partial()
- {
- var lines = _decoder.Push("PRIVMSG ");
- Assert.AreEqual(0, lines.Count);
-
- lines = _decoder.Push("#channel hello\r\n");
- Assert.AreEqual(1, lines.Count);
-
- var line = new Line("PRIVMSG #channel hello");
- CollectionAssert.AreEqual(new List {line}, lines);
- }
-
- [TestMethod]
- public void Multiple()
- {
- var lines = _decoder.Push("PRIVMSG #channel1 hello\r\nPRIVMSG #channel2 hello\r\n");
- Assert.AreEqual(2, lines.Count);
-
- var line1 = new Line("PRIVMSG #channel1 hello");
- var line2 = new Line("PRIVMSG #channel2 hello");
- Assert.AreEqual(line1, lines[0]);
- Assert.AreEqual(line2, lines[1]);
- }
-
- [TestMethod]
- public void EncodingIso8859()
- {
- var iso8859 = Encoding.GetEncoding("iso-8859-1");
- _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 Ç");
- Assert.IsTrue(line.Equals(lines[0]));
- }
-
- [TestMethod]
- public void EncodingFallback()
- {
- var latin1 = Encoding.GetEncoding("iso-8859-1");
- _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);
- Assert.IsTrue(new Line("PRIVMSG #channel hélló").Equals(lines[0]));
- }
-
- [TestMethod]
- public void Empty()
- {
- var lines = _decoder.Push(string.Empty);
- Assert.AreEqual(0, lines.Count);
- }
-
- [TestMethod]
- public void BufferUnfinished()
- {
- _decoder.Push("PRIVMSG #channel hello");
- var lines = _decoder.Push(string.Empty);
- Assert.AreEqual(0, lines.Count);
- }
-
- [TestMethod]
- public void Clear()
- {
- _decoder.Push("PRIVMSG ");
- _decoder.Clear();
- Assert.AreEqual(string.Empty, _decoder.Pending);
- }
+ _decoder = new();
}
-}
+
+ [TestMethod]
+ public void Partial()
+ {
+ var lines = _decoder.Push("PRIVMSG ");
+ Assert.AreEqual(0, lines.Count);
+
+ lines = _decoder.Push("#channel hello\r\n");
+ Assert.AreEqual(1, lines.Count);
+
+ var line = new Line("PRIVMSG #channel hello");
+ CollectionAssert.AreEqual(new List {line}, lines);
+ }
+
+ [TestMethod]
+ public void Multiple()
+ {
+ var lines = _decoder.Push("PRIVMSG #channel1 hello\r\nPRIVMSG #channel2 hello\r\n");
+ Assert.AreEqual(2, lines.Count);
+
+ var line1 = new Line("PRIVMSG #channel1 hello");
+ var line2 = new Line("PRIVMSG #channel2 hello");
+ Assert.AreEqual(line1, lines[0]);
+ Assert.AreEqual(line2, lines[1]);
+ }
+
+ [TestMethod]
+ public void EncodingIso8859()
+ {
+ var iso8859 = Encoding.GetEncoding("iso-8859-1");
+ _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 Ç");
+ Assert.IsTrue(line.Equals(lines[0]));
+ }
+
+ [TestMethod]
+ public void EncodingFallback()
+ {
+ var latin1 = Encoding.GetEncoding("iso-8859-1");
+ _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);
+ Assert.IsTrue(new Line("PRIVMSG #channel hélló").Equals(lines[0]));
+ }
+
+ [TestMethod]
+ public void Empty()
+ {
+ var lines = _decoder.Push(string.Empty);
+ Assert.AreEqual(0, lines.Count);
+ }
+
+ [TestMethod]
+ public void BufferUnfinished()
+ {
+ _decoder.Push("PRIVMSG #channel hello");
+ var lines = _decoder.Push(string.Empty);
+ Assert.AreEqual(0, lines.Count);
+ }
+
+ [TestMethod]
+ public void Clear()
+ {
+ _decoder.Push("PRIVMSG ");
+ _decoder.Clear();
+ Assert.AreEqual(string.Empty, _decoder.Pending);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/StatefulEncoder.cs b/IRCSharp.Tests/Tokenization/StatefulEncoder.cs
index a2d1863..7e4b7ec 100644
--- a/IRCSharp.Tests/Tokenization/StatefulEncoder.cs
+++ b/IRCSharp.Tests/Tokenization/StatefulEncoder.cs
@@ -1,85 +1,80 @@
-using System.Text;
-using IRCTokens;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.Tokenization;
-namespace IRCSharp.Tests.Tokenization
+[TestClass]
+public class StatefulEncoder
{
- [TestClass]
- public class StatefulEncoder
+ private IRCTokens.StatefulEncoder _encoder;
+
+ [TestInitialize]
+ public void Initialize()
{
- private IRCTokens.StatefulEncoder _encoder;
-
- [TestInitialize]
- public void Initialize()
- {
- _encoder = new();
- }
-
- [TestMethod]
- public void Push()
- {
- var line = new Line("PRIVMSG #channel hello");
- _encoder.Push(line);
- Assert.AreEqual("PRIVMSG #channel hello\r\n", _encoder.Pending());
- }
-
- [TestMethod]
- public void PopPartial()
- {
- var line = new Line("PRIVMSG #channel hello");
- _encoder.Push(line);
- _encoder.Pop("PRIVMSG #channel hello".Length);
- Assert.AreEqual("\r\n", _encoder.Pending());
- }
-
- [TestMethod]
- public void TestPopReturned()
- {
- var line = new Line("PRIVMSG #channel hello");
- _encoder.Push(line);
- _encoder.Push(line);
- var lines = _encoder.Pop("PRIVMSG #channel hello\r\n".Length);
- Assert.AreEqual(1, lines.Count);
- Assert.AreEqual(line, lines[0]);
- }
-
- [TestMethod]
- public void PopNoneReturned()
- {
- var line = new Line("PRIVMSG #channel hello");
- _encoder.Push(line);
- var lines = _encoder.Pop(1);
- Assert.AreEqual(0, lines.Count);
- }
-
- [TestMethod]
- public void PopMultipleLines()
- {
- var line1 = new Line("PRIVMSG #channel1 hello");
- _encoder.Push(line1);
- var line2 = new Line("PRIVMSG #channel2 hello");
- _encoder.Push(line2);
-
- var lines = _encoder.Pop(_encoder.Pending().Length);
- Assert.AreEqual(2, lines.Count);
- Assert.AreEqual(string.Empty, _encoder.Pending());
- }
-
- [TestMethod]
- public void Clear()
- {
- _encoder.Push(new("PRIVMSG #channel hello"));
- _encoder.Clear();
- Assert.AreEqual(string.Empty, _encoder.Pending());
- }
-
- [TestMethod]
- public void EncodingIso8859()
- {
- var iso8859 = Encoding.GetEncoding("iso-8859-1");
- _encoder = new() {Encoding = iso8859};
- _encoder.Push(new("PRIVMSG #channel :hello Ç"));
- CollectionAssert.AreEqual(iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"), _encoder.PendingBytes);
- }
+ _encoder = new();
}
-}
+
+ [TestMethod]
+ public void Push()
+ {
+ var line = new Line("PRIVMSG #channel hello");
+ _encoder.Push(line);
+ Assert.AreEqual("PRIVMSG #channel hello\r\n", _encoder.Pending());
+ }
+
+ [TestMethod]
+ public void PopPartial()
+ {
+ var line = new Line("PRIVMSG #channel hello");
+ _encoder.Push(line);
+ _encoder.Pop("PRIVMSG #channel hello".Length);
+ Assert.AreEqual("\r\n", _encoder.Pending());
+ }
+
+ [TestMethod]
+ public void TestPopReturned()
+ {
+ var line = new Line("PRIVMSG #channel hello");
+ _encoder.Push(line);
+ _encoder.Push(line);
+ var lines = _encoder.Pop("PRIVMSG #channel hello\r\n".Length);
+ Assert.AreEqual(1, lines.Count);
+ Assert.AreEqual(line, lines[0]);
+ }
+
+ [TestMethod]
+ public void PopNoneReturned()
+ {
+ var line = new Line("PRIVMSG #channel hello");
+ _encoder.Push(line);
+ var lines = _encoder.Pop(1);
+ Assert.AreEqual(0, lines.Count);
+ }
+
+ [TestMethod]
+ public void PopMultipleLines()
+ {
+ var line1 = new Line("PRIVMSG #channel1 hello");
+ _encoder.Push(line1);
+ var line2 = new Line("PRIVMSG #channel2 hello");
+ _encoder.Push(line2);
+
+ var lines = _encoder.Pop(_encoder.Pending().Length);
+ Assert.AreEqual(2, lines.Count);
+ Assert.AreEqual(string.Empty, _encoder.Pending());
+ }
+
+ [TestMethod]
+ public void Clear()
+ {
+ _encoder.Push(new("PRIVMSG #channel hello"));
+ _encoder.Clear();
+ Assert.AreEqual(string.Empty, _encoder.Pending());
+ }
+
+ [TestMethod]
+ public void EncodingIso8859()
+ {
+ var iso8859 = Encoding.GetEncoding("iso-8859-1");
+ _encoder = new() {Encoding = iso8859};
+ _encoder.Push(new("PRIVMSG #channel :hello Ç"));
+ CollectionAssert.AreEqual(iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"), _encoder.PendingBytes);
+ }
+}
\ No newline at end of file
diff --git a/IRCSharp.Tests/Tokenization/Tokenization.cs b/IRCSharp.Tests/Tokenization/Tokenization.cs
index b270e4e..8680a75 100644
--- a/IRCSharp.Tests/Tokenization/Tokenization.cs
+++ b/IRCSharp.Tests/Tokenization/Tokenization.cs
@@ -1,134 +1,127 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using IRCTokens;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
+namespace IRCSharp.Tests.Tokenization;
-namespace IRCSharp.Tests.Tokenization
+[TestClass]
+public class Tokenization
{
- [TestClass]
- public class Tokenization
+ [TestMethod]
+ public void TagsMissing()
{
- [TestMethod]
- public void TagsMissing()
- {
- var line = new Line("PRIVMSG #channel");
- Assert.IsNull(line.Tags);
- }
-
- [TestMethod]
- public void TagsMissingValue()
- {
- var line = new Line("@id= PRIVMSG #channel");
- Assert.AreEqual(string.Empty, line.Tags["id"]);
- }
-
- [TestMethod]
- public void TagsMissingEqual()
- {
- var line = new Line("@id PRIVMSG #channel");
- Assert.AreEqual(string.Empty, line.Tags["id"]);
- }
-
- [TestMethod]
- public void TagsUnescape()
- {
- var line = new Line(@"@id=1\\\:\r\n\s2 PRIVMSG #channel");
- Assert.AreEqual("1\\;\r\n 2", line.Tags["id"]);
- }
-
- [TestMethod]
- public void TagsOverlap()
- {
- var line = new Line(@"@id=1\\\s\\s PRIVMSG #channel");
- Assert.AreEqual("1\\ \\s", line.Tags["id"]);
- }
-
- [TestMethod]
- public void TagsLoneEndSlash()
- {
- var line = new Line("@id=1\\ PRIVMSG #channel");
- Assert.AreEqual("1", line.Tags["id"]);
- }
-
- [TestMethod]
- public void SourceWithoutTags()
- {
- var line = new Line(":nick!user@host PRIVMSG #channel");
- Assert.AreEqual("nick!user@host", line.Source);
- }
-
- [TestMethod]
- public void SourceWithTags()
- {
- var line = new Line("@id=123 :nick!user@host PRIVMSG #channel");
- Assert.AreEqual("nick!user@host", line.Source);
- }
-
- [TestMethod]
- public void SourceMissingWithoutTags()
- {
- var line = new Line("PRIVMSG #channel");
- Assert.IsNull(line.Source);
- }
-
- [TestMethod]
- public void SourceMissingWithTags()
- {
- var line = new Line("@id=123 PRIVMSG #channel");
- Assert.IsNull(line.Source);
- }
-
- [TestMethod]
- public void Command()
- {
- var line = new Line("privmsg #channel");
- Assert.AreEqual("PRIVMSG", line.Command);
- }
-
- [TestMethod]
- public void ParamsTrailing()
- {
- var line = new Line("PRIVMSG #channel :hello world");
- CollectionAssert.AreEqual(new List {"#channel", "hello world"}, line.Params);
- }
-
- [TestMethod]
- public void ParamsOnlyTrailing()
- {
- var line = new Line("PRIVMSG :hello world");
- CollectionAssert.AreEqual(new List {"hello world"}, line.Params);
- }
-
- [TestMethod]
- public void ParamsMissing()
- {
- var line = new Line("PRIVMSG");
- Assert.AreEqual("PRIVMSG", line.Command);
- CollectionAssert.AreEqual(new List(), line.Params);
- }
-
- [TestMethod]
- public void AllTokens()
- {
- var line = new Line("@id=123 :nick!user@host PRIVMSG #channel :hello world");
- CollectionAssert.AreEqual(new Dictionary {{"id", "123"}}, line.Tags);
- Assert.AreEqual("nick!user@host", line.Source);
- Assert.AreEqual("PRIVMSG", line.Command);
- CollectionAssert.AreEqual(new List {"#channel", "hello world"}, line.Params);
- }
-
- [TestMethod]
- public void NulByte()
- {
- var decoder = new IRCTokens.StatefulDecoder();
- var bytes = Encoding.UTF8.GetBytes(":nick!user@host PRIVMSG #channel :hello")
- .Concat(Encoding.UTF8.GetBytes("\0"))
- .Concat(Encoding.UTF8.GetBytes("world"))
- .ToArray();
- var line = decoder.Push(bytes, bytes.Length).First();
-
- CollectionAssert.AreEqual(new List {"#channel", "hello"}, line.Params);
- }
+ var line = new Line("PRIVMSG #channel");
+ Assert.IsNull(line.Tags);
}
-}
+
+ [TestMethod]
+ public void TagsMissingValue()
+ {
+ var line = new Line("@id= PRIVMSG #channel");
+ Assert.AreEqual(string.Empty, line.Tags["id"]);
+ }
+
+ [TestMethod]
+ public void TagsMissingEqual()
+ {
+ var line = new Line("@id PRIVMSG #channel");
+ Assert.AreEqual(string.Empty, line.Tags["id"]);
+ }
+
+ [TestMethod]
+ public void TagsUnescape()
+ {
+ var line = new Line(@"@id=1\\\:\r\n\s2 PRIVMSG #channel");
+ Assert.AreEqual("1\\;\r\n 2", line.Tags["id"]);
+ }
+
+ [TestMethod]
+ public void TagsOverlap()
+ {
+ var line = new Line(@"@id=1\\\s\\s PRIVMSG #channel");
+ Assert.AreEqual(@"1\ \s", line.Tags["id"]);
+ }
+
+ [TestMethod]
+ public void TagsLoneEndSlash()
+ {
+ var line = new Line("@id=1\\ PRIVMSG #channel");
+ Assert.AreEqual("1", line.Tags["id"]);
+ }
+
+ [TestMethod]
+ public void SourceWithoutTags()
+ {
+ var line = new Line(":nick!user@host PRIVMSG #channel");
+ Assert.AreEqual("nick!user@host", line.Source);
+ }
+
+ [TestMethod]
+ public void SourceWithTags()
+ {
+ var line = new Line("@id=123 :nick!user@host PRIVMSG #channel");
+ Assert.AreEqual("nick!user@host", line.Source);
+ }
+
+ [TestMethod]
+ public void SourceMissingWithoutTags()
+ {
+ var line = new Line("PRIVMSG #channel");
+ Assert.IsNull(line.Source);
+ }
+
+ [TestMethod]
+ public void SourceMissingWithTags()
+ {
+ var line = new Line("@id=123 PRIVMSG #channel");
+ Assert.IsNull(line.Source);
+ }
+
+ [TestMethod]
+ public void Command()
+ {
+ var line = new Line("privmsg #channel");
+ Assert.AreEqual("PRIVMSG", line.Command);
+ }
+
+ [TestMethod]
+ public void ParamsTrailing()
+ {
+ var line = new Line("PRIVMSG #channel :hello world");
+ CollectionAssert.AreEqual(new List {"#channel", "hello world"}, line.Params);
+ }
+
+ [TestMethod]
+ public void ParamsOnlyTrailing()
+ {
+ var line = new Line("PRIVMSG :hello world");
+ CollectionAssert.AreEqual(new List {"hello world"}, line.Params);
+ }
+
+ [TestMethod]
+ public void ParamsMissing()
+ {
+ var line = new Line("PRIVMSG");
+ Assert.AreEqual("PRIVMSG", line.Command);
+ CollectionAssert.AreEqual(new List(), line.Params);
+ }
+
+ [TestMethod]
+ public void AllTokens()
+ {
+ var line = new Line("@id=123 :nick!user@host PRIVMSG #channel :hello world");
+ CollectionAssert.AreEqual(new Dictionary {{"id", "123"}}, line.Tags);
+ Assert.AreEqual("nick!user@host", line.Source);
+ Assert.AreEqual("PRIVMSG", line.Command);
+ CollectionAssert.AreEqual(new List {"#channel", "hello world"}, line.Params);
+ }
+
+ [TestMethod]
+ public void NulByte()
+ {
+ var decoder = new IRCTokens.StatefulDecoder();
+ var bytes = ":nick!user@host PRIVMSG #channel :hello"u8.ToArray()
+ .Concat("\0"u8.ToArray())
+ .Concat("world"u8.ToArray())
+ .ToArray();
+ var line = decoder.Push(bytes, bytes.Length).First();
+
+ CollectionAssert.AreEqual(new List {"#channel", "hello"}, line.Params);
+ }
+}
\ No newline at end of file
diff --git a/IRCTokens/Line.cs b/IRCTokens/Line.cs
index 491ea2e..11c2ac8 100644
--- a/IRCTokens/Line.cs
+++ b/IRCTokens/Line.cs
@@ -212,10 +212,10 @@ namespace IRCTokens
foreach (var p in withoutLast)
{
if (p.Contains(' ', StringComparison.Ordinal))
- throw new ArgumentException(@"non-last parameters cannot have spaces", p);
+ throw new ArgumentException("non-last parameters cannot have spaces", p);
if (p.StartsWith(':'))
- throw new ArgumentException(@"non-last parameters cannot start with colon", p);
+ throw new ArgumentException("non-last parameters cannot start with colon", p);
}
outs.AddRange(withoutLast);