using System.Globalization; using IRCSharp.Tests.Tokenization.Data; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; namespace IRCSharp.Tests.Tokenization; public class Parser { private static T LoadYaml(string path) { return new DeserializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .Build() .Deserialize(File.ReadAllText(path)); } [Test] public async Task Split() { foreach (var test in LoadYaml("Tokenization/Data/msg-split.yaml").Tests) { var tokens = new Line(test.Input); var atoms = test.Atoms; await Assert.That(tokens.Command).IsEqualTo(atoms.Verb.ToUpper(CultureInfo.InvariantCulture)) .Because($"command failed on: '{test.Input}'"); await Assert.That(tokens.Source).IsEqualTo(atoms.Source) .Because($"source failed on: '{test.Input}'"); await Assert.That(tokens.Tags).IsEquivalentTo(atoms.Tags) .Because($"tags failed on: '{test.Input}'"); await Assert.That(tokens.Params).IsEquivalentTo(atoms.Params ?? []) .Because($"params failed on: '{test.Input}'"); } } [Test] public async Task Join() { foreach (var test in LoadYaml("Tokenization/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(); await Assert.That(test.Matches.Contains(line)).IsTrue().Because(test.Description); } } }