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 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;
}
private Emit ParseTokens(Line line)
public Emit ParseTokens(Line line)
{
Emit ret;
if (LineHandlers.ContainsKey(line.Command))
foreach (var callback in LineHandlers[line.Command])
{
var emit = callback(line.Command, line);
}
if (line != null && !LineHandlers.ContainsKey(line.Command)) return null;
var ret = new Emit();
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
{
[TestClass]
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
{
[TestClass]
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
{
private string NickName;
private string NickNameLower;
public string NickName { get; set; }
public string NickNameLower { get; set; }
public string UserName { get; set; }
public string HostName { get; set; }