using IRCStates; using IRCTokens; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace IRCSharp.Tests.State { [TestClass] public class User { private Server _server; [TestInitialize] public void TestInitialize() { _server = new Server("test"); _server.Parse(new Line("001 nickname")); } [TestMethod] public void Welcome() { Assert.AreEqual("test", _server.Name); Assert.AreEqual("nickname", _server.NickName); } [TestMethod] public void NicknameChange() { _server.Parse(new Line(":nickname NICK nickname2")); Assert.AreEqual("nickname2", _server.NickName); _server.Parse(new Line(":nickname2 JOIN #chan")); _server.Parse(new Line(":other JOIN #chan")); Assert.IsTrue(_server.Users.ContainsKey("other")); _server.Parse(new Line(":other NICK other2")); Assert.IsFalse(_server.Users.ContainsKey("other")); Assert.IsTrue(_server.Users.ContainsKey("other2")); } [TestMethod] public void HostmaskJoinBoth() { _server.Parse(new Line(":nickname!user@host JOIN #chan")); Assert.AreEqual("user", _server.UserName); Assert.AreEqual("host", _server.HostName); _server.Parse(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.Parse(new Line(":nickname!user JOIN #chan")); Assert.AreEqual("user", _server.UserName); Assert.IsNull(_server.HostName); _server.Parse(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.Parse(new Line(":nickname@host JOIN #chan")); Assert.IsNull(_server.UserName); Assert.AreEqual("host", _server.HostName); _server.Parse(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.Parse(new Line(":nickname JOIN #chan")); Assert.IsNull(_server.Account); Assert.IsNull(_server.RealName); _server.Parse(new Line(":other JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(user.Account); Assert.IsNull(user.RealName); } [TestMethod] public void ExtendedJoinWithAccount() { _server.Parse(new Line(":nickname JOIN #chan acc :realname")); Assert.AreEqual("acc", _server.Account); Assert.AreEqual("realname", _server.RealName); _server.Parse(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.Parse(new Line(":nickname JOIN #chan * :realname")); Assert.AreEqual("", _server.Account); Assert.AreEqual("realname", _server.RealName); _server.Parse(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.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":nickname ACCOUNT acc")); Assert.AreEqual("acc", _server.Account); _server.Parse(new Line(":other JOIN #chan")); _server.Parse(new Line(":other ACCOUNT acc2")); var user = _server.Users["other"]; Assert.AreEqual("acc2", user.Account); } [TestMethod] public void AccountNotifyWithoutAccount() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":nickname ACCOUNT *")); Assert.AreEqual("", _server.Account); _server.Parse(new Line(":other JOIN #chan")); _server.Parse(new Line(":other ACCOUNT *")); var user = _server.Users["other"]; Assert.AreEqual("", user.Account); } [TestMethod] public void HostmaskPrivmsgBoth() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":nickname!user@host PRIVMSG #chan :hi")); Assert.AreEqual("user", _server.UserName); Assert.AreEqual("host", _server.HostName); _server.Parse(new Line(":other!user@host PRIVMSG #chan :hi")); var user = _server.Users["other"]; Assert.AreEqual("user", user.UserName); Assert.AreEqual("host", user.HostName); } [TestMethod] public void HostmaskPrivmsgUser() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":nickname!user PRIVMSG #chan :hi")); Assert.AreEqual("user", _server.UserName); Assert.IsNull(_server.HostName); _server.Parse(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.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":nickname@host PRIVMSG #chan :hi")); Assert.IsNull(_server.UserName); Assert.AreEqual("host", _server.HostName); _server.Parse(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.Parse(new Line("396 * hostname")); Assert.IsNull(_server.UserName); Assert.AreEqual("hostname", _server.HostName); } [TestMethod] public void VisibleHostWithUsername() { _server.Parse(new Line("396 * username@hostname")); Assert.AreEqual("username", _server.UserName); Assert.AreEqual("hostname", _server.HostName); } [TestMethod] public void Who() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":other JOIN #chan")); _server.Parse(new Line("352 * #chan user host * nickname * :0 real")); _server.Parse(new Line("352 * #chan user2 host2 * other * :0 real2")); 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 Line(":nickname!user@host JOIN #chan")); _server.Parse(new Line(":nickname CHGHOST u h")); Assert.AreEqual("u", _server.UserName); Assert.AreEqual("h", _server.HostName); _server.Parse(new Line(":other!user2@host2 JOIN #chan")); _server.Parse(new Line(":other CHGHOST u2 h2")); var user = _server.Users["other"]; Assert.AreEqual("u2", user.UserName); Assert.AreEqual("h2", user.HostName); } [TestMethod] public void Whois() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line("311 * nickname u h * :r")); Assert.AreEqual("u", _server.UserName); Assert.AreEqual("h", _server.HostName); Assert.AreEqual("r", _server.RealName); _server.Parse(new Line(":other JOIN #chan")); _server.Parse(new Line(":other CHGHOST u2 h2")); _server.Parse(new Line("311 * other u2 h2 * :r2")); 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 Line(":nickname JOIN #chan")); _server.Parse(new Line(":other JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(_server.Away); Assert.IsNull(user.Away); _server.Parse(new Line(":nickname AWAY :bye bye")); _server.Parse(new Line(":other AWAY :ich geh weg")); Assert.AreEqual("bye bye", _server.Away); Assert.AreEqual("ich geh weg", user.Away); } [TestMethod] public void AwayUnset() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":other JOIN #chan")); _server.Parse(new Line(":nickname AWAY :bye bye")); _server.Parse(new Line(":nickname AWAY")); _server.Parse(new Line(":other AWAY :ich geh weg")); _server.Parse(new Line(":other AWAY")); var user = _server.Users["other"]; Assert.IsNull(_server.Away); Assert.IsNull(user.Away); } [TestMethod] public void Setname() { _server.Parse(new Line(":nickname JOIN #chan")); _server.Parse(new Line(":other JOIN #chan")); var user = _server.Users["other"]; Assert.IsNull(user.RealName); Assert.IsNull(_server.RealName); _server.Parse(new Line(":nickname SETNAME :new now know how")); _server.Parse(new Line(":other SETNAME :tyrannosaurus hex")); Assert.AreEqual("new now know how", _server.RealName); Assert.AreEqual("tyrannosaurus hex", user.RealName); } } }