about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2020-05-06 11:48:07 -0400
committerBen Harris <ben@tilde.team>2020-05-06 11:48:07 -0400
commit0117d9d9a0a395166e15c0996f87af823928d011 (patch)
tree11c8ceb3b36f9e2f558397ef3fe88ea90837578c
parentdfe5a0035bd321a0774ae402de8fa5cc8f2b8c06 (diff)
add all missing tests
-rw-r--r--IrcStates/Tests/Mode.cs77
-rw-r--r--IrcStates/Tests/User.cs173
2 files changed, 250 insertions, 0 deletions
diff --git a/IrcStates/Tests/Mode.cs b/IrcStates/Tests/Mode.cs
index 98c6aaf..3418adb 100644
--- a/IrcStates/Tests/Mode.cs
+++ b/IrcStates/Tests/Mode.cs
@@ -34,71 +34,148 @@ namespace IrcStates.Tests
         [TestMethod]
         public void PrefixAdd()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("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<string> {"o", "v"}, channelUser.Modes);
         }
 
         [TestMethod]
         public void PrefixRemove()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +ov nickname nickname"));
+            _server.ParseTokens(new Line("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<string>(), channelUser.Modes);
         }
 
         [TestMethod]
         public void ChannelListAdd()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +b asd!*@*"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, List<string>> {{"b", new List<string> {"asd!*@*"}}},
+                channel.ListModes);
         }
 
         [TestMethod]
         public void ChannelListRemove()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +b asd!*@*"));
+            _server.ParseTokens(new Line("MODE #chan -b asd!*@*"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, List<string>>(), channel.ListModes);
         }
 
         [TestMethod]
         public void ChannelTypeBAdd()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +k password"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string> {{"k", "password"}}, channel.Modes);
         }
 
         [TestMethod]
         public void ChannelTypeBRemove()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +k password"));
+            _server.ParseTokens(new Line("MODE #chan -k *"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
         }
 
         [TestMethod]
         public void ChannelTypeCAdd()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +l 100"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string> {{"l", "100"}}, channel.Modes);
         }
 
         [TestMethod]
         public void ChannelTypeCRemove()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +l 100"));
+            _server.ParseTokens(new Line("MODE #chan -l"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
         }
 
         [TestMethod]
         public void ChannelTypeDAdd()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +i"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string> {{"i", null}}, channel.Modes);
         }
 
         [TestMethod]
         public void ChannelTypeDRemove()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("MODE #chan +i"));
+            _server.ParseTokens(new Line("MODE #chan -i"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
         }
 
         [TestMethod]
         public void ChannelNumeric()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("324 * #chan +bkli *!*@* pass 10"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string> {{"k", "pass"}, {"l", "10"}, {"i", null}},
+                channel.Modes);
+            CollectionAssert.AreEqual(new Dictionary<string, List<string>> {{"b", new List<string> {"*!*@*"}}},
+                channel.ListModes);
         }
 
         [TestMethod]
         public void ChannelNumericWithoutPlus()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("324 * #chan il 10"));
+
+            var channel = _server.Channels["#chan"];
+            CollectionAssert.AreEqual(new Dictionary<string, string> {{"i", null}, {"l", "10"}}, channel.Modes);
         }
 
         [TestMethod]
         public void UserNumeric()
         {
+            _server.ParseTokens(new Line("221 * +iw"));
+            CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
         }
 
         [TestMethod]
         public void UserNumericWithoutPlus()
         {
+            _server.ParseTokens(new Line("221 * iw"));
+            CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
         }
     }
 }
diff --git a/IrcStates/Tests/User.cs b/IrcStates/Tests/User.cs
index 799ab75..1a65530 100644
--- a/IrcStates/Tests/User.cs
+++ b/IrcStates/Tests/User.cs
@@ -18,101 +18,274 @@ namespace IrcStates.Tests
         [TestMethod]
         public void NicknameChange()
         {
+            _server.ParseTokens(new Line(":nickname NICK nickname2"));
+            Assert.AreEqual("nickname2", _server.NickName);
+
+            _server.ParseTokens(new Line(":nickname2 JOIN #chan"));
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            Assert.IsTrue(_server.Users.ContainsKey("other"));
+
+            _server.ParseTokens(new Line(":other NICK other2"));
+            Assert.IsFalse(_server.Users.ContainsKey("other"));
+            Assert.IsTrue(_server.Users.ContainsKey("other2"));
         }
 
         [TestMethod]
         public void HostmaskJoinBoth()
         {
+            _server.ParseTokens(new Line(":nickname!user@host JOIN #chan"));
+            Assert.AreEqual("user", _server.UserName);
+            Assert.AreEqual("host", _server.HostName);
+
+            _server.ParseTokens(new Line(":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.ParseTokens(new Line(":nickname!user JOIN #chan"));
+            Assert.AreEqual("user", _server.UserName);
+            Assert.IsNull(_server.HostName);
+
+            _server.ParseTokens(new Line(":other!user JOIN #chan"));
+            var user = _server.Users["other"];
+            Assert.AreEqual("user", user.UserName);
+            Assert.IsNull(user.HostName);
         }
 
         [TestMethod]
         public void HostmaskJoinHost()
         {
+            _server.ParseTokens(new Line(":nickname@host JOIN #chan"));
+            Assert.IsNull(_server.UserName);
+            Assert.AreEqual("host", _server.HostName);
+
+            _server.ParseTokens(new Line(":other@host JOIN #chan"));
+            var user = _server.Users["other"];
+            Assert.IsNull(user.UserName);
+            Assert.AreEqual("host", user.HostName);
         }
 
         [TestMethod]
         public void ExtendedJoinWithoutExtendedJoin()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            Assert.IsNull(_server.Account);
+            Assert.IsNull(_server.RealName);
+
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            var user = _server.Users["other"];
+            Assert.IsNull(user.Account);
+            Assert.IsNull(user.RealName);
         }
 
         [TestMethod]
         public void ExtendedJoinWithAccount()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan acc :realname"));
+            Assert.AreEqual("acc", _server.Account);
+            Assert.AreEqual("realname", _server.RealName);
+
+            _server.ParseTokens(new Line(":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.ParseTokens(new Line(":nickname JOIN #chan * :realname"));
+            Assert.AreEqual("", _server.Account);
+            Assert.AreEqual("realname", _server.RealName);
+
+            _server.ParseTokens(new Line(":other JOIN #chan * :realname2"));
+            var user = _server.Users["other"];
+            Assert.AreEqual("", user.Account);
+            Assert.AreEqual("realname2", user.RealName);
         }
 
         [TestMethod]
         public void AccountNotifyWithAccount()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname ACCOUNT acc"));
+            Assert.AreEqual("acc", _server.Account);
+
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            _server.ParseTokens(new Line(":other ACCOUNT acc2"));
+            var user = _server.Users["other"];
+            Assert.AreEqual("acc2", user.Account);
         }
 
         [TestMethod]
         public void AccountNotifyWithoutAccount()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname ACCOUNT *"));
+            Assert.AreEqual("", _server.Account);
+
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            _server.ParseTokens(new Line(":other ACCOUNT *"));
+            var user = _server.Users["other"];
+            Assert.AreEqual("", user.Account);
         }
 
         [TestMethod]
         public void HostmaskPrivmsgBoth()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname!user@host PRIVMSG #chan :hi"));
+            Assert.AreEqual("user", _server.UserName);
+            Assert.AreEqual("host", _server.HostName);
+
+            _server.ParseTokens(new Line(":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.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname!user PRIVMSG #chan :hi"));
+            Assert.AreEqual("user", _server.UserName);
+            Assert.IsNull(_server.HostName);
+
+            _server.ParseTokens(new Line(":other!user PRIVMSG #chan :hi"));
+            var user = _server.Users["other"];
+            Assert.AreEqual("user", user.UserName);
+            Assert.IsNull(user.HostName);
         }
 
         [TestMethod]
         public void HostmaskPrivmsgHost()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname@host PRIVMSG #chan :hi"));
+            Assert.IsNull(_server.UserName);
+            Assert.AreEqual("host", _server.HostName);
+
+            _server.ParseTokens(new Line(":other@host PRIVMSG #chan :hi"));
+            var user = _server.Users["other"];
+            Assert.IsNull(user.UserName);
+            Assert.AreEqual("host", user.HostName);
         }
 
         [TestMethod]
         public void VisibleHostWithoutUsername()
         {
+            _server.ParseTokens(new Line("396 * hostname"));
+            Assert.IsNull(_server.UserName);
+            Assert.AreEqual("hostname", _server.HostName);
         }
 
         [TestMethod]
         public void VisibleHostWithUsername()
         {
+            _server.ParseTokens(new Line("396 * username@hostname"));
+            Assert.AreEqual("username", _server.UserName);
+            Assert.AreEqual("hostname", _server.HostName);
         }
 
         [TestMethod]
         public void Who()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            _server.ParseTokens(new Line("352 * #chan user host * nickname * :0 real"));
+            _server.ParseTokens(new Line("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.ParseTokens(new Line(":nickname!user@host JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname CHGHOST u h"));
+            Assert.AreEqual("u", _server.UserName);
+            Assert.AreEqual("h", _server.HostName);
+
+            _server.ParseTokens(new Line(":other!user2@host2 JOIN #chan"));
+            _server.ParseTokens(new Line(":other CHGHOST u2 h2"));
+            var user = _server.Users["other"];
+            Assert.AreEqual("u2", user.UserName);
+            Assert.AreEqual("h2", user.HostName);
         }
 
         [TestMethod]
         public void Whois()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line("311 * nickname u h * :r"));
+            Assert.AreEqual("u", _server.UserName);
+            Assert.AreEqual("h", _server.HostName);
+            Assert.AreEqual("r", _server.RealName);
+
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            _server.ParseTokens(new Line(":other CHGHOST u2 h2"));
+            _server.ParseTokens(new Line("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.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            var user = _server.Users["other"];
+            Assert.IsNull(_server.Away);
+            Assert.IsNull(user.Away);
+
+            _server.ParseTokens(new Line(":nickname AWAY :bye bye"));
+            _server.ParseTokens(new Line(":other AWAY :ich geh weg"));
+            Assert.AreEqual("bye bye", _server.Away);
+            Assert.AreEqual("ich geh weg", user.Away);
         }
 
         [TestMethod]
         public void AwayUnset()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            _server.ParseTokens(new Line(":nickname AWAY :bye bye"));
+            _server.ParseTokens(new Line(":nickname AWAY"));
+            _server.ParseTokens(new Line(":other AWAY :ich geh weg"));
+            _server.ParseTokens(new Line(":other AWAY"));
+
+            var user = _server.Users["other"];
+            Assert.IsNull(_server.Away);
+            Assert.IsNull(user.Away);
         }
 
         [TestMethod]
         public void Setname()
         {
+            _server.ParseTokens(new Line(":nickname JOIN #chan"));
+            _server.ParseTokens(new Line(":other JOIN #chan"));
+            var user = _server.Users["other"];
+            Assert.IsNull(user.RealName);
+            Assert.IsNull(_server.RealName);
+
+            _server.ParseTokens(new Line(":nickname SETNAME :new now know how"));
+            _server.ParseTokens(new Line(":other SETNAME :tyrannosaurus hex"));
+            Assert.AreEqual("new now know how", _server.RealName);
+            Assert.AreEqual("tyrannosaurus hex", user.RealName);
         }
     }
 }