#include "StarItemDatabase.hpp" #include #include "gtest/gtest.h" using namespace Star; TEST(ItemTest, ItemDescriptorConstruction) { ItemDescriptor testItemDescriptor; testItemDescriptor = ItemDescriptor(); testItemDescriptor = ItemDescriptor(Json()); String nameOnly = "perfectlygenericitem"; testItemDescriptor = ItemDescriptor(nameOnly); List arrayFormats = List{ JsonArray{"perfectlygenericitem"}, JsonArray{"perfectlygenericitem", 1}, JsonArray{"perfectlygenericitem", 1, JsonObject()}, JsonArray{"perfectlygenericitem", 1, JsonObject{{"testParameter", "testValue"}}} }; for (auto arrayFormat : arrayFormats) testItemDescriptor = ItemDescriptor(arrayFormat); List objectFormats = List{ JsonObject{{"name", "perfectlygenericitem"}}, JsonObject{{"item", "perfectlygenericitem"}}, JsonObject{{"name", "perfectlygenericitem"}, {"count", 1}}, JsonObject{{"name", "perfectlygenericitem"}, {"count", 1}, {"parameters", JsonObject()}}, JsonObject{{"name", "perfectlygenericitem"}, {"count", 1}, {"parameters", JsonObject{{"testParameter", "testValue"}}}} }; for (auto objectFormat : objectFormats) testItemDescriptor = ItemDescriptor(objectFormat); testItemDescriptor = ItemDescriptor("perfectlygenericitem", 1); testItemDescriptor = ItemDescriptor("perfectlygenericitem", 1, JsonObject{{"testParameter", "testValue"}}); } TEST(ItemTest, ItemComparison) { auto itemDatabase = Root::singleton().itemDatabase(); ItemPtr testItem = itemDatabase->item(ItemDescriptor("perfectlygenericitem", 1)); ItemPtr testItemParams = itemDatabase->item(ItemDescriptor("perfectlygenericitem", 1, JsonObject{{"testParameter", "testValue"}})); List testItemDescriptors = List{ ItemDescriptor("perfectlygenericitem", 1), ItemDescriptor(JsonArray{"perfectlygenericitem"}), ItemDescriptor(JsonArray{"perfectlygenericitem", 1}), ItemDescriptor(JsonArray{"perfectlygenericitem", 1, JsonObject()}), ItemDescriptor(JsonObject{{"name", "perfectlygenericitem"}}), ItemDescriptor(JsonObject{{"item", "perfectlygenericitem"}}), ItemDescriptor(JsonObject{{"name", "perfectlygenericitem"}, {"count", 1}}), ItemDescriptor(JsonObject{{"name", "perfectlygenericitem"}, {"count", 1}, {"parameters", JsonObject()}}) }; List testItemDescriptorsParams = List{ ItemDescriptor(JsonArray{"perfectlygenericitem", 1, JsonObject{{"testParameter", "testValue"}}}), ItemDescriptor(JsonObject{{"name", "perfectlygenericitem"}, {"count", 1}, {"parameters", JsonObject{{"testParameter", "testValue"}}}}) }; // comparisons WITHOUT exactMatch for (ItemDescriptor const& id : testItemDescriptors) { EXPECT_TRUE(testItem->matches(id)); EXPECT_TRUE(testItemParams->matches(id)); EXPECT_TRUE(id.matches(testItem)); EXPECT_TRUE(id.matches(testItemParams)); for (ItemDescriptor const& id2 : testItemDescriptors) EXPECT_TRUE(id.matches(id2)); for (ItemDescriptor const& id2 : testItemDescriptorsParams) EXPECT_TRUE(id.matches(id2)); } for (ItemDescriptor const& id : testItemDescriptorsParams) { EXPECT_TRUE(testItem->matches(id)); EXPECT_TRUE(testItemParams->matches(id)); EXPECT_TRUE(id.matches(testItem)); EXPECT_TRUE(id.matches(testItemParams)); for (ItemDescriptor const& id2 : testItemDescriptors) EXPECT_TRUE(id.matches(id2)); for (ItemDescriptor const& id2 : testItemDescriptorsParams) EXPECT_TRUE(id.matches(id2)); } EXPECT_TRUE(testItem->matches(testItemParams)); EXPECT_TRUE(testItemParams->matches(testItem)); // comparisons WITH exactMatch for (ItemDescriptor const& id : testItemDescriptors) { EXPECT_TRUE(testItem->matches(id, true)); EXPECT_FALSE(testItemParams->matches(id, true)); EXPECT_TRUE(id.matches(testItem, true)); EXPECT_FALSE(id.matches(testItemParams, true)); for (ItemDescriptor const& id2 : testItemDescriptors) EXPECT_TRUE(id.matches(id2, true)); for (ItemDescriptor const& id2 : testItemDescriptorsParams) EXPECT_FALSE(id.matches(id2, true)); } for (ItemDescriptor const& id : testItemDescriptorsParams) { EXPECT_FALSE(testItem->matches(id, true)); EXPECT_TRUE(testItemParams->matches(id, true)); EXPECT_FALSE(id.matches(testItem, true)); EXPECT_TRUE(id.matches(testItemParams, true)); for (ItemDescriptor const& id2 : testItemDescriptors) EXPECT_FALSE(id.matches(id2, true)); for (ItemDescriptor const& id2 : testItemDescriptorsParams) EXPECT_TRUE(id.matches(id2, true)); } EXPECT_FALSE(testItem->matches(testItemParams, true)); EXPECT_FALSE(testItemParams->matches(testItem, true)); } TEST(ItemTest, ConstructItems) { auto itemDatabase = Root::singleton().itemDatabase(); for (auto itemName : itemDatabase->allItems()) ItemPtr item = itemDatabase->item(ItemDescriptor(itemName, 1)); }