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)