diff --git a/cockatrice/src/game/filters/filter_string.cpp b/cockatrice/src/game/filters/filter_string.cpp index 7edfb0d41..01a7b6be9 100644 --- a/cockatrice/src/game/filters/filter_string.cpp +++ b/cockatrice/src/game/filters/filter_string.cpp @@ -10,15 +10,15 @@ peg::parser search(R"( Start <- QueryPartList ~ws <- [ ]+ -QueryPartList <- ComplexQueryPart ( ws ("and" ws)? ComplexQueryPart)* ws* +QueryPartList <- ComplexQueryPart ( ws ("AND" ws)? ComplexQueryPart)* ws* -ComplexQueryPart <- SomewhatComplexQueryPart ws $or<[oO][rR]> ws ComplexQueryPart / SomewhatComplexQueryPart +ComplexQueryPart <- SomewhatComplexQueryPart ws "OR" ws ComplexQueryPart / SomewhatComplexQueryPart SomewhatComplexQueryPart <- [(] QueryPartList [)] / QueryPart QueryPart <- NotQuery / SetQuery / RarityQuery / CMCQuery / FormatQuery / PowerQuery / ToughnessQuery / ColorQuery / TypeQuery / OracleQuery / FieldQuery / GenericQuery -NotQuery <- ('not' ws/'-') SomewhatComplexQueryPart +NotQuery <- ('NOT' ws/'-') SomewhatComplexQueryPart SetQuery <- ('e'/'set') [:] FlexStringValue OracleQuery <- 'o' [:] RegexString diff --git a/tests/carddatabase/carddatabase_test.cpp b/tests/carddatabase/carddatabase_test.cpp index 752143f67..4818cd22e 100644 --- a/tests/carddatabase/carddatabase_test.cpp +++ b/tests/carddatabase/carddatabase_test.cpp @@ -18,9 +18,9 @@ TEST(CardDatabaseTest, LoadXml) // load dummy cards and test result db->loadCardDatabases(); - ASSERT_EQ(6, db->getCardList().size()) << "Wrong card count after load"; - ASSERT_EQ(3, db->getSetList().size()) << "Wrong sets count after load"; - ASSERT_EQ(2, db->getAllMainCardTypes().size()) << "Wrong types count after load"; + ASSERT_EQ(8, db->getCardList().size()) << "Wrong card count after load"; + ASSERT_EQ(4, db->getSetList().size()) << "Wrong sets count after load"; + ASSERT_EQ(3, db->getAllMainCardTypes().size()) << "Wrong types count after load"; ASSERT_EQ(Ok, db->getLoadStatus()) << "Wrong status after load"; // ensure the card database is empty after clear() diff --git a/tests/carddatabase/data/cards.xml b/tests/carddatabase/data/cards.xml index 24ede9dff..e687689ec 100644 --- a/tests/carddatabase/data/cards.xml +++ b/tests/carddatabase/data/cards.xml @@ -31,5 +31,31 @@ 4/4 + + Not Dead + Not a Card + 0 + Dead! + + 333 + B + B + 1 + Instant + + + + Truth + Not a Card + 0 + Truth! + + 444 + U + 2U + 2 + Instant + + diff --git a/tests/carddatabase/filter_string_test.cpp b/tests/carddatabase/filter_string_test.cpp index 4fa139514..b29660159 100644 --- a/tests/carddatabase/filter_string_test.cpp +++ b/tests/carddatabase/filter_string_test.cpp @@ -19,11 +19,14 @@ protected: void SetUp() override { cat = CardDatabaseManager::getInstance()->getCardBySimpleName("Cat"); + notDeadAfterAll = CardDatabaseManager::getInstance()->getCardBySimpleName("Not Dead"); + truth = CardDatabaseManager::getInstance()->getCardBySimpleName("Truth"); } - // void TearDown() override {} CardData cat; + CardData notDeadAfterAll; + CardData truth; }; QUERY(Empty, cat, "", true) @@ -31,14 +34,18 @@ QUERY(Typing, cat, "t", true) QUERY(NonMatchingType, cat, "t:kithkin", false) QUERY(MatchingType, cat, "t:creature", true) -QUERY(Not1, cat, "not t:kithkin", true) -QUERY(Not2, cat, "not t:creature", false) +QUERY(Not1, cat, "NOT t:kithkin", true) +QUERY(Not2, cat, "NOT t:creature", false) +QUERY(NonKeyword1, cat, "not t:kithkin", false) +QUERY(NonKeyword2, cat, "t:bat or t:creature", false) +QUERY(NonKeyword3, notDeadAfterAll, "not dead", true) +QUERY(NonKeyword4, truth, "truth or trail", false) QUERY(Case, cat, "t:cReAtUrE", true) QUERY(And, cat, "t:creature t:creature", true) QUERY(And2, cat, "t:creature t:sorcery", false) -QUERY(Or, cat, "t:bat or t:creature", true) +QUERY(Or, cat, "t:bat OR t:creature", true) QUERY(Cmc1, cat, "cmc=2", true) QUERY(Cmc2, cat, "cmc>3", false)