mirror of
https://github.com/loot/libloot.git
synced 2026-07-27 14:16:01 -07:00
Add a little more test coverage
This commit is contained in:
@@ -43,6 +43,7 @@ set(LIBLOOT_SRC_TESTS_INTERFACE_H_FILES
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/game_interface_test.h"
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/is_compatible_test.h"
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/metadata/file_test.h"
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/metadata/filename_test.h"
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/metadata/group_test.h"
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/metadata/location_test.h"
|
||||
"${PROJECT_SOURCE_DIR}/src/tests/api/interface/metadata/message_test.h"
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "tests/api/interface/game_interface_test.h"
|
||||
#include "tests/api/interface/is_compatible_test.h"
|
||||
#include "tests/api/interface/metadata/file_test.h"
|
||||
#include "tests/api/interface/metadata/filename_test.h"
|
||||
#include "tests/api/interface/metadata/group_test.h"
|
||||
#include "tests/api/interface/metadata/location_test.h"
|
||||
#include "tests/api/interface/metadata/message_content_test.h"
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
/* LOOT
|
||||
|
||||
A load order optimisation tool for Oblivion, Skyrim, Fallout 3 and
|
||||
Fallout: New Vegas.
|
||||
|
||||
Copyright (C) 2014-2026 Oliver Hamlet
|
||||
|
||||
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
|
||||
<https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef LOOT_TESTS_API_INTERFACE_METADATA_FILENAME_TEST
|
||||
#define LOOT_TESTS_API_INTERFACE_METADATA_FILENAME_TEST
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include "loot/metadata/filename.h"
|
||||
|
||||
namespace loot::test {
|
||||
TEST(Filename, defaultConstructorShouldInitialiseEmptyString) {
|
||||
Filename filename;
|
||||
|
||||
EXPECT_EQ("", std::string(filename));
|
||||
}
|
||||
|
||||
TEST(Filename, stringConstructorShouldStoreGivenString) {
|
||||
Filename filename("name");
|
||||
|
||||
EXPECT_EQ("name", std::string(filename));
|
||||
}
|
||||
|
||||
TEST(Filename, equalityShouldBeCaseInsensitive) {
|
||||
Filename filename1("name");
|
||||
Filename filename2("name");
|
||||
|
||||
EXPECT_TRUE(filename1 == filename2);
|
||||
|
||||
filename1 = Filename("name");
|
||||
filename2 = Filename("Name");
|
||||
|
||||
EXPECT_TRUE(filename1 == filename2);
|
||||
|
||||
filename1 = Filename("name1");
|
||||
filename2 = Filename("name2");
|
||||
|
||||
EXPECT_FALSE(filename1 == filename2);
|
||||
}
|
||||
|
||||
TEST(Filename, inequalityShouldBeTheInverseOfEquality) {
|
||||
Filename filename1("name");
|
||||
Filename filename2("name");
|
||||
|
||||
EXPECT_FALSE(filename1 != filename2);
|
||||
|
||||
filename1 = Filename("name");
|
||||
filename2 = Filename("Name");
|
||||
|
||||
EXPECT_FALSE(filename1 != filename2);
|
||||
|
||||
filename1 = Filename("name1");
|
||||
filename2 = Filename("name2");
|
||||
|
||||
EXPECT_TRUE(filename1 != filename2);
|
||||
}
|
||||
|
||||
TEST(Filename,
|
||||
lessThanOperatorShouldUseCaseInsensitiveLexicographicalComparison) {
|
||||
Filename filename1("name");
|
||||
Filename filename2("name");
|
||||
|
||||
EXPECT_FALSE(filename1 < filename2);
|
||||
EXPECT_FALSE(filename2 < filename1);
|
||||
|
||||
filename1 = Filename("name");
|
||||
filename2 = Filename("Name");
|
||||
|
||||
EXPECT_FALSE(filename1 < filename2);
|
||||
EXPECT_FALSE(filename2 < filename1);
|
||||
|
||||
filename1 = Filename("name1");
|
||||
filename2 = Filename("name2");
|
||||
|
||||
EXPECT_TRUE(filename1 < filename2);
|
||||
EXPECT_FALSE(filename2 < filename1);
|
||||
}
|
||||
|
||||
TEST(Filename, shouldAllowComparisonUsingGreaterThanOperator) {
|
||||
Filename filename1("name");
|
||||
Filename filename2("name");
|
||||
|
||||
EXPECT_FALSE(filename1 > filename2);
|
||||
EXPECT_FALSE(filename2 > filename1);
|
||||
|
||||
filename1 = Filename("name1");
|
||||
filename2 = Filename("name2");
|
||||
|
||||
EXPECT_FALSE(filename1 > filename2);
|
||||
EXPECT_TRUE(filename2 > filename1);
|
||||
}
|
||||
|
||||
TEST(
|
||||
Filename,
|
||||
lessThanOrEqualToOperatorShouldReturnTrueIfFirstFilenameIsNotGreaterThanSecondFilename) {
|
||||
Filename filename1("name");
|
||||
Filename filename2("name");
|
||||
|
||||
EXPECT_TRUE(filename1 <= filename2);
|
||||
EXPECT_TRUE(filename2 <= filename1);
|
||||
|
||||
filename1 = Filename("name1");
|
||||
filename2 = Filename("name2");
|
||||
|
||||
EXPECT_TRUE(filename1 <= filename2);
|
||||
EXPECT_FALSE(filename2 <= filename1);
|
||||
}
|
||||
|
||||
TEST(
|
||||
Filename,
|
||||
greaterThanOrEqualToOperatorShouldReturnTrueIfFirstFilenameIsNotLessThanSecondFilename) {
|
||||
Filename filename1("name");
|
||||
Filename filename2("name");
|
||||
|
||||
EXPECT_TRUE(filename1 >= filename2);
|
||||
EXPECT_TRUE(filename2 >= filename1);
|
||||
|
||||
filename1 = Filename("name1");
|
||||
filename2 = Filename("name2");
|
||||
|
||||
EXPECT_FALSE(filename1 >= filename2);
|
||||
EXPECT_TRUE(filename2 >= filename1);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -47,6 +47,11 @@ TEST(
|
||||
EXPECT_FALSE(plugin.GetGroup());
|
||||
}
|
||||
|
||||
TEST(PluginMetadata, stringConstructorShouldTrimDotGhostExtension) {
|
||||
EXPECT_EQ("a.esp", PluginMetadata("a.esp").GetName());
|
||||
EXPECT_EQ("a.esp", PluginMetadata("a.esp.ghost").GetName());
|
||||
}
|
||||
|
||||
TEST(PluginMetadata,
|
||||
nameMatchesShouldUseCaseInsensitiveNameComparisonForNonRegexNames) {
|
||||
PluginMetadata plugin(BLANK_ESM);
|
||||
@@ -70,6 +75,23 @@ TEST(PluginMetadata,
|
||||
EXPECT_FALSE(plugin.NameMatches(BLANK_DIFFERENT_ESM));
|
||||
}
|
||||
|
||||
TEST(PluginMetadata,
|
||||
nameMatchesShouldThrowIfThePluginNameContainsInvalidRegex) {
|
||||
PluginMetadata plugin("invalid(\\.esp");
|
||||
|
||||
try {
|
||||
plugin.NameMatches("blank.esm");
|
||||
FAIL();
|
||||
} catch (const std::runtime_error& e) {
|
||||
EXPECT_STREQ(
|
||||
"encountered a regex error: Unbalanced parenthesis: Unbalanced "
|
||||
"parenthesis",
|
||||
e.what());
|
||||
} catch (...) {
|
||||
FAIL();
|
||||
}
|
||||
}
|
||||
|
||||
TEST(PluginMetadata, mergeMetadataShouldNotChangeName) {
|
||||
PluginMetadata plugin1(BLANK_ESM);
|
||||
PluginMetadata plugin2(BLANK_DIFFERENT_ESM);
|
||||
|
||||
Reference in New Issue
Block a user