예제 #1
0
		public void Bug_MI308_Reproduce(){
			var selector = ".text p, .text div";
			var xml = XElement.Parse("<div><div class='text'><div>a</div><p>b</p><span>z</span><p>c</p><div>d</div></div></div>");
			var selectresult = new CssSelectorImpl().Select(xml,selector).ToArray();
			Assert.AreEqual(4,selectresult.Length);
			Assert.AreEqual("abcd",string.Join("",selectresult.Select(_=>_.Value)));
		}
예제 #2
0
        public void CanSelect(string source, string clause, IEnumerable<string> result, int count) {
            var cssSelector = new CssSelectorImpl();
            var selected = cssSelector.Select(XElement.Parse(source), clause);
            Assert.AreEqual(count, selected.Count());

            foreach (var i in selected.Select(_ => _.ToString())) {
                Assert.IsTrue(result.Contains(i));
            }
        }
예제 #3
0
		public void NormalUnifiedAndDefaultTest(string query,string[] eresult) {
			var us = new CssSelectorImpl();
			var elements = us.Select(XElement.Parse(SAMPLE_HTML), query);
			var result = elements.Select(_ => _.ToString()).ToArray();
			CollectionAssert.AreEquivalent(eresult,result);

			var ds = new DefaultSelector();
			elements = ds.Select(XElement.Parse(SAMPLE_HTML), query);
			result = elements.Select(_ => _.ToString()).ToArray();
			CollectionAssert.AreEquivalent(eresult, result);
		}
예제 #4
0
 public void ZU608_Bug_Test() {
     var html = Assembly.GetExecutingAssembly().ReadManifestResource("zu608.html");
     var selector = ".cl-center h1";
     var xml = XElement.Parse(html);
     var center = xml.DescendantsAndSelf().Where(_ => _.Attr("class").Contains("cl-center")).ToArray();
     //for (var i = 0; i < center.Length; i++) {
     //    Console.WriteLine(".cl-center "+i);
     //    Console.WriteLine("===========================================");
     //    Console.WriteLine(center[i]);
     //    Console.WriteLine("===========================================");
     //}
     Assert.True(center.Any(_=>_.Descendants().Any(__=>__.Name.LocalName=="h1")));
     var css = new CssSelectorImpl();
     var xpath = css.BuildXpath(selector);
     Console.WriteLine(xpath);
     var selectresult = new CssSelectorImpl().Select(xml, selector).ToArray();
     Assert.AreEqual(1,selectresult.Length);
     Console.WriteLine(selectresult[0].Value);
 }
예제 #5
0
		/// <summary>
		///     Возвращает класс, действительно выполняющий поиск элементов
		/// </summary>
		/// <param name="realquery"></param>
		/// <param name="reallanguage"></param>
		/// <returns></returns>
		protected virtual ISelectorImpl ResolveExecutor(string realquery, SelectorLanguage reallanguage) {
			switch (reallanguage) {
				case SelectorLanguage.XPath:
					return XPathSelector ?? (XPathSelector = new XPathSelectorImpl());
				case SelectorLanguage.Regex:
					return RegexSelector ?? (RegexSelector = new RegexSelectorImpl());
				case SelectorLanguage.Css:
					return CssSelector ?? (CssSelector = new CssSelectorImpl());
				case SelectorLanguage.Custom:
					if (null == CustomSelectors) return null;
					return CustomSelectors.FirstOrDefault(_ => _.IsSupported(realquery));
				default:
					return null;
			}
		}