diff options
Diffstat (limited to 'IrcTokens/Tests')
-rw-r--r-- | IrcTokens/Tests/Data/JoinModel.cs | 30 | ||||
-rw-r--r-- | IrcTokens/Tests/Data/SplitModel.cs | 15 | ||||
-rw-r--r-- | IrcTokens/Tests/Data/msg-join.yaml | 221 | ||||
-rw-r--r-- | IrcTokens/Tests/Data/msg-split.yaml | 343 | ||||
-rw-r--r-- | IrcTokens/Tests/Format.cs | 105 | ||||
-rw-r--r-- | IrcTokens/Tests/Hostmask.cs | 64 | ||||
-rw-r--r-- | IrcTokens/Tests/Parser.cs | 55 | ||||
-rw-r--r-- | IrcTokens/Tests/StatefulDecoder.cs | 88 | ||||
-rw-r--r-- | IrcTokens/Tests/StatefulEncoder.cs | 84 | ||||
-rw-r--r-- | IrcTokens/Tests/Tokenization.cs | 118 |
10 files changed, 0 insertions, 1123 deletions
diff --git a/IrcTokens/Tests/Data/JoinModel.cs b/IrcTokens/Tests/Data/JoinModel.cs deleted file mode 100644 index 2c08e58..0000000 --- a/IrcTokens/Tests/Data/JoinModel.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using YamlDotNet.Serialization; - -namespace IrcTokens.Tests.Data -{ - public class JoinModel - { - public List<Test> Tests { get; set; } - - public class Test - { - [YamlMember(Alias = "desc")] public string Description { get; set; } - - public Atoms Atoms { get; set; } - - public List<string> Matches { get; set; } - } - - public class Atoms - { - public Dictionary<string, string> Tags { get; set; } - - public string Source { get; set; } - - public string Verb { get; set; } - - public List<string> Params { get; set; } - } - } -} diff --git a/IrcTokens/Tests/Data/SplitModel.cs b/IrcTokens/Tests/Data/SplitModel.cs deleted file mode 100644 index 65177a3..0000000 --- a/IrcTokens/Tests/Data/SplitModel.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; - -namespace IrcTokens.Tests.Data -{ - public class SplitModel - { - public List<Test> Tests { get; set; } - - public class Test - { - public string Input { get; set; } - public JoinModel.Atoms Atoms { get; set; } - } - } -} diff --git a/IrcTokens/Tests/Data/msg-join.yaml b/IrcTokens/Tests/Data/msg-join.yaml deleted file mode 100644 index d1d7429..0000000 --- a/IrcTokens/Tests/Data/msg-join.yaml +++ /dev/null @@ -1,221 +0,0 @@ -# IRC parser tests -# joining atoms into sendable messages - -# Written in 2015 by Daniel Oaks <daniel@danieloaks.net> -# -# To the extent possible under law, the author(s) have dedicated all copyright -# and related and neighboring rights to this software to the public domain -# worldwide. This software is distributed without any warranty. -# -# You should have received a copy of the CC0 Public Domain Dedication along -# with this software. If not, see -# <http://creativecommons.org/publicdomain/zero/1.0/>. - -# some of the tests here originate from grawity's test vectors, which is WTFPL v2 licensed -# https://github.com/grawity/code/tree/master/lib/tests -# some of the tests here originate from Mozilla's test vectors, which is public domain -# https://dxr.mozilla.org/comm-central/source/chat/protocols/irc/test/test_ircMessage.js -# some of the tests here originate from SaberUK's test vectors, which he's indicated I am free to include here -# https://github.com/SaberUK/ircparser/tree/master/test - -tests: - # the desc string holds a description of the test, if it exists - - # the atoms dict has the keys: - # * tags: tags dict - # tags with no value are an empty string - # * source: source string, without single leading colon - # * verb: verb string - # * params: params split up as a list - # if the params key does not exist, assume it is empty - # if any other keys do no exist, assume they are null - # a key that is null does not exist or is not specified with the - # given input string - - # matches is a list of messages that match - - # simple tests - - desc: Simple test with verb and params. - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - "asdf" - matches: - - "foo bar baz asdf" - - "foo bar baz :asdf" - - # with no regular params - - desc: Simple test with source and no params. - atoms: - source: "src" - verb: "AWAY" - matches: - - ":src AWAY" - - - desc: Simple test with source and empty trailing param. - atoms: - source: "src" - verb: "AWAY" - params: - - "" - matches: - - ":src AWAY :" - - # with source - - desc: Simple test with source. - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - "asdf" - matches: - - ":coolguy foo bar baz asdf" - - ":coolguy foo bar baz :asdf" - - # with trailing param - - desc: Simple test with trailing param. - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - "asdf quux" - matches: - - "foo bar baz :asdf quux" - - - desc: Simple test with empty trailing param. - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - "" - matches: - - "foo bar baz :" - - - desc: Simple test with trailing param containing colon. - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - ":asdf" - matches: - - "foo bar baz ::asdf" - - # with source and trailing param - - desc: Test with source and trailing param. - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - "asdf quux" - matches: - - ":coolguy foo bar baz :asdf quux" - - - desc: Test with trailing containing beginning+end whitespace. - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - " asdf quux " - matches: - - ":coolguy foo bar baz : asdf quux " - - - desc: Test with trailing containing what looks like another trailing param. - atoms: - source: "coolguy" - verb: "PRIVMSG" - params: - - "bar" - - "lol :) " - matches: - - ":coolguy PRIVMSG bar :lol :) " - - - desc: Simple test with source and empty trailing. - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - "" - matches: - - ":coolguy foo bar baz :" - - - desc: Trailing contains only spaces. - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - " " - matches: - - ":coolguy foo bar baz : " - - - desc: Param containing tab (tab is not considered SPACE for message splitting). - atoms: - source: "coolguy" - verb: "foo" - params: - - "b\tar" - - "baz" - matches: - - ":coolguy foo b\tar baz" - - ":coolguy foo b\tar :baz" - - # with tags - - desc: Tag with no value and space-filled trailing. - atoms: - tags: - "asd": "" - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - " " - matches: - - "@asd :coolguy foo bar baz : " - - - desc: Tags with escaped values. - atoms: - verb: "foo" - tags: - "a": "b\\and\nk" - "d": "gh;764" - matches: - - "@a=b\\\\and\\nk;d=gh\\:764 foo" - - "@d=gh\\:764;a=b\\\\and\\nk foo" - - - desc: Tags with escaped values and params. - atoms: - verb: "foo" - tags: - "a": "b\\and\nk" - "d": "gh;764" - params: - - "par1" - - "par2" - matches: - - "@a=b\\\\and\\nk;d=gh\\:764 foo par1 par2" - - "@a=b\\\\and\\nk;d=gh\\:764 foo par1 :par2" - - "@d=gh\\:764;a=b\\\\and\\nk foo par1 par2" - - "@d=gh\\:764;a=b\\\\and\\nk foo par1 :par2" - - - desc: Tag with long, strange values (including LF and newline). - atoms: - tags: - foo: "\\\\;\\s \r\n" - verb: "COMMAND" - matches: - - "@foo=\\\\\\\\\\:\\\\s\\s\\r\\n COMMAND" diff --git a/IrcTokens/Tests/Data/msg-split.yaml b/IrcTokens/Tests/Data/msg-split.yaml deleted file mode 100644 index fa3f4aa..0000000 --- a/IrcTokens/Tests/Data/msg-split.yaml +++ /dev/null @@ -1,343 +0,0 @@ -# IRC parser tests -# splitting messages into usable atoms - -# Written in 2015 by Daniel Oaks <daniel@danieloaks.net> -# -# To the extent possible under law, the author(s) have dedicated all copyright -# and related and neighboring rights to this software to the public domain -# worldwide. This software is distributed without any warranty. -# -# You should have received a copy of the CC0 Public Domain Dedication along -# with this software. If not, see -# <http://creativecommons.org/publicdomain/zero/1.0/>. - -# some of the tests here originate from grawity's test vectors, which is WTFPL v2 licensed -# https://github.com/grawity/code/tree/master/lib/tests -# some of the tests here originate from Mozilla's test vectors, which is public domain -# https://dxr.mozilla.org/comm-central/source/chat/protocols/irc/test/test_ircMessage.js -# some of the tests here originate from SaberUK's test vectors, which he's indicated I am free to include here -# https://github.com/SaberUK/ircparser/tree/master/test - -# we follow RFC1459 with regards to multiple ascii spaces splitting atoms: -# The prefix, command, and all parameters are -# separated by one (or more) ASCII space character(s) (0x20). -# because doing it as RFC2812 says (strictly as a single ascii space) isn't sane - -tests: - # input is the string coming directly from the server to parse - - # the atoms dict has the keys: - # * tags: tags dict - # tags with no value are an empty string - # * source: source string, without single leading colon - # * verb: verb string - # * params: params split up as a list - # if the params key does not exist, assume it is empty - # if any other keys do no exist, assume they are null - # a key that is null does not exist or is not specified with the - # given input string - - # simple - - input: "foo bar baz asdf" - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - "asdf" - - # with source - - input: ":coolguy foo bar baz asdf" - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - "asdf" - - # with trailing param - - input: "foo bar baz :asdf quux" - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - "asdf quux" - - - input: "foo bar baz :" - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - "" - - - input: "foo bar baz ::asdf" - atoms: - verb: "foo" - params: - - "bar" - - "baz" - - ":asdf" - - # with source and trailing param - - input: ":coolguy foo bar baz :asdf quux" - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - "asdf quux" - - - input: ":coolguy foo bar baz : asdf quux " - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - " asdf quux " - - - input: ":coolguy PRIVMSG bar :lol :) " - atoms: - source: "coolguy" - verb: "PRIVMSG" - params: - - "bar" - - "lol :) " - - - input: ":coolguy foo bar baz :" - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - "" - - - input: ":coolguy foo bar baz : " - atoms: - source: "coolguy" - verb: "foo" - params: - - "bar" - - "baz" - - " " - - # with tags - - input: "@a=b;c=32;k;rt=ql7 foo" - atoms: - verb: "foo" - tags: - "a": "b" - "c": "32" - "k": "" - "rt": "ql7" - - # with escaped tags - - input: "@a=b\\\\and\\nk;c=72\\s45;d=gh\\:764 foo" - atoms: - verb: "foo" - tags: - "a": "b\\and\nk" - "c": "72 45" - "d": "gh;764" - - # with tags and source - - input: "@c;h=;a=b :quux ab cd" - atoms: - tags: - "c": "" - "h": "" - "a": "b" - source: "quux" - verb: "ab" - params: - - "cd" - - # different forms of last param - - input: ":src JOIN #chan" - atoms: - source: "src" - verb: "JOIN" - params: - - "#chan" - - - input: ":src JOIN :#chan" - atoms: - source: "src" - verb: "JOIN" - params: - - "#chan" - - # with and without last param - - input: ":src AWAY" - atoms: - source: "src" - verb: "AWAY" - - - input: ":src AWAY " - atoms: - source: "src" - verb: "AWAY" - - # tab is not considered <SPACE> - - input: ":cool\tguy foo bar baz" - atoms: - source: "cool\tguy" - verb: "foo" - params: - - "bar" - - "baz" - - # with weird control codes in the source - - input: ":coolguy!ag@net\x035w\x03ork.admin PRIVMSG foo :bar baz" - atoms: - source: "coolguy!ag@net\x035w\x03ork.admin" - verb: "PRIVMSG" - params: - - "foo" - - "bar baz" - - - input: ":coolguy!~ag@n\x02et\x0305w\x0fork.admin PRIVMSG foo :bar baz" - atoms: - source: "coolguy!~ag@n\x02et\x0305w\x0fork.admin" - verb: "PRIVMSG" - params: - - "foo" - - "bar baz" - - - input: "@tag1=value1;tag2;vendor1/tag3=value2;vendor2/tag4= :irc.example.com COMMAND param1 param2 :param3 param3" - atoms: - tags: - tag1: "value1" - tag2: "" - vendor1/tag3: "value2" - vendor2/tag4: "" - source: "irc.example.com" - verb: "COMMAND" - params: - - "param1" - - "param2" - - "param3 param3" - - - input: ":irc.example.com COMMAND param1 param2 :param3 param3" - atoms: - source: "irc.example.com" - verb: "COMMAND" - params: - - "param1" - - "param2" - - "param3 param3" - - - input: "@tag1=value1;tag2;vendor1/tag3=value2;vendor2/tag4 COMMAND param1 param2 :param3 param3" - atoms: - tags: - tag1: "value1" - tag2: "" - vendor1/tag3: "value2" - vendor2/tag4: "" - verb: "COMMAND" - params: - - "param1" - - "param2" - - "param3 param3" - - - input: "COMMAND" - atoms: - verb: "COMMAND" - - # yaml encoding + slashes is fun - - input: "@foo=\\\\\\\\\\:\\\\s\\s\\r\\n COMMAND" - atoms: - tags: - foo: "\\\\;\\s \r\n" - verb: "COMMAND" - - # broken messages from unreal - - input: ":gravel.mozilla.org 432 #momo :Erroneous Nickname: Illegal characters" - atoms: - source: "gravel.mozilla.org" - verb: "432" - params: - - "#momo" - - "Erroneous Nickname: Illegal characters" - - - input: ":gravel.mozilla.org MODE #tckk +n " - atoms: - source: "gravel.mozilla.org" - verb: "MODE" - params: - - "#tckk" - - "+n" - - - input: ":services.esper.net MODE #foo-bar +o foobar " - atoms: - source: "services.esper.net" - verb: "MODE" - params: - - "#foo-bar" - - "+o" - - "foobar" - - # tag values should be parsed char-at-a-time to prevent wayward replacements. - - input: "@tag1=value\\\\ntest COMMAND" - atoms: - tags: - tag1: "value\\ntest" - verb: "COMMAND" - - # If a tag value has a slash followed by a character which doesn't need - # to be escaped, the slash should be dropped. - - input: "@tag1=value\\1 COMMAND" - atoms: - tags: - tag1: "value1" - verb: "COMMAND" - - # A slash at the end of a tag value should be dropped - - input: "@tag1=value1\\ COMMAND" - atoms: - tags: - tag1: "value1" - verb: "COMMAND" - - # Duplicate tags: Parsers SHOULD disregard all but the final occurence - - input: "@tag1=1;tag2=3;tag3=4;tag1=5 COMMAND" - atoms: - tags: - tag1: "5" - tag2: "3" - tag3: "4" - verb: "COMMAND" - - # vendored tags can have the same name as a non-vendored tag - - input: "@tag1=1;tag2=3;tag3=4;tag1=5;vendor/tag2=8 COMMAND" - atoms: - tags: - tag1: "5" - tag2: "3" - tag3: "4" - vendor/tag2: "8" - verb: "COMMAND" - - # Some parsers handle /MODE in a special way, make sure they do it right - - input: ":SomeOp MODE #channel :+i" - atoms: - source: "SomeOp" - verb: "MODE" - params: - - "#channel" - - "+i" - - - input: ":SomeOp MODE #channel +oo SomeUser :AnotherUser" - atoms: - source: "SomeOp" - verb: "MODE" - params: - - "#channel" - - "+oo" - - "SomeUser" - - "AnotherUser" diff --git a/IrcTokens/Tests/Format.cs b/IrcTokens/Tests/Format.cs deleted file mode 100644 index 69a5682..0000000 --- a/IrcTokens/Tests/Format.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace IrcTokens.Tests -{ - [TestClass] - public class Format - { - [TestMethod] - public void TestTags() - { - var line = new Line("PRIVMSG", "#channel", "hello") - { - Tags = new Dictionary<string, string> {{"id", "\\" + " " + ";" + "\r\n"}} - }.Format(); - - Assert.AreEqual("@id=\\\\\\s\\:\\r\\n PRIVMSG #channel hello", line); - } - - [TestMethod] - public void TestMissingTag() - { - var line = new Line("PRIVMSG", "#channel", "hello").Format(); - - Assert.AreEqual("PRIVMSG #channel hello", line); - } - - [TestMethod] - public void TestNullTag() - { - var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new Dictionary<string, string> {{"a", null}}} - .Format(); - - Assert.AreEqual("@a PRIVMSG #channel hello", line); - } - - [TestMethod] - public void TestEmptyTag() - { - var line = new Line("PRIVMSG", "#channel", "hello") {Tags = new Dictionary<string, string> {{"a", ""}}} - .Format(); - - Assert.AreEqual("@a PRIVMSG #channel hello", line); - } - - [TestMethod] - public void TestSource() - { - var line = new Line("PRIVMSG", "#channel", "hello") {Source = "nick!user@host"}.Format(); - - Assert.AreEqual(":nick!user@host PRIVMSG #channel hello", line); - } - - [TestMethod] - public void TestCommandLowercase() - { - var line = new Line {Command = "privmsg"}.Format(); - Assert.AreEqual("privmsg", line); - } - - [TestMethod] - public void TestCommandUppercase() - { - var line = new Line {Command = "PRIVMSG"}.Format(); - Assert.AreEqual("PRIVMSG", line); - } - - [TestMethod] - public void TestTrailingSpace() - { - var line = new Line("PRIVMSG", "#channel", "hello world").Format(); - - Assert.AreEqual("PRIVMSG #channel :hello world", line); - } - - [TestMethod] - public void TestTrailingNoSpace() - { - var line = new Line("PRIVMSG", "#channel", "helloworld").Format(); - - Assert.AreEqual("PRIVMSG #channel helloworld", line); - } - - [TestMethod] - public void TestTrailingDoubleColon() - { - var line = new Line("PRIVMSG", "#channel", ":helloworld").Format(); - - Assert.AreEqual("PRIVMSG #channel ::helloworld", line); - } - - [TestMethod] - public void TestInvalidNonLastSpace() - { - Assert.ThrowsException<ArgumentException>(() => { new Line("USER", "user", "0 *", "real name").Format(); }); - } - - [TestMethod] - public void TestInvalidNonLastColon() - { - Assert.ThrowsException<ArgumentException>(() => { new Line("PRIVMSG", ":#channel", "hello").Format(); }); - } - } -} diff --git a/IrcTokens/Tests/Hostmask.cs b/IrcTokens/Tests/Hostmask.cs deleted file mode 100644 index 6a5cf65..0000000 --- a/IrcTokens/Tests/Hostmask.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace IrcTokens.Tests -{ - [TestClass] - public class Hostmask - { - [TestMethod] - public void TestHostmask() - { - var hostmask = new IrcTokens.Hostmask("nick!user@host"); - Assert.AreEqual("nick", hostmask.NickName); - Assert.AreEqual("user", hostmask.UserName); - Assert.AreEqual("host", hostmask.HostName); - } - - [TestMethod] - public void TestNoHostName() - { - var hostmask = new IrcTokens.Hostmask("nick!user"); - Assert.AreEqual("nick", hostmask.NickName); - Assert.AreEqual("user", hostmask.UserName); - Assert.IsNull(hostmask.HostName); - } - - [TestMethod] - public void TestNoUserName() - { - var hostmask = new IrcTokens.Hostmask("nick@host"); - Assert.AreEqual("nick", hostmask.NickName); - Assert.IsNull(hostmask.UserName); - Assert.AreEqual("host", hostmask.HostName); - } - - [TestMethod] - public void TestOnlyNickName() - { - var hostmask = new IrcTokens.Hostmask("nick"); - Assert.AreEqual("nick", hostmask.NickName); - Assert.IsNull(hostmask.UserName); - Assert.IsNull(hostmask.HostName); - } - - [TestMethod] - public void TestHostmaskFromLine() - { - var line = new Line(":nick!user@host PRIVMSG #channel hello"); - var hostmask = new IrcTokens.Hostmask("nick!user@host"); - Assert.AreEqual(hostmask.ToString(), line.Hostmask.ToString()); - Assert.AreEqual("nick", line.Hostmask.NickName); - Assert.AreEqual("user", line.Hostmask.UserName); - Assert.AreEqual("host", line.Hostmask.HostName); - } - - [TestMethod] - public void TestEmptyHostmaskFromLine() - { - var line = new Line("PRIVMSG #channel hello"); - Assert.IsNull(line.Hostmask.HostName); - Assert.IsNull(line.Hostmask.UserName); - Assert.IsNull(line.Hostmask.NickName); - } - } -} diff --git a/IrcTokens/Tests/Parser.cs b/IrcTokens/Tests/Parser.cs deleted file mode 100644 index ed4e406..0000000 --- a/IrcTokens/Tests/Parser.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using IrcTokens.Tests.Data; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using YamlDotNet.Serialization; -using YamlDotNet.Serialization.NamingConventions; - -namespace IrcTokens.Tests -{ - [TestClass] - public class Parser - { - private static T LoadYaml<T>(string path) - { - var deserializer = new DeserializerBuilder() - .WithNamingConvention(CamelCaseNamingConvention.Instance) - .Build(); - - return deserializer.Deserialize<T>(File.ReadAllText(path)); - } - - [TestMethod] - public void TestSplit() - { - foreach (var test in LoadYaml<SplitModel>("Tests/Data/msg-split.yaml").Tests) - { - var tokens = new Line(test.Input); - var atoms = test.Atoms; - - Assert.AreEqual(atoms.Verb.ToUpper(CultureInfo.InvariantCulture), tokens.Command, - $"command failed on: '{test.Input}'"); - Assert.AreEqual(atoms.Source, tokens.Source, $"source failed on: '{test.Input}'"); - CollectionAssert.AreEqual(atoms.Tags, tokens.Tags, $"tags failed on: '{test.Input}'"); - CollectionAssert.AreEqual(atoms.Params ?? new List<string>(), tokens.Params, - $"params failed on: '{test.Input}'"); - } - } - - [TestMethod] - public void TestJoin() - { - foreach (var test in LoadYaml<JoinModel>("Tests/Data/msg-join.yaml").Tests) - { - var atoms = test.Atoms; - var line = new Line - { - Command = atoms.Verb, Params = atoms.Params, Source = atoms.Source, Tags = atoms.Tags - }.Format(); - - Assert.IsTrue(test.Matches.Contains(line), test.Description); - } - } - } -} diff --git a/IrcTokens/Tests/StatefulDecoder.cs b/IrcTokens/Tests/StatefulDecoder.cs deleted file mode 100644 index 9d2b8b7..0000000 --- a/IrcTokens/Tests/StatefulDecoder.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace IrcTokens.Tests -{ - [TestClass] - public class StatefulDecoder - { - private IrcTokens.StatefulDecoder _decoder; - - [TestInitialize] - public void TestInitialize() - { - _decoder = new IrcTokens.StatefulDecoder(); - } - - [TestMethod] - public void TestPartial() - { - var lines = _decoder.Push("PRIVMSG "); - Assert.AreEqual(0, lines.Count); - - lines = _decoder.Push("#channel hello\r\n"); - Assert.AreEqual(1, lines.Count); - - var line = new Line("PRIVMSG #channel hello"); - CollectionAssert.AreEqual(new List<Line> {line}, lines); - } - - [TestMethod] - public void TestMultiple() - { - var lines = _decoder.Push("PRIVMSG #channel1 hello\r\nPRIVMSG #channel2 hello\r\n"); - Assert.AreEqual(2, lines.Count); - - var line1 = new Line("PRIVMSG #channel1 hello"); - var line2 = new Line("PRIVMSG #channel2 hello"); - Assert.AreEqual(line1, lines[0]); - Assert.AreEqual(line2, lines[1]); - } - - [TestMethod] - public void TestEncoding() - { - var iso8859 = Encoding.GetEncoding("iso-8859-1"); - _decoder = new IrcTokens.StatefulDecoder {Encoding = iso8859}; - var bytes = iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"); - var lines = _decoder.Push(bytes, bytes.Length); - var line = new Line("PRIVMSG #channel :hello Ç"); - Assert.IsTrue(line.Equals(lines[0])); - } - - [TestMethod] - public void TestEncodingFallback() - { - var latin1 = Encoding.GetEncoding("iso-8859-1"); - _decoder = new IrcTokens.StatefulDecoder {Encoding = null, Fallback = latin1}; - var bytes = latin1.GetBytes("PRIVMSG #channel hélló\r\n"); - var lines = _decoder.Push(bytes, bytes.Length); - Assert.AreEqual(1, lines.Count); - Assert.IsTrue(new Line("PRIVMSG #channel hélló").Equals(lines[0])); - } - - [TestMethod] - public void TestEmpty() - { - var lines = _decoder.Push(string.Empty); - Assert.AreEqual(0, lines.Count); - } - - [TestMethod] - public void TestBufferUnfinished() - { - _decoder.Push("PRIVMSG #channel hello"); - var lines = _decoder.Push(string.Empty); - Assert.AreEqual(0, lines.Count); - } - - [TestMethod] - public void TestClear() - { - _decoder.Push("PRIVMSG "); - _decoder.Clear(); - Assert.AreEqual(string.Empty, _decoder.Pending); - } - } -} diff --git a/IrcTokens/Tests/StatefulEncoder.cs b/IrcTokens/Tests/StatefulEncoder.cs deleted file mode 100644 index f2cd6c4..0000000 --- a/IrcTokens/Tests/StatefulEncoder.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Text; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace IrcTokens.Tests -{ - [TestClass] - public class StatefulEncoder - { - private IrcTokens.StatefulEncoder _encoder; - - [TestInitialize] - public void TestInitialize() - { - _encoder = new IrcTokens.StatefulEncoder(); - } - - [TestMethod] - public void TestPush() - { - var line = new Line("PRIVMSG #channel hello"); - _encoder.Push(line); - Assert.AreEqual("PRIVMSG #channel hello\r\n", _encoder.Pending()); - } - - [TestMethod] - public void TestPopPartial() - { - var line = new Line("PRIVMSG #channel hello"); - _encoder.Push(line); - _encoder.Pop("PRIVMSG #channel hello".Length); - Assert.AreEqual("\r\n", _encoder.Pending()); - } - - [TestMethod] - public void TestPopReturned() - { - var line = new Line("PRIVMSG #channel hello"); - _encoder.Push(line); - _encoder.Push(line); - var lines = _encoder.Pop("PRIVMSG #channel hello\r\n".Length); - Assert.AreEqual(1, lines.Count); - Assert.AreEqual(line, lines[0]); - } - - [TestMethod] - public void TestPopNoneReturned() - { - var line = new Line("PRIVMSG #channel hello"); - _encoder.Push(line); - var lines = _encoder.Pop(1); - Assert.AreEqual(0, lines.Count); - } - - [TestMethod] - public void TestPopMultipleLines() - { - var line1 = new Line("PRIVMSG #channel1 hello"); - _encoder.Push(line1); - var line2 = new Line("PRIVMSG #channel2 hello"); - _encoder.Push(line2); - - var lines = _encoder.Pop(_encoder.Pending().Length); - Assert.AreEqual(2, lines.Count); - Assert.AreEqual(string.Empty, _encoder.Pending()); - } - - [TestMethod] - public void TestClear() - { - _encoder.Push(new Line("PRIVMSG #channel hello")); - _encoder.Clear(); - Assert.AreEqual(string.Empty, _encoder.Pending()); - } - - [TestMethod] - public void TestEncoding() - { - var iso8859 = Encoding.GetEncoding("iso-8859-1"); - _encoder = new IrcTokens.StatefulEncoder {Encoding = iso8859}; - _encoder.Push(new Line("PRIVMSG #channel :hello Ç")); - CollectionAssert.AreEqual(iso8859.GetBytes("PRIVMSG #channel :hello Ç\r\n"), _encoder.PendingBytes); - } - } -} diff --git a/IrcTokens/Tests/Tokenization.cs b/IrcTokens/Tests/Tokenization.cs deleted file mode 100644 index 7e2139d..0000000 --- a/IrcTokens/Tests/Tokenization.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System.Collections.Generic; -using Microsoft.VisualStudio.TestTools.UnitTesting; - -namespace IrcTokens.Tests -{ - [TestClass] - public class Tokenization - { - [TestMethod] - public void TestTagsMissing() - { - var line = new Line("PRIVMSG #channel"); - Assert.IsNull(line.Tags); - } - - [TestMethod] - public void TestTagsMissingValue() - { - var line = new Line("@id= PRIVMSG #channel"); - Assert.AreEqual(string.Empty, line.Tags["id"]); - } - - [TestMethod] - public void TestTagsMissingEqual() - { - var line = new Line("@id PRIVMSG #channel"); - Assert.AreEqual(string.Empty, line.Tags["id"]); - } - - [TestMethod] - public void TestTagsUnescape() - { - var line = new Line(@"@id=1\\\:\r\n\s2 PRIVMSG #channel"); - Assert.AreEqual("1\\;\r\n 2", line.Tags["id"]); - } - - [TestMethod] - public void TestTagsOverlap() - { - var line = new Line(@"@id=1\\\s\\s PRIVMSG #channel"); - Assert.AreEqual("1\\ \\s", line.Tags["id"]); - } - - [TestMethod] - public void TestTagsLoneEndSlash() - { - var line = new Line("@id=1\\ PRIVMSG #channel"); - Assert.AreEqual("1", line.Tags["id"]); - } - - [TestMethod] - public void TestSourceWithoutTags() - { - var line = new Line(":nick!user@host PRIVMSG #channel"); - Assert.AreEqual("nick!user@host", line.Source); - } - - [TestMethod] - public void TestSourceWithTags() - { - var line = new Line("@id=123 :nick!user@host PRIVMSG #channel"); - Assert.AreEqual("nick!user@host", line.Source); - } - - [TestMethod] - public void TestSourceMissingWithoutTags() - { - var line = new Line("PRIVMSG #channel"); - Assert.IsNull(line.Source); - } - - [TestMethod] - public void TestSourceMissingWithTags() - { - var line = new Line("@id=123 PRIVMSG #channel"); - Assert.IsNull(line.Source); - } - - [TestMethod] - public void TestCommand() - { - var line = new Line("privmsg #channel"); - Assert.AreEqual("PRIVMSG", line.Command); - } - - [TestMethod] - public void TestParamsTrailing() - { - var line = new Line("PRIVMSG #channel :hello world"); - CollectionAssert.AreEqual(new List<string> {"#channel", "hello world"}, line.Params); - } - - [TestMethod] - public void TestParamsOnlyTrailing() - { - var line = new Line("PRIVMSG :hello world"); - CollectionAssert.AreEqual(new List<string> {"hello world"}, line.Params); - } - - [TestMethod] - public void TestParamsMissing() - { - var line = new Line("PRIVMSG"); - Assert.AreEqual("PRIVMSG", line.Command); - CollectionAssert.AreEqual(new List<string>(), line.Params); - } - - [TestMethod] - public void TestAllTokens() - { - var line = new Line("@id=123 :nick!user@host PRIVMSG #channel :hello world"); - CollectionAssert.AreEqual(new Dictionary<string, string> {{"id", "123"}}, line.Tags); - Assert.AreEqual("nick!user@host", line.Source); - Assert.AreEqual("PRIVMSG", line.Command); - CollectionAssert.AreEqual(new List<string> {"#channel", "hello world"}, line.Params); - } - } -} |