about summary refs log tree commit diff
path: root/IrcTokens/Tests/ParserTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IrcTokens/Tests/ParserTests.cs')
-rw-r--r--IrcTokens/Tests/ParserTests.cs55
1 files changed, 55 insertions, 0 deletions
diff --git a/IrcTokens/Tests/ParserTests.cs b/IrcTokens/Tests/ParserTests.cs
new file mode 100644
index 0000000..502b6d6
--- /dev/null
+++ b/IrcTokens/Tests/ParserTests.cs
@@ -0,0 +1,55 @@
+using System.Collections.Generic;
+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 ParserTests
+    {
+        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(), 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 ?? null,
+                    Tags = atoms.Tags
+                }.Format();
+
+                Assert.IsTrue(test.Matches.Contains(line), test.Description);
+            }
+        }
+    }
+}