From 0117d9d9a0a395166e15c0996f87af823928d011 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 6 May 2020 11:48:07 -0400 Subject: [PATCH] add all missing tests --- IrcStates/Tests/Mode.cs | 77 ++++++++++++++++++ IrcStates/Tests/User.cs | 173 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 250 insertions(+) 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 {"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(), 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> {{"b", new List {"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>(), 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 {{"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(), 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 {{"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(), 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 {{"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(), 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 {{"k", "pass"}, {"l", "10"}, {"i", null}}, + channel.Modes); + CollectionAssert.AreEqual(new Dictionary> {{"b", new List {"*!*@*"}}}, + 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 {{"i", null}, {"l", "10"}}, channel.Modes); } [TestMethod] public void UserNumeric() { + _server.ParseTokens(new Line("221 * +iw")); + CollectionAssert.AreEqual(new List {"i", "w"}, _server.Modes); } [TestMethod] public void UserNumericWithoutPlus() { + _server.ParseTokens(new Line("221 * iw")); + CollectionAssert.AreEqual(new List {"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); } } }