diff --git a/CMakeLists.txt b/CMakeLists.txt index c6d60e2b..2efc94d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,7 +245,7 @@ set (LOOT_TESTS_HEADERS "${CMAKE_SOURCE_DIR}/src/tests/base_game_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/helpers/version_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/helpers/yaml_set_helpers_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/condition_grammar_test.h" - "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_conditional_metadata.h" + "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/conditional_metadata_test.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_file.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_location.h" "${CMAKE_SOURCE_DIR}/src/tests/backend/metadata/test_message.h" diff --git a/src/tests/backend/metadata/conditional_metadata_test.h b/src/tests/backend/metadata/conditional_metadata_test.h new file mode 100644 index 00000000..d718934c --- /dev/null +++ b/src/tests/backend/metadata/conditional_metadata_test.h @@ -0,0 +1,122 @@ +/* LOOT + +A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and +Fallout: New Vegas. + +Copyright (C) 2014-2016 WrinklyNinja + +This file is part of LOOT. + +LOOT is free software: you can redistribute +it and/or modify it under the terms of the GNU General Public License +as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. + +LOOT is distributed in the hope that it will +be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with LOOT. If not, see +. +*/ + +#ifndef LOOT_TEST_BACKEND_METADATA_CONDITIONAL_METADATA +#define LOOT_TEST_BACKEND_METADATA_CONDITIONAL_METADATA + +#include "backend/error.h" +#include "backend/metadata/conditional_metadata.h" +#include "tests/base_game_test.h" + +namespace loot { + namespace test { + class ConditionalMetadataTest : public BaseGameTest { + protected: + ConditionalMetadata conditionalMetadata; + }; + + // Pass an empty first argument, as it's a prefix for the test instantation, + // but we only have the one so no prefix is necessary. + INSTANTIATE_TEST_CASE_P(, + ConditionalMetadataTest, + ::testing::Values( + GameSettings::tes4, + GameSettings::tes5, + GameSettings::fo3, + GameSettings::fonv, + GameSettings::fo4)); + + TEST_P(ConditionalMetadataTest, defaultConstructorShouldSetEmptyConditionString) { + EXPECT_TRUE(conditionalMetadata.Condition().empty()); + } + + TEST_P(ConditionalMetadataTest, stringConstructorShouldSetConditionToGivenString) { + std::string condition("condition"); + conditionalMetadata = ConditionalMetadata(condition); + + EXPECT_EQ(condition, conditionalMetadata.Condition()); + } + + TEST_P(ConditionalMetadataTest, isConditionalShouldBeFalseForAnEmptyConditionString) { + EXPECT_FALSE(conditionalMetadata.IsConditional()); + } + + TEST_P(ConditionalMetadataTest, isConditionalShouldBeTrueForANonEmptyConditionString) { + conditionalMetadata = ConditionalMetadata("condition"); + EXPECT_TRUE(conditionalMetadata.IsConditional()); + } + + TEST_P(ConditionalMetadataTest, evalConditionShouldReturnTrueForAnEmptyCondition) { + Game game(GetParam()); + game.SetGamePath(dataPath.parent_path()); + + EXPECT_TRUE(conditionalMetadata.EvalCondition(game)); + } + + TEST_P(ConditionalMetadataTest, evalConditionShouldThrowForAnInvalidCondition) { + Game game(GetParam()); + game.SetGamePath(dataPath.parent_path()); + + conditionalMetadata = ConditionalMetadata("condition"); + EXPECT_THROW(conditionalMetadata.EvalCondition(game), error); + } + + TEST_P(ConditionalMetadataTest, evalConditionShouldReturnTrueForAConditionThatIsTrue) { + Game game(GetParam()); + game.SetGamePath(dataPath.parent_path()); + + conditionalMetadata = ConditionalMetadata("file(\"" + blankEsm + "\")"); + EXPECT_TRUE(conditionalMetadata.EvalCondition(game)); + } + + TEST_P(ConditionalMetadataTest, evalConditionShouldReturnFalseForAConditionThatIsFalse) { + Game game(GetParam()); + game.SetGamePath(dataPath.parent_path()); + + conditionalMetadata = ConditionalMetadata("file(\"" + missingEsp + "\")"); + EXPECT_FALSE(conditionalMetadata.EvalCondition(game)); + } + + TEST_P(ConditionalMetadataTest, parseConditionShouldNotThrowForAnEmptyCondition) { + EXPECT_NO_THROW(conditionalMetadata.ParseCondition()); + } + + TEST_P(ConditionalMetadataTest, parseConditionShouldThrowForAnInvalidCondition) { + conditionalMetadata = ConditionalMetadata("condition"); + EXPECT_THROW(conditionalMetadata.ParseCondition(), error); + } + + TEST_P(ConditionalMetadataTest, parseConditionShouldNotThrowForATrueCondition) { + conditionalMetadata = ConditionalMetadata("file(\"" + blankEsm + "\")"); + EXPECT_NO_THROW(conditionalMetadata.ParseCondition()); + } + + TEST_P(ConditionalMetadataTest, parseConditionShouldNotThrowForAFalseCondition) { + conditionalMetadata = ConditionalMetadata("file(\"" + missingEsp + "\")"); + EXPECT_NO_THROW(conditionalMetadata.ParseCondition()); + } + } +} + +#endif diff --git a/src/tests/backend/metadata/test_conditional_metadata.h b/src/tests/backend/metadata/test_conditional_metadata.h deleted file mode 100644 index e3c9b317..00000000 --- a/src/tests/backend/metadata/test_conditional_metadata.h +++ /dev/null @@ -1,90 +0,0 @@ -/* LOOT - -A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and -Fallout: New Vegas. - -Copyright (C) 2014-2016 WrinklyNinja - -This file is part of LOOT. - -LOOT is free software: you can redistribute -it and/or modify it under the terms of the GNU General Public License -as published by the Free Software Foundation, either version 3 of -the License, or (at your option) any later version. - -LOOT is distributed in the hope that it will -be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with LOOT. If not, see -. -*/ - -#ifndef LOOT_TEST_BACKEND_METADATA_CONDITIONAL_METADATA -#define LOOT_TEST_BACKEND_METADATA_CONDITION_GRAMMAR - -#include "backend/error.h" -#include "backend/metadata/conditional_metadata.h" -#include "tests/fixtures.h" - -namespace loot { - namespace test { - class ConditionalMetadataTest : public SkyrimTest {}; - - TEST_F(ConditionalMetadataTest, ConstructorAndDataAccess) { - ConditionalMetadata cm; - EXPECT_EQ("", cm.Condition()); - - cm = ConditionalMetadata("condition"); - EXPECT_EQ("condition", cm.Condition()); - } - - TEST_F(ConditionalMetadataTest, IsConditional) { - ConditionalMetadata cm; - EXPECT_FALSE(cm.IsConditional()); - - cm = ConditionalMetadata("condition"); - EXPECT_TRUE(cm.IsConditional()); - } - - TEST_F(ConditionalMetadataTest, EvalCondition) { - Game game(Game::tes5); - game.SetGamePath(dataPath.parent_path()); - ASSERT_NO_THROW(game.Init(false, localPath)); - - ConditionalMetadata cm; - EXPECT_TRUE(cm.EvalCondition(game)); - - cm = ConditionalMetadata("condition"); - EXPECT_THROW(cm.EvalCondition(game), error); - - cm = ConditionalMetadata("file(\"Blank.esm\")"); - EXPECT_TRUE(cm.EvalCondition(game)); - - cm = ConditionalMetadata("file(\"Blank.missing.esm\")"); - EXPECT_FALSE(cm.EvalCondition(game)); - } - - TEST_F(ConditionalMetadataTest, ParseCondition) { - ConditionalMetadata cm; - EXPECT_NO_THROW(cm.ParseCondition()); - - cm = ConditionalMetadata("condition"); - EXPECT_THROW(cm.ParseCondition(), error); - - // Check that invalid regex also throws. - cm = ConditionalMetadata("regex(\"RagnvaldBook(Farengar(+Ragnvald)?)?\\.esp\")"); - EXPECT_THROW(cm.ParseCondition(), error); - - cm = ConditionalMetadata("file(\"Blank.esm\")"); - EXPECT_NO_THROW(cm.ParseCondition()); - - cm = ConditionalMetadata("file(\"Blank.missing.esm\")"); - EXPECT_NO_THROW(cm.ParseCondition()); - } - } -} - -#endif diff --git a/src/tests/main.cpp b/src/tests/main.cpp index 21e5e72f..2b6621b1 100644 --- a/src/tests/main.cpp +++ b/src/tests/main.cpp @@ -51,7 +51,7 @@ #include "backend/helpers/version_test.h" #include "backend/helpers/yaml_set_helpers_test.h" #include "backend/metadata/condition_grammar_test.h" -#include "backend/metadata/test_conditional_metadata.h" +#include "backend/metadata/conditional_metadata_test.h" #include "backend/metadata/test_file.h" #include "backend/metadata/test_location.h" #include "backend/metadata/test_message.h"