2020-05-06 01:21:59 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using IrcTokens;
|
|
|
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
2020-04-22 20:28:51 +00:00
|
|
|
|
|
|
|
|
|
namespace IrcStates.Tests
|
|
|
|
|
{
|
|
|
|
|
[TestClass]
|
|
|
|
|
public class Channel
|
|
|
|
|
{
|
2020-05-06 01:21:59 +00:00
|
|
|
|
private Server _server;
|
|
|
|
|
|
|
|
|
|
[TestInitialize]
|
|
|
|
|
public void TestInitialize()
|
|
|
|
|
{
|
|
|
|
|
_server = new Server("test");
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("001 nickname"));
|
|
|
|
|
_server.Parse(new Line(":nickname JOIN #chan"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[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));
|
|
|
|
|
var chanUser = chan.Users[user.NickNameLower];
|
|
|
|
|
CollectionAssert.AreEqual(new List<string> {chan.NameLower}, user.Channels.ToList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void JoinOther()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line(":other JOIN #chan"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
|
|
|
|
|
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<string> {channel.NameLower}, user.Channels.ToList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void PartSelf()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line(":nickname PART #chan"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
|
|
|
|
|
Assert.AreEqual(0, _server.Users.Count);
|
|
|
|
|
Assert.AreEqual(0, _server.Channels.Count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void PartOther()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line(":other JOIN #chan"));
|
|
|
|
|
_server.Parse(new Line(":other PART #chan"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
|
|
|
|
|
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<string, IrcStates.User> {{"nickname", user}}, _server.Users);
|
|
|
|
|
CollectionAssert.AreEqual(new Dictionary<string, IrcStates.Channel> {{"#chan", channel}}, _server.Channels);
|
|
|
|
|
CollectionAssert.AreEqual(new Dictionary<string, ChannelUser> {{"nickname", chanUser}}, channel.Users);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void KickSelf()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line(":nickname KICK #chan nickname"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
|
|
|
|
|
Assert.AreEqual(0, _server.Users.Count);
|
|
|
|
|
Assert.AreEqual(0, _server.Channels.Count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void KickOther()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line(":other JOIN #chan"));
|
|
|
|
|
_server.Parse(new Line(":nickname KICK #chan other"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
|
|
|
|
|
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<string, ChannelUser> {{user.NickNameLower, chanUser}},
|
|
|
|
|
channel.Users);
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-14 03:34:33 +00:00
|
|
|
|
[TestMethod]
|
|
|
|
|
public void QuitSelf()
|
|
|
|
|
{
|
|
|
|
|
_server.Parse(new Line("QUIT :i'm outta here"));
|
|
|
|
|
Assert.IsFalse(_server.Users.Any());
|
|
|
|
|
Assert.IsFalse(_server.Channels.Any());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void QuitSelfWithSource()
|
|
|
|
|
{
|
|
|
|
|
_server.Parse(new Line(":nickname QUIT :i'm outta here"));
|
|
|
|
|
Assert.IsFalse(_server.Users.Any());
|
|
|
|
|
Assert.IsFalse(_server.Channels.Any());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void QuitOther()
|
|
|
|
|
{
|
|
|
|
|
_server.Parse(new Line(":other JOIN #chan"));
|
|
|
|
|
_server.Parse(new Line(":other QUIT :see ya"));
|
|
|
|
|
Assert.IsFalse(_server.Users.ContainsKey("other"));
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-06 01:21:59 +00:00
|
|
|
|
[TestMethod]
|
|
|
|
|
public void TopicText()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("332 * #chan :test"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
Assert.AreEqual("test", _server.Channels["#chan"].Topic);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void TopicSetByAt()
|
|
|
|
|
{
|
|
|
|
|
var dt = DateTimeOffset.FromUnixTimeSeconds(1584023277).DateTime;
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("333 * #chan other 1584023277"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
|
|
|
|
|
var channel = _server.Channels["#chan"];
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual("other", channel.TopicSetter);
|
|
|
|
|
Assert.AreEqual(dt, channel.TopicTime);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void TopicCommand()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("TOPIC #chan :hello there"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
Assert.AreEqual("hello there", _server.Channels["#chan"].Topic);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void CreationDate()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("329 * #chan 1584041889"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1584041889).DateTime, _server.Channels["#chan"].Created);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void NamesCommand()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("353 * * #chan :nickname @+other"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
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];
|
|
|
|
|
|
|
|
|
|
CollectionAssert.AreEqual(
|
|
|
|
|
new Dictionary<string, ChannelUser>
|
|
|
|
|
{
|
|
|
|
|
{user.NickNameLower, chanUser1}, {_server.NickNameLower, chanUser2}
|
|
|
|
|
}, channel.Users);
|
|
|
|
|
CollectionAssert.AreEqual(new List<string> {"o", "v"}, chanUser1.Modes);
|
|
|
|
|
Assert.AreEqual(channel.NameLower, user.Channels.Single());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestMethod]
|
|
|
|
|
public void UserhostInNames()
|
|
|
|
|
{
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line("353 * * #chan :nickname!user@host other@user2@host2"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
Assert.AreEqual("user", _server.UserName);
|
|
|
|
|
Assert.AreEqual("host", _server.HostName);
|
|
|
|
|
|
|
|
|
|
var user = _server.Users["other"];
|
|
|
|
|
Assert.AreEqual("user2", user.HostName);
|
|
|
|
|
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];
|
2020-05-13 18:20:47 +00:00
|
|
|
|
_server.Parse(new Line(":nickname NICK nickname2"));
|
2020-05-06 01:21:59 +00:00
|
|
|
|
CollectionAssert.AreEqual(new Dictionary<string, ChannelUser> {{user.NickNameLower, chanUser}},
|
|
|
|
|
channel.Users);
|
|
|
|
|
}
|
2020-04-22 20:28:51 +00:00
|
|
|
|
}
|
|
|
|
|
}
|