Add a little more test coverage

This commit is contained in:
Oliver Hamlet
2026-05-14 18:40:26 +01:00
parent a7bd546a67
commit 3873194408
4 changed files with 171 additions and 0 deletions
+1
View File
@@ -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"
+1
View File
@@ -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);