#define CATCH_CONFIG_MAIN #include "filterlist.h" #include #include using namespace AdblockPlus; QByteArray sampleList = R"(! comment on line ! Last modified: 1 Jan 2000 00:00 UTC ! Expires: 4 days (update frequency) )"; TEST_CASE("placeholder") { QBuffer buffer(&sampleList); buffer.open(QIODevice::ReadOnly | QIODevice::Text); AdblockPlus::FilterList list(buffer); REQUIRE(!list.isUpToDate()); } TEST_CASE("domain match") { const std::array, 5> testUrls = { std::make_pair("http://ads.example.com/foo.gif", true), std::make_pair("http://server1.ads.example.com/foo.gif", true), std::make_pair("https://ads.example.com:8000/", true), std::make_pair("http://ads.example.com.ua/foo.gif", false), std::make_pair("http://example.com/redirect/http://ads.example.com/", false) }; auto *rule = FilterList::parseRule("||ads.example.com^"); REQUIRE(rule->shouldBlock()); REQUIRE(!rule->shouldRedirect()); for(const auto &pair : testUrls) { REQUIRE(rule->hasMatch(&pair.first) == pair.second); } delete rule; } TEST_CASE("string equals") { const std::array, 3> testUrls = { std::make_pair("http://example.com/", true), std::make_pair("http://example.com/foo.gif", false), std::make_pair("http://example.info/redirect/http://example.com/", false) }; auto *rule = FilterList::parseRule("|http://example.com/|"); REQUIRE(rule->shouldBlock()); REQUIRE(!rule->shouldRedirect()); for(const auto &pair : testUrls) { REQUIRE(rule->hasMatch(&pair.first) == pair.second); } delete rule; } TEST_CASE("string starts with") { auto *rule = FilterList::parseRule("|http://baddomain.example/"); REQUIRE(rule->shouldBlock()); REQUIRE(!rule->shouldRedirect()); const QString blocks = "http://baddomain.example/banner.gif"; const QString allows = "http://gooddomain.example/analyze?http://baddomain.example"; REQUIRE(rule->hasMatch(&blocks)); REQUIRE(!rule->hasMatch(&allows)); delete rule; } TEST_CASE("string ends with") { auto *rule = FilterList::parseRule("swf|"); REQUIRE(rule->shouldBlock()); REQUIRE(!rule->shouldRedirect()); const QString blocks = "http://example.com/annoyingflash.swf"; const QString allows = "http://example.com/swf/index.html"; REQUIRE(rule->hasMatch(&blocks)); REQUIRE(!rule->hasMatch(&allows)); delete rule; }