using AngleSharp.Dom; using AngleSharp.Html.Parser; namespace XFESystem.Browser.Tests; public sealed class SelectorIndexTests { [Theory] [InlineData(".parent > p.target:hover", '.', "target")] [InlineData(".parent + p#target:not(.missing)", '#', "target")] [InlineData(":is(.parent, .other) .target", '.', "target")] [InlineData(".parent [title='x > y'].target", '.', "target")] [InlineData(".parent p:not(.missing)", 't', "p")] [InlineData(".parent .target[data-x]:nth-child(2n + 1)", '.', "target")] public void OnlyPositiveSubjectKeysAreIndexed(string selector, char kind, string value) => Assert.Equal((kind, value), BrowserSelectorKey.Find(selector)); [Theory] [InlineData(".parent :not(.missing)")] [InlineData(".parent :is(.target, .other)")] [InlineData(".parent [class='target']")] [InlineData(@".parent .tar\67 et")] [InlineData(".parent .target中文")] [InlineData("svg|a.target")] public void UncertainKeysKeepTheFullMatcherFallback(string selector) => Assert.Null(BrowserSelectorKey.Find(selector)); [Theory] [InlineData(".parent > p.target", "p.target", true)] [InlineData(".absent > p.target", "p.target", false)] [InlineData(".parent + p.target", "p.target", false)] [InlineData(".parent p:not(.missing)", "p.target", true)] [InlineData(":is(.other, .parent) .target", "p.target", true)] [InlineData(".parent :is(.target, .other)", "p.target", true)] [InlineData(".parent :not(.missing)", "p.target", true)] [InlineData("[title='x > y'].target", "p.target", true)] [InlineData("p.target#Target", "p.target", true)] [InlineData(".parent span", "p.target", false)] [InlineData(".target中文", "p.target中文", true)] [InlineData(@".tar\67 et", "p.target", true)] public void FullSelectorAndSpecificityStillDecideStyles(string selector, string subject, bool matches) { var document = new HtmlParser().ParseDocument("
text
other
text