Author: Mason Wright
Email:
[email protected]
Date: Sun, 29 Jun 2025 13:33:00 -0600
tests/css_selector.cc
5e4c38ff3c212cdd9881427ef3f8c2706539a190
Reworked parseSelectorParts and tests
Clone
-
.gitignore
M
Makefile
-
include/catch_amalgamated.cpp
-
include/catch_amalgamated.hpp
M
include/grim.h
-
include/parser.h
-
index.html
-
main.cc
-
src/adapter.cc
-
src/events.cc
M
src/grim.cc
A
src/grim.cc.bak
-
src/parser.cc
-
style.css
A
tests/css_selector.cc
-
tests/html_parser.cc
Commits
b966b2a517365074e5c381dbdea05b3221dc0198
e840f1eeb0ae26af69e1ae146ea9938e28e9f1af
e4e05418a640eaed08cd1ec7cd8644eb1dbcca50
4e01ba8ad2c3361fa4be3d896288020948b58b5e
aae562ac1350480e4889aabb35899f776c5b59e9
6c3ae0e31eb0893f20e3872117f92cc6b9a942af
350e7d88bb2feb9db00c6e032cc6623f215b7adf
95e6c70d23e99ffcf70e5bbe12503496e5d8f232
e188783659b9bc3b9993a647e93ed110e7f41db6
5e4c38ff3c212cdd9881427ef3f8c2706539a190
e50ea9e1356a74af18fdd171337ef9dc931e1f4e
8f2e83556d12aaebe8e8597ea6923804b0eb7a43
1627c585128af263181053ab2cf1a4cdcd14ee21
def3513f75b325464ad88a33c741c4ca80572b77
a21501590980a905fa9b902897d700a42a08b7f0
56074a6bfe4498d092f3a227297c8c20e2bb962c
d9cf1485b7ae0614130494f0e73237921323b9a1
80f04b134ae32ad8a9d526007b33dd02f6600f05
23d6c65f9368d3c622a55a3068a6b2f1efa0c8d4
09c195df02536b6a796bd648fce9669397b96109
f2b5c8202fbc904e2ed78260e3fdbd55164799d2
4bfba076120f389994fc46a98e8b7a2622314400
e36ac5417e10ee9b9f94f340e1ccf28afc5705ea
d00dc89a86dd7e2fcfd4618bc3a1c8cfba9e3c3d
d9eef16adaf292f3748db5fb5aa98463de10d712
18ff2ec1bfc1cf9fcd17c1acb05c3b41f8f0ed83
9e7fd2980d723437ea621b78d395fa72ca3f4922
Diff
diff --git a/tests/css_selector.cc b/tests/css_selector.cc deleted file mode 100644 index 44a9589..0000000 --- a/tests/css_selector.cc +++ /dev/null @@ -1,77 +0,0 @@ -#include
-#include "../include/grim.h" -#include
-#include
-#include
- -void checkSelectorParts(std::string selector, std::vector
> expected) { - INFO("========================="); - INFO("Selector: "+selector+"\n"); - - std::vector
> css = parseSelectorParts(selector); - - REQUIRE(css.size() == expected.size()); - - std::string note = ""; - for (size_t a = 0; a < css.size(); a++) { - std::string str = "{"; - for (size_t b = 0; b < css[a].size(); b++) { - str += "\""+css[a][b]+"\","; - } - str += "},"; - - note += str; - } - INFO("PARSED: "+note); - - for (size_t a = 0; a < css.size(); a++) { - REQUIRE(css[a].size() == expected[a].size()); - - for (size_t b = 0; b < css[a].size(); b++) { - REQUIRE(css[a][b] == expected[a][b]); - } - } - - -} - -TEST_CASE( "CSS Selection", "[css]" ) { - SECTION("parseSelectorParts can parse a simple CSS selector") { - // This function only parses the last part of the selector - checkSelectorParts("div > h1", {{"div", ">", "h1"}}); - BENCHMARK("div > h1") { - return parseSelectorParts("div > h1"); - }; - } - SECTION("parseSelectorParts can parse a simple CSS selector with a psuedo class selector") { - checkSelectorParts("div > h1:checked", {{"div", ">", "h1",":checked"}}); - BENCHMARK("div > h1:checked") { - return parseSelectorParts("div > h1:checked"); - }; - } - SECTION("parseSelectorParts can parse a attribute selector") { - checkSelectorParts("a[href=\"https://www.example.com/\"]", {{"a", "[href=\"https://www.example.com/\"]"}}); - BENCHMARK("a[href=\"https://www.example.com/\"]") { - return parseSelectorParts("a[href=\"https://www.example.com/\"]"); - }; - } - SECTION("parseSelectorParts can parse has()") { - checkSelectorParts("h1:has(+ h2)", {{"h1",":has(+ h2)"}}); - BENCHMARK("h1:has(+ h2)") { - return parseSelectorParts("h1:has(+ h2)"); - }; - } - - SECTION("parseSelectorParts can parse a complex where() selector") { - checkSelectorParts(":where(ol, ul, menu:unsupported)", {{":where(ol, ul, menu:unsupported)"}}); - BENCHMARK(":where(ol, ul, menu:unsupported)") { - return parseSelectorParts(":where(ol, ul, menu:unsupported)"); - }; - } - SECTION("parseSelectorParts can parse multiple simple selectors"){ - checkSelectorParts("input:required, div#id + h1.c1.c2, input[type='password'].class", {{"input", ":required"},{"div", "#id", "+", "h1", ".c1", ".c2"},{"input", "[type=\"password\"]", ".class"}}); - BENCHMARK("input:required, div#id + h1.c1.c2, input[type='password'].class") { - return parseSelectorParts("input:required, div#id + h1.c1.c2, input[type='password'].class"); - }; - } -}
#include
#include "../include/grim.h" #include
#include
#include
void checkSelectorParts(std::string selector, std::vector
> expected) { INFO("========================="); INFO("Selector: "+selector+"\n"); std::vector
> css = parseSelectorParts(selector); REQUIRE(css.size() == expected.size()); std::string note = ""; for (size_t a = 0; a < css.size(); a++) { std::string str = "{"; for (size_t b = 0; b < css[a].size(); b++) { str += "\""+css[a][b]+"\","; } str += "},"; note += str; } INFO("PARSED: "+note); for (size_t a = 0; a < css.size(); a++) { REQUIRE(css[a].size() == expected[a].size()); for (size_t b = 0; b < css[a].size(); b++) { REQUIRE(css[a][b] == expected[a][b]); } } } TEST_CASE( "CSS Selection", "[css]" ) { SECTION("parseSelectorParts can parse a simple CSS selector") { // This function only parses the last part of the selector checkSelectorParts("div > h1", {{"div", ">", "h1"}}); BENCHMARK("div > h1") { return parseSelectorParts("div > h1"); }; } SECTION("parseSelectorParts can parse a simple CSS selector with a psuedo class selector") { checkSelectorParts("div > h1:checked", {{"div", ">", "h1",":checked"}}); BENCHMARK("div > h1:checked") { return parseSelectorParts("div > h1:checked"); }; } SECTION("parseSelectorParts can parse a attribute selector") { checkSelectorParts("a[href=\"https://www.example.com/\"]", {{"a", "[href=\"https://www.example.com/\"]"}}); BENCHMARK("a[href=\"https://www.example.com/\"]") { return parseSelectorParts("a[href=\"https://www.example.com/\"]"); }; } SECTION("parseSelectorParts can parse has()") { checkSelectorParts("h1:has(+ h2)", {{"h1",":has(+ h2)"}}); BENCHMARK("h1:has(+ h2)") { return parseSelectorParts("h1:has(+ h2)"); }; } SECTION("parseSelectorParts can parse a complex where() selector") { checkSelectorParts(":where(ol, ul, menu:unsupported)", {{":where(ol, ul, menu:unsupported)"}}); BENCHMARK(":where(ol, ul, menu:unsupported)") { return parseSelectorParts(":where(ol, ul, menu:unsupported)"); }; } SECTION("parseSelectorParts can parse multiple simple selectors"){ checkSelectorParts("input:required, div#id + h1.c1.c2, input[type='password'].class", {{"input", ":required"},{"div", "#id", "+", "h1", ".c1", ".c2"},{"input", "[type=\"password\"]", ".class"}}); BENCHMARK("input:required, div#id + h1.c1.c2, input[type='password'].class") { return parseSelectorParts("input:required, div#id + h1.c1.c2, input[type='password'].class"); }; } }