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(string path) { var deserializer = new DeserializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .Build(); return deserializer.Deserialize(File.ReadAllText(path)); } [TestMethod] public void TestSplit() { foreach (var test in LoadYaml("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(), tokens.Params, $"params failed on: '{test.Input}'"); } } [TestMethod] public void TestJoin() { foreach (var test in LoadYaml("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); } } } }