public void IdSelector_ParseInvalid() { string[] tests = new string[] { "#", "# ", "#*+1>", "#{+|}", "+", "{+|}", "123", "abc", }; foreach (string test in tests) { ITextProvider tp = new StringTextProvider(test); TokenStream tokens = Helpers.MakeTokenStream(tp); IdSelector s = new IdSelector(); if (test[0] == '#') { Assert.IsTrue(s.Parse(new ItemFactory(tp, null), tp, tokens)); Assert.IsFalse(s.HasParseErrors); Assert.IsTrue(s.HashName.HasParseErrors); } else { Assert.IsFalse(s.Parse(new ItemFactory(tp, null), tp, tokens)); } } }
public void IdSelectorReturnsPersonAssociatedToId() { const int idToSearch = 3; var selector = new IdSelector(idToSearch); var person1 = GeneratePerson(1); var person2 = GeneratePerson(2); var person3 = GeneratePerson(3); var person4 = GeneratePerson(4); var person5 = GeneratePerson(5); selector.Process(person1); selector.Process(person2); selector.Process(person3); selector.Process(person4); selector.Process(person5); Assert.Equal(person3, ((PersonIdResult)selector.GetResults()).Person); }
public void IdSelectorReturnsWithNoPersonIfPersonNotInList() { const int idToSearch = 25; var selector = new IdSelector(idToSearch); var person1 = GeneratePerson(1); var person2 = GeneratePerson(2); var person3 = GeneratePerson(3); var person4 = GeneratePerson(4); var person5 = GeneratePerson(5); selector.Process(person1); selector.Process(person2); selector.Process(person3); selector.Process(person4); selector.Process(person5); Assert.Null(((PersonIdResult)selector.GetResults()).Person); }
public void IdSelectorDoesntContinueProcessingAfterFindingResult() { var selector = new IdSelector(3); var mark = GeneratePerson(1, "Mark"); var steve = GeneratePerson(2, "Steve"); var john = GeneratePerson(3, "John"); var paul = GeneratePerson(3, "Paul"); var lucas = GeneratePerson(3, "Lucas"); selector.Process(mark); selector.Process(steve); selector.Process(john); selector.Process(paul); selector.Process(lucas); var result = (PersonIdResult)selector.GetResults(); Assert.Equal(john, result.Person); }
public void IdSelector_ParseValid() { string[] tests = new string[] { "#foo", "#1234", "#-foo-", "#_foo_", }; foreach (string test in tests) { ITextProvider tp = new StringTextProvider(test); TokenStream tokens = Helpers.MakeTokenStream(tp); IdSelector s = new IdSelector(); Assert.IsTrue(s.Parse(new ItemFactory(tp, null), tp, tokens)); bool hasId = s.TryGetIdRange(out _, out int idLength); Assert.IsTrue(hasId); Assert.IsNotNull(s.HashName); Assert.AreEqual(test.Length, s.HashName.Length); Assert.AreEqual(test.Length - 1, idLength); } }
private string FindRuleSetInFile(IEnumerable <string> extensions, string id, out RuleSet rule) { string root = ProjectHelpers.GetProjectFolder(peekableItem._textbuffer.GetFileName()); string result = null; bool isLow = false, isMedium = false; rule = null; foreach (string ext in extensions) { ICssParser parser = CssParserLocator.FindComponent(ProjectHelpers.GetContentType(ext.Trim('.'))).CreateParser(); foreach (string file in Directory.EnumerateFiles(root, "*" + ext, SearchOption.AllDirectories)) { if (file.EndsWith(".min" + ext, StringComparison.OrdinalIgnoreCase) || file.Contains("node_modules") || file.Contains("bower_components") || file.Contains("\\obj\\Release") || file.Contains("\\obj\\Debug\\") || file.Contains("\\obj\\publish\\")) { continue; } string text = File.ReadAllText(file); int index = text.IndexOf("#" + id, StringComparison.Ordinal); if (index == -1) { continue; } StyleSheet css = parser.Parse(text, true); var visitor = new CssItemCollector <IdSelector>(false); css.Accept(visitor); IEnumerable <IdSelector> selectors = visitor.Items.Where(c => c.HashName.Text == "#" + id); IdSelector high = selectors.FirstOrDefault(c => c.FindType <AtDirective>() == null && (c.Parent.NextSibling == null || c.Parent.NextSibling.Text == ",")); if (high != null) { rule = high.FindType <RuleSet>(); return(file); } IdSelector medium = selectors.FirstOrDefault(c => c.Parent.NextSibling == null || c.Parent.NextSibling.Text == ","); if (medium != null && !isMedium) { rule = medium.FindType <RuleSet>(); result = file; isMedium = true; continue; } IdSelector low = selectors.FirstOrDefault(); if (low != null && !isMedium && !isLow) { rule = low.FindType <RuleSet>(); result = file; isLow = true; continue; } } } return(result); }