Exemplo n.º 1
0
        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));
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }