ircsharp/IRCSharp.Tests/State/Mode.cs

181 lines
6.1 KiB
C#

using System.Collections.Generic;
using IRCStates;
using IRCTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace IRCSharp.Tests.State
{
[TestClass]
public class Mode
{
private Server _server;
[TestInitialize]
public void TestInitialize()
{
_server = new Server("test");
_server.Parse(new Line("001 nickname"));
}
[TestMethod]
public void UModeAdd()
{
_server.Parse(new Line("MODE nickname +i"));
CollectionAssert.AreEqual(new List<string> {"i"}, _server.Modes);
}
[TestMethod]
public void UModeRemove()
{
_server.Parse(new Line("MODE nickname +i"));
_server.Parse(new Line("MODE nickname -i"));
CollectionAssert.AreEqual(new List<string>(), _server.Modes);
}
[TestMethod]
public void PrefixAdd()
{
_server.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(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.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(new Line("MODE #chan +ov nickname nickname"));
_server.Parse(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.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(new Line("MODE #chan +b asd!*@*"));
var channel = _server.Channels["#chan"];
CollectionAssert.AreEqual(new List<string> {"asd!*@*"}, channel.ListModes["b"]);
}
[TestMethod]
public void ChannelListRemove()
{
_server.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(new Line("MODE #chan +b asd!*@*"));
_server.Parse(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.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(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.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(new Line("MODE #chan +k password"));
_server.Parse(new Line("MODE #chan -k *"));
var channel = _server.Channels["#chan"];
CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
}
[TestMethod]
public void ChannelTypeCAdd()
{
_server.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(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.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(new Line("MODE #chan +l 100"));
_server.Parse(new Line("MODE #chan -l"));
var channel = _server.Channels["#chan"];
CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
}
[TestMethod]
public void ChannelTypeDAdd()
{
_server.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(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.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(new Line("MODE #chan +i"));
_server.Parse(new Line("MODE #chan -i"));
var channel = _server.Channels["#chan"];
CollectionAssert.AreEqual(new Dictionary<string, string>(), channel.Modes);
}
[TestMethod]
public void ChannelNumeric()
{
_server.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(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 List<string> {"*!*@*"}, channel.ListModes["b"]);
}
[TestMethod]
public void ChannelNumericWithoutPlus()
{
_server.Parse(new Line(":nickname JOIN #chan"));
_server.Parse(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.Parse(new Line("221 * +iw"));
CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
}
[TestMethod]
public void UserNumericWithoutPlus()
{
_server.Parse(new Line("221 * iw"));
CollectionAssert.AreEqual(new List<string> {"i", "w"}, _server.Modes);
}
}
}