Start to port some ircstates tests
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Ben Harris 2020-04-29 01:28:48 -04:00
parent e2d93c593c
commit 53da4d4c2a
5 changed files with 206 additions and 13 deletions

View File

@ -1,6 +1,23 @@
namespace IrcStates using System.Collections.Generic;
namespace IrcStates
{ {
public class Emit public class Emit
{ {
public string Command { get; set; }
public string Subcommand { get; set; }
public string Text { get; set; }
public List<string> Tokens { get; set; }
public bool Finished { get; set; }
public bool SelfSource { get; set; }
public bool SelfTarget { get; set; }
public Tests.User User { get; set; }
public Tests.User UserSource { get; set; }
public Tests.User UserTarget { get; set; }
public List<Tests.User> Users { get; set; }
public Tests.Channel Channel { get; set; }
public Tests.Channel ChannelSource { get; set; }
public Tests.Channel ChannelTarget { get; set; }
public string Target { get; set; }
} }
} }

View File

@ -64,16 +64,22 @@ namespace IrcStates
return null; return null;
} }
private Emit ParseTokens(Line line) public Emit ParseTokens(Line line)
{ {
Emit ret; if (line != null && !LineHandlers.ContainsKey(line.Command)) return null;
if (LineHandlers.ContainsKey(line.Command)) var ret = new Emit();
foreach (var callback in LineHandlers[line.Command])
{
var emit = callback(line.Command, line);
}
throw new NotImplementedException(); var handlers = LineHandlers[line.Command]
.Select(callback => callback(line.Command, line))
.Where(emit => emit != null);
foreach (var emit in handlers)
{
emit.Command = line.Command;
ret = emit;
}
return ret;
} }
} }
} }

View File

@ -1,9 +1,130 @@
using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Collections.Generic;
using IrcTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace IrcStates.Tests namespace IrcStates.Tests
{ {
[TestClass] [TestClass]
public class Cap public class Cap
{ {
private Server _server;
[TestInitialize]
public void TestInitialize()
{
_server = new Server("test");
}
[TestMethod]
public void LSOneLine()
{
Assert.IsFalse(_server.HasCap);
CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
_server.ParseTokens(new Line("CAP * LS :a b"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
}
[TestMethod]
public void LSTwoLines()
{
_server.ParseTokens(new Line("CAP * LS * :a b"));
CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
_server.ParseTokens(new Line("CAP * LS :c"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", ""}},
_server.AvailableCaps);
}
[TestMethod]
public void LSValues()
{
_server.ParseTokens(new Line("CAP * LS :a b= c=1"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", "1"}},
_server.AvailableCaps);
}
[TestMethod]
public void ACKOneLine()
{
_server.ParseTokens(new Line("CAP * LS :a b"));
_server.ParseTokens(new Line("CAP * ACK :a b"));
CollectionAssert.AreEqual(new List<string> {"a", "b"}, _server.AgreedCaps);
}
[TestMethod]
public void ACKTwoLines()
{
_server.ParseTokens(new Line("CAP * LS :a b c"));
_server.ParseTokens(new Line("CAP * ACK * :a b"));
_server.ParseTokens(new Line("CAP * ACK :c"));
CollectionAssert.AreEqual(new List<string> {"a", "b", "c"}, _server.AgreedCaps);
}
[TestMethod]
public void ACKNotLS()
{
_server.ParseTokens(new Line("CAP * LS a"));
_server.ParseTokens(new Line("CAP * ACK b"));
CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
}
[TestMethod]
public void NEWNoLS()
{
_server.ParseTokens(new Line("CAP * NEW :a"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}}, _server.AvailableCaps);
}
[TestMethod]
public void NEWOneLine()
{
_server.ParseTokens(new Line("CAP * LS :a"));
_server.ParseTokens(new Line("CAP * NEW :b"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}}, _server.AvailableCaps);
}
[TestMethod]
public void NEWTwoLines()
{
_server.ParseTokens(new Line("CAP * LS :a"));
_server.ParseTokens(new Line("CAP * NEW :b c"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"a", ""}, {"b", ""}, {"c", ""}},
_server.AvailableCaps);
}
[TestMethod]
public void DELNotAcked()
{
_server.ParseTokens(new Line("CAP * DEL a"));
}
[TestMethod]
public void DELOneLS()
{
_server.ParseTokens(new Line("CAP * LS :a"));
_server.ParseTokens(new Line("CAP * ACK :a"));
_server.ParseTokens(new Line("CAP * DEL :a"));
CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
}
[TestMethod]
public void DELTwoLS()
{
_server.ParseTokens(new Line("CAP * LS :a b"));
_server.ParseTokens(new Line("CAP * ACK :a b"));
_server.ParseTokens(new Line("CAP * DEL :a"));
CollectionAssert.AreEqual(new Dictionary<string, string> {{"b", ""}}, _server.AvailableCaps);
CollectionAssert.AreEqual(new List<string> {"b"}, _server.AgreedCaps);
}
[TestMethod]
public void DELTwoDEL()
{
_server.ParseTokens(new Line("CAP * LS :a b"));
_server.ParseTokens(new Line("CAP * ACK :a b"));
_server.ParseTokens(new Line("CAP * DEL :a b"));
CollectionAssert.AreEqual(new Dictionary<string, string>(), _server.AvailableCaps);
CollectionAssert.AreEqual(new List<string>(), _server.AgreedCaps);
}
} }
} }

View File

@ -1,9 +1,58 @@
using Microsoft.VisualStudio.TestTools.UnitTesting; using IrcTokens;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace IrcStates.Tests namespace IrcStates.Tests
{ {
[TestClass] [TestClass]
public class Casemap public class Casemap
{ {
[TestMethod]
public void Rfc1459()
{
var lower = IrcStates.Casemap.CaseFold(IrcStates.Casemap.CaseMapping.Rfc1459, @"ÀTEST[]~\");
Assert.AreEqual("Àtest{}^|", lower);
}
[TestMethod]
public void Ascii()
{
var lower = IrcStates.Casemap.CaseFold(IrcStates.Casemap.CaseMapping.Ascii, @"ÀTEST[]~\");
Assert.AreEqual(@"Àtest[]~\", lower);
}
[TestMethod]
public void CommandJoin()
{
var server = new Server("test");
server.ParseTokens(new Line("001 nickname"));
server.ParseTokens(new Line(":Nickname JOIN #Chan"));
server.ParseTokens(new Line(":Other JOIN #Chan"));
Assert.IsTrue(server.Users.ContainsKey("nickname"));
Assert.IsFalse(server.Users.ContainsKey("Nickname"));
Assert.IsTrue(server.Users.ContainsKey("other"));
Assert.IsFalse(server.Users.ContainsKey("Other"));
Assert.IsTrue(server.Channels.ContainsKey("#chan"));
Assert.IsFalse(server.Channels.ContainsKey("#Chan"));
var channel = server.Channels["#chan"];
Assert.AreEqual("#Chan", channel.Name);
}
[TestMethod]
public void CommandNick()
{
var server = new Server("test");
server.ParseTokens(new Line("001 nickname"));
server.ParseTokens(new Line(":nickname JOIN #chan"));
var user = server.Users["nickname"];
server.ParseTokens(new Line(":nickname NICK NewNickname"));
Assert.AreEqual(1, server.Users.Count);
Assert.IsTrue(server.Users.ContainsKey("newnickname"));
Assert.AreEqual("NewNickname", user.NickName);
Assert.AreEqual("newnickname", user.NickNameLower);
Assert.AreEqual("NewNickName", server.NickName);
Assert.AreEqual("newnickname", server.NickNameLower);
}
} }
} }

View File

@ -4,8 +4,8 @@ namespace IrcStates
{ {
public class User public class User
{ {
private string NickName; public string NickName { get; set; }
private string NickNameLower; public string NickNameLower { get; set; }
public string UserName { get; set; } public string UserName { get; set; }
public string HostName { get; set; } public string HostName { get; set; }