mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
[css2xpath] tests
This commit is contained in:
parent
413a2cb74a
commit
21a606bf35
@ -280,7 +280,7 @@ private:
|
||||
};
|
||||
};
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
|
||||
std::string
|
||||
next_year(const std::smatch& matches)
|
||||
@ -291,6 +291,79 @@ next_year(const std::smatch& matches)
|
||||
return os.str();
|
||||
}
|
||||
|
||||
typedef const char *test[2];
|
||||
|
||||
void
|
||||
tests()
|
||||
{
|
||||
|
||||
test provider[] = {
|
||||
{"div", "//div"},
|
||||
{"body div", "//body//div"},
|
||||
{"div p", "//div//p"},
|
||||
{"div > p", "//div/p"},
|
||||
{"div + p", "//div/following-sibling::*[1]/self::p"},
|
||||
{"div ~ p", "//div/following-sibling::p"},
|
||||
{"div p a", "//div//p//a"},
|
||||
{"div, p, a", "//div|//p|//a"},
|
||||
{".note", "//*[contains(concat(\" \",normalize-space(@class),\" \"),\" note \")]"},
|
||||
{"div.example", "//div[contains(concat(\" \",normalize-space(@class),\" \"),\" example \")]"},
|
||||
{"ul .tocline2", "//ul//*[contains(concat(\" \",normalize-space(@class),\" \"),\" tocline2 \")]"},
|
||||
{"div.example, div.note", "//div[contains(concat(\" \",normalize-space(@class),\" \"),\" example \")]|//div[contains(concat(\" \",normalize-space(@class),\" \"),\" note \")]"},
|
||||
{"#title", "//*[@id=\"title\"]"},
|
||||
{"h1#title", "//h1[@id=\"title\"]"},
|
||||
{"div #title", "//div//*[@id=\"title\"]"},
|
||||
{"ul.toc li.tocline2", "//ul[contains(concat(\" \",normalize-space(@class),\" \"),\" toc \")]//li[contains(concat(\" \",normalize-space(@class),\" \"),\" tocline2 \")]"},
|
||||
{"ul.toc > li.tocline2", "//ul[contains(concat(\" \",normalize-space(@class),\" \"),\" toc \")]/li[contains(concat(\" \",normalize-space(@class),\" \"),\" tocline2 \")]"},
|
||||
{"h1#title + div > p", "//h1[@id=\"title\"]/following-sibling::*[1]/self::div/p"},
|
||||
{"h1[id]:contains(Selectors)", "//h1[@id and (contains(string(.),\"Selectors\"))]"},
|
||||
{"a[href][lang][class]", "//a[@href and (@lang) and (@class)]"},
|
||||
{"div[class]", "//div[@class]"},
|
||||
{"div[class=example]", "//div[@class=\"example\"]"},
|
||||
{"div[class^=exa]", "//div[starts-with(@class,\"exa\")]"},
|
||||
{"div[class$=mple]", "//div[substring(@class,string-length(@class)-3)=class]"},
|
||||
{"div[class*=e]", "//div[contains(@class,\"e\")]"},
|
||||
{"div[class|=dialog]", "//div[@class=\"dialog\" or starts-with(@class,concat(\"dialog\",\"-\"))]"},
|
||||
{"div[class!=made_up]", "//div[not(@class) or @class!=\"made_up\"]"},
|
||||
{"div[property!=\"made_up\"]", "//div[not(@property) or @property!=\"made_up\"]"},
|
||||
|
||||
{"div[class~=example]", "//div[contains(concat(\" \",normalize-space(@class),\" \"),concat(\" \",\"example\",\" \"))]"},
|
||||
{"div:not(.example)", "//div[not(contains(concat(\" \",normalize-space(@class),\" \"),\" example \"))]"},
|
||||
{"p:contains(selectors)", "//p[contains(string(.),\"selectors\")]"},
|
||||
{"p:nth-child(n)", "//p"},
|
||||
{"p:nth-child(even)", "//p[(count(preceding-sibling::*) + 1) mod 2=0]"},
|
||||
{"p:nth-child(odd)", "//p[(count(preceding-sibling::*) + 1) mod 2=1]"},
|
||||
{"p:nth-child(3n+8)", "//p[(count(preceding-sibling::*)+1)>=8 and ((count(preceding-sibling::*)+1)-8) mod 3=0]"},
|
||||
{"p:nth-child(2n+1)", "//p[(count(preceding-sibling::*)+1)>=1 and ((count(preceding-sibling::*)+1)-1) mod 2=0]"},
|
||||
{"p:nth-child(3)", "//*[3]/self::p"},
|
||||
{"p:nth-child(4n)", "//p[(count(preceding-sibling::*)+1)>=0 and ((count(preceding-sibling::*)+1)-0) mod 4=0]"},
|
||||
{"p:only-child", "//*[last()=1]/self::p"},
|
||||
{"p:last-child", "//p[not(following-sibling::*)]"},
|
||||
{"p:first-child", "//*[1]/self::p"},
|
||||
{"foo|bar", "//foo:bar"},
|
||||
{"div[class^=exa][class$=mple]", "//div[starts-with(@class,\"exa\") and (substring(@class,string-length(@class)-3)=class)]"},
|
||||
|
||||
{"input:enabled", "//input[not(@disabled)]"},
|
||||
{"input:checked", "//input[@checked=\"checked\"]"},
|
||||
{"input:disabled", "//input[@disabled]"},
|
||||
|
||||
{":empty", "//*[not(*) and not(normalize-space())]"},
|
||||
{":root", "/"}
|
||||
};
|
||||
|
||||
for (auto t: provider)
|
||||
{
|
||||
Translator *translator = new Translator();
|
||||
std::string selector(t[0]);
|
||||
std::string expected(t[1]);
|
||||
|
||||
std::string result = translator->translate(selector);
|
||||
std::cout << selector << " " << result << " " << expected << " ";
|
||||
std::cout << ((result == expected) ? "OK" : "FAIL");
|
||||
std::cout << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@ -326,6 +399,8 @@ main(int argc, char **argv)
|
||||
|
||||
std::cout << preg_replace_callback(pat2, next_year, text);
|
||||
|
||||
tests();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user