using AvParser.Core.Parsing; using AvParser.Core.Parsing.Samples; namespace AvParser.Core.Tests; public class ParserCatalogTests { private static IParserCatalog Catalog() => new ParserCatalog([new KeyValueTextParser(), new DelimitedTextParser()]); [Fact] public void Orders_parsers_by_display_name_regardless_of_registration_order() => Catalog().Parsers.Select(p => p.Id).ShouldBe(["delimited", "key-value"]); [Fact] public void Finds_a_parser_by_id_ignoring_case() => Catalog().Find("KEY-VALUE")!.Id.ShouldBe("key-value"); [Fact] public void Returns_null_for_an_unknown_id() => Catalog().Find("nope").ShouldBeNull(); [Fact] public void Falls_back_to_the_default_for_an_unknown_id() { var catalog = Catalog(); catalog.FindOrDefault("nope").ShouldBeSameAs(catalog.DefaultParser); catalog.FindOrDefault(null).ShouldBeSameAs(catalog.DefaultParser); } [Fact] public void Rejects_an_empty_registration() => Should.Throw(() => new ParserCatalog([])); [Fact] public void Rejects_duplicate_ids() => Should .Throw(() => new ParserCatalog([new DelimitedTextParser(), new DelimitedTextParser()])) .Message.ShouldContain("Duplicate"); }