#define CATCH_CONFIG_MAIN #include "rule.h" #include using namespace AdblockPlus; SCENARIO("MatcherRule") { GIVEN("options with case sensitive pattern") { const QString defaultUrl = ""; const Options opt { .matchcase=true }; const QString patternContains("this string contains the pattern in it"); const QString patternBegins("pattern starts this string"); const QString patternEnds("this string ends with pattern"); const QString patternMissing("and this one does not"); WHEN("contains") { MatcherRule rule("pattern", opt); REQUIRE(rule.shouldBlock()); THEN("pattern is matched anywhere in the URL") { REQUIRE(rule.hasMatch(&patternContains, &defaultUrl, &defaultUrl)); REQUIRE(rule.hasMatch(&patternBegins, &defaultUrl, &defaultUrl)); REQUIRE(rule.hasMatch(&patternEnds, &defaultUrl, &defaultUrl)); REQUIRE(!rule.hasMatch(&patternMissing, &defaultUrl, &defaultUrl)); } } WHEN("startsWith") { MatcherRule rule("pattern", opt, MatcherRule::UrlStartsWith); REQUIRE(rule.shouldBlock()); THEN("pattern is matched if at the start of the URL") { REQUIRE(!rule.hasMatch(&patternContains, &defaultUrl, &defaultUrl)); REQUIRE(rule.hasMatch(&patternBegins, &defaultUrl, &defaultUrl)); REQUIRE(!rule.hasMatch(&patternEnds, &defaultUrl, &defaultUrl)); REQUIRE(!rule.hasMatch(&patternMissing, &defaultUrl, &defaultUrl)); } } WHEN("endsWith") { MatcherRule rule("pattern", opt, MatcherRule::UrlEndsWith); REQUIRE(rule.shouldBlock()); THEN("pattern is matched if at the end of the URL") { REQUIRE(!rule.hasMatch(&patternContains, &defaultUrl, &defaultUrl)); REQUIRE(!rule.hasMatch(&patternBegins, &defaultUrl, &defaultUrl)); REQUIRE(rule.hasMatch(&patternEnds, &defaultUrl, &defaultUrl)); REQUIRE(!rule.hasMatch(&patternMissing, &defaultUrl, &defaultUrl)); } } } } SCENARIO("RegexRule") { GIVEN("options with case sensitive pattern") { const QString defaultUrl; const Options opt { .matchcase=true }; const QString patternContains("this string contains the pattern in it"); const QString patternMissing("and this one does not"); WHEN("contains") { RegexRule rule("pattern", opt); REQUIRE(rule.shouldBlock()); THEN("pattern is matched anywhere in the URL") { REQUIRE(rule.hasMatch(&patternContains, &defaultUrl, &defaultUrl)); REQUIRE(!rule.hasMatch(&patternMissing, &defaultUrl, &defaultUrl)); } } } }