From 0c4441cb9c85bda676ae8be0fd8a5648a589ed63 Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Thu, 23 Oct 2014 19:19:28 +0100 Subject: [PATCH] Added more tests. New tests are for loot_load_lists, loot_eval_lists and loot_update_masterlist. --- src/tests/api/api.h | 59 ++++++++++++++++++++++++++++++++++++++++++++ src/tests/fixtures.h | 15 ++++++++++- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/src/tests/api/api.h b/src/tests/api/api.h index 53781f4e..9b3894f3 100644 --- a/src/tests/api/api.h +++ b/src/tests/api/api.h @@ -132,4 +132,63 @@ TEST_F(OblivionTest, CreateDbHandlesNullLocalPath) { TEST(GameHandleDestroyTest, HandledNullInput) { ASSERT_NO_THROW(loot_destroy_db(NULL)); } + +TEST_F(OblivionAPIOperationsTest, UpdateMasterlist) { + bool updated; + EXPECT_EQ(loot_error_invalid_args, loot_update_masterlist(NULL, masterlistPath.string().c_str(), "https://github.com/loot/oblivion.git", "master", &updated)); + EXPECT_EQ(loot_error_invalid_args, loot_update_masterlist(db, NULL, "https://github.com/loot/oblivion.git", "master", &updated)); + EXPECT_EQ(loot_error_invalid_args, loot_update_masterlist(db, masterlistPath.string().c_str(), NULL, "master", &updated)); + EXPECT_EQ(loot_error_invalid_args, loot_update_masterlist(db, masterlistPath.string().c_str(), "https://github.com/loot/oblivion.git", NULL, &updated)); + EXPECT_EQ(loot_error_invalid_args, loot_update_masterlist(db, masterlistPath.string().c_str(), "https://github.com/loot/oblivion.git", "master", NULL)); + + EXPECT_EQ(loot_ok, loot_update_masterlist(db, masterlistPath.string().c_str(), "https://github.com/loot/oblivion.git", "master", &updated)); + EXPECT_TRUE(updated); +} + +TEST_F(OblivionAPIOperationsTest, LoadLists) { + EXPECT_EQ(loot_error_invalid_args, loot_load_lists(NULL, masterlistPath.string().c_str(), NULL)); + EXPECT_EQ(loot_error_invalid_args, loot_load_lists(db, NULL, NULL)); + + bool updated; + ASSERT_EQ(loot_ok, loot_update_masterlist(db, masterlistPath.string().c_str(), "https://github.com/loot/oblivion.git", "master", &updated)); + EXPECT_EQ(loot_error_path_not_found, loot_load_lists(db, masterlistPath.string().c_str(), NULL)); + + ASSERT_NO_THROW(boost::filesystem::copy(masterlistPath, userlistPath)); + EXPECT_EQ(loot_error_path_not_found, loot_load_lists(db, masterlistPath.string().c_str(), userlistPath.string().c_str())); +} + +TEST_F(OblivionAPIOperationsTest, EvalLists) { + // No lists loaded. + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_any)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_english)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_spanish)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_russian)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_french)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_chinese)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_polish)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_brazilian_portuguese)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_finnish)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_german)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_danish)); + + // Invalid args. + EXPECT_EQ(loot_error_invalid_args, loot_eval_lists(NULL, loot_lang_any)); + EXPECT_EQ(loot_error_invalid_args, loot_eval_lists(db, (unsigned int)-1)); + + // Now test different languages with a list loaded. + bool updated; + ASSERT_EQ(loot_ok, loot_update_masterlist(db, masterlistPath.string().c_str(), "https://github.com/loot/oblivion.git", "master", &updated)); + ASSERT_EQ(loot_ok, loot_load_lists(db, masterlistPath.string().c_str(), NULL)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_any)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_english)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_spanish)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_russian)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_french)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_chinese)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_polish)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_brazilian_portuguese)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_finnish)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_german)); + EXPECT_EQ(loot_ok, loot_eval_lists(db, loot_lang_danish)); +} #endif diff --git a/src/tests/fixtures.h b/src/tests/fixtures.h index 179a61f0..2fe04627 100644 --- a/src/tests/fixtures.h +++ b/src/tests/fixtures.h @@ -39,12 +39,15 @@ along with LOOT. If not, see class GameTest : public ::testing::Test { protected: GameTest(const boost::filesystem::path& gameDataPath, const boost::filesystem::path& gameLocalPath) - : dataPath(gameDataPath), localPath(gameLocalPath), missingPath("./missing"), db(nullptr) {} + : dataPath(gameDataPath), localPath(gameLocalPath), missingPath("./missing"), masterlistPath(localPath / "masterlist.yaml"), userlistPath(localPath / "userlist.yaml"), db(nullptr) {} inline virtual void SetUp() { ASSERT_NO_THROW(boost::filesystem::create_directories(localPath)); ASSERT_TRUE(boost::filesystem::exists(localPath)); + ASSERT_FALSE(boost::filesystem::exists(masterlistPath)); + ASSERT_FALSE(boost::filesystem::exists(userlistPath)); + ASSERT_FALSE(boost::filesystem::exists(localPath / ".git")); ASSERT_FALSE(boost::filesystem::exists(missingPath)); ASSERT_TRUE(boost::filesystem::exists(dataPath / "Blank.esm")); @@ -90,6 +93,13 @@ protected: ASSERT_FALSE(boost::filesystem::exists(dataPath / "EmptyFile.esm")); ASSERT_FALSE(boost::filesystem::exists(dataPath / "NotAPlugin.esm")); + // Masterlist & userlist may have been created during test, so delete them. + ASSERT_NO_THROW(boost::filesystem::remove(masterlistPath)); + ASSERT_NO_THROW(boost::filesystem::remove(userlistPath)); + + // Also remove the ".git" folder if it has been created. + ASSERT_NO_THROW(boost::filesystem::remove_all(localPath / ".git")); + ASSERT_NO_THROW(loot_destroy_db(db)); } @@ -97,6 +107,9 @@ protected: const boost::filesystem::path localPath; const boost::filesystem::path missingPath; + const boost::filesystem::path masterlistPath; + const boost::filesystem::path userlistPath; + loot_db db; };