aboutsummaryrefslogtreecommitdiff
path: root/libs/bsapacker/tests
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
commit7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch)
tree27fb39be241fdb5ac2734c574de678977d1856d0 /libs/bsapacker/tests
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/bsapacker/tests')
-rw-r--r--libs/bsapacker/tests/ArchiveAutoServiceFacts.cpp26
-rw-r--r--libs/bsapacker/tests/ArchiveBuilderFactoryFacts.cpp242
-rw-r--r--libs/bsapacker/tests/ArchiveBuilderHelperFacts.cpp37
-rw-r--r--libs/bsapacker/tests/ArchiveNameServiceFacts.cpp260
-rw-r--r--libs/bsapacker/tests/BsaPackerFacts.cpp34
-rw-r--r--libs/bsapacker/tests/BsaPackerWorkerFacts.cpp67
-rw-r--r--libs/bsapacker/tests/CMakeLists.txt5
-rw-r--r--libs/bsapacker/tests/DummyPluginServiceFactoryFacts.cpp44
-rw-r--r--libs/bsapacker/tests/Fallout3DummyPluginServiceFacts.cpp39
-rw-r--r--libs/bsapacker/tests/Fallout4DummyPluginServiceFacts.cpp39
-rw-r--r--libs/bsapacker/tests/FileWriterServiceFacts.cpp26
-rw-r--r--libs/bsapacker/tests/GeneralArchiveBuilderFacts.cpp35
-rw-r--r--libs/bsapacker/tests/HideLooseAssetServiceFacts.cpp33
-rw-r--r--libs/bsapacker/tests/MockArchiveAutoService.h10
-rw-r--r--libs/bsapacker/tests/MockArchiveBuilderFactory.h11
-rw-r--r--libs/bsapacker/tests/MockArchiveBuilderHelper.h15
-rw-r--r--libs/bsapacker/tests/MockArchiveNameService.h13
-rw-r--r--libs/bsapacker/tests/MockDummyPluginLogic.h11
-rw-r--r--libs/bsapacker/tests/MockDummyPluginServiceFactory.h10
-rw-r--r--libs/bsapacker/tests/MockFileWriterService.h10
-rw-r--r--libs/bsapacker/tests/MockHideLooseAssetService.h10
-rw-r--r--libs/bsapacker/tests/MockModContext.h13
-rw-r--r--libs/bsapacker/tests/MockModDtoFactory.h10
-rw-r--r--libs/bsapacker/tests/MockOrganizer.h61
-rw-r--r--libs/bsapacker/tests/MockOverrideFileService.h10
-rw-r--r--libs/bsapacker/tests/MockPackerDialog.h17
-rw-r--r--libs/bsapacker/tests/MockSettingsService.h10
-rw-r--r--libs/bsapacker/tests/ModContextFacts.cpp33
-rw-r--r--libs/bsapacker/tests/ModDtoFactoryFacts.cpp53
-rw-r--r--libs/bsapacker/tests/NewVegasDummyPluginServiceFacts.cpp39
-rw-r--r--libs/bsapacker/tests/OblivionDummyPluginServiceFacts.cpp39
-rw-r--r--libs/bsapacker/tests/SkyrimDummyPluginServiceFacts.cpp39
-rw-r--r--libs/bsapacker/tests/SkyrimSEDummyPluginServiceFacts.cpp39
-rw-r--r--libs/bsapacker/tests/TextureArchiveBuilderFacts.cpp35
-rw-r--r--libs/bsapacker/tests/TexturelessArchiveBuilderFacts.cpp35
35 files changed, 1410 insertions, 0 deletions
diff --git a/libs/bsapacker/tests/ArchiveAutoServiceFacts.cpp b/libs/bsapacker/tests/ArchiveAutoServiceFacts.cpp
new file mode 100644
index 0000000..8fd37f1
--- /dev/null
+++ b/libs/bsapacker/tests/ArchiveAutoServiceFacts.cpp
@@ -0,0 +1,26 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/ArchiveAutoService.h>
+
+using namespace BsaPacker;
+
+namespace BsaPackerTests
+{
+ class ArchiveAutoServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ }
+
+ void TearDown() override {
+ }
+ };
+
+ TEST_F(ArchiveAutoServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = ArchiveAutoService();
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/ArchiveBuilderFactoryFacts.cpp b/libs/bsapacker/tests/ArchiveBuilderFactoryFacts.cpp
new file mode 100644
index 0000000..352fc00
--- /dev/null
+++ b/libs/bsapacker/tests/ArchiveBuilderFactoryFacts.cpp
@@ -0,0 +1,242 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/ArchiveBuilderFactory.h>
+#include "MockArchiveBuilderHelper.h"
+#include "ModDto.h"
+#include "NexusId.h"
+#include <bsapacker/NullArchiveBuilder.h>
+#include <bsapacker/GeneralArchiveBuilder.h>
+#include <bsapacker/TexturelessArchiveBuilder.h>
+#include <bsapacker/TextureArchiveBuilder.h>
+#include <typeindex>
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class ArchiveBuilderFactoryFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockArchiveBuilderHelper = new NaggyMock<MockArchiveBuilderHelper>();
+ }
+
+ void TearDown() override {
+ delete naggyMockArchiveBuilderHelper;
+ }
+
+ NaggyMock<MockArchiveBuilderHelper>* naggyMockArchiveBuilderHelper;
+ };
+
+ TEST_F(ArchiveBuilderFactoryFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ );
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsMorrowind_ReturnsbaTES3)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::Morrowind, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baTES3, result.at(0));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsOblivion_ReturnsbaTES4)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::Oblivion, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baTES4, result.at(0));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsFallout3_ReturnsbaFO3)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::Fallout3, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baFO3, result.at(0));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsNewVegas_ReturnsbaFO3)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::NewVegas, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baFO3, result.at(0));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsSkyrim_ReturnsbaFO3)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::Skyrim, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baFO3, result.at(0));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsSkyrimSE_ReturnsbaSSE)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::SkyrimSE, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baSSE, result.at(0));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, GetArchiveTypes_WhenNexusIdIsFallout4_ReturnsbaFO4andbaFO4dds)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto dto = ModDto(NexusId::Fallout4, "", "", "");
+
+ // Act
+ auto result = sut.GetArchiveTypes(&dto);
+
+ // Assert
+ EXPECT_EQ(bsa_archive_type_e::baFO4, result.at(0));
+ EXPECT_EQ(bsa_archive_type_e::baFO4dds, result.at(1));
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeNone_ReturnsNullArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baNone;
+
+ // Act
+ auto returned = sut.Create(type, nullptr);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<NullArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(NullArchiveBuilder).name(), typeid(*resultType).name());
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeTES3_ReturnsGeneralArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baTES3;
+ auto dto = ModDto(0, "", "", "");
+
+ // Act
+ auto returned = sut.Create(type, &dto);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<GeneralArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(GeneralArchiveBuilder).name(), typeid(*resultType).name());
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeTES4_ReturnsGeneralArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baTES4;
+ auto dto = ModDto(0, "", "", "");
+
+ // Act
+ auto returned = sut.Create(type, &dto);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<GeneralArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(GeneralArchiveBuilder).name(), typeid(*resultType).name());
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeFO3_ReturnsGeneralArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baFO3;
+ auto dto = ModDto(0, "", "", "");
+
+ // Act
+ auto returned = sut.Create(type, &dto);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<GeneralArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(GeneralArchiveBuilder).name(), typeid(*resultType).name());
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeSSE_ReturnsGeneralArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baSSE;
+ auto dto = ModDto(0, "", "", "");
+
+ // Act
+ auto returned = sut.Create(type, &dto);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<GeneralArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(GeneralArchiveBuilder).name(), typeid(*resultType).name());
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeFO4_ReturnsTexturelessArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baFO4;
+ auto dto = ModDto(0, "", "", "");
+
+ // Act
+ auto returned = sut.Create(type, &dto);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<TexturelessArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(TexturelessArchiveBuilder).name(), typeid(*resultType).name());
+ }
+
+ TEST_F(ArchiveBuilderFactoryFacts, Create_WhenArchiveTypeFO4dds_ReturnsTextureArchiveBuilder)
+ {
+ // Arrange
+ auto sut = ArchiveBuilderFactory(naggyMockArchiveBuilderHelper);
+ auto type = bsa_archive_type_e::baFO4dds;
+ auto dto = ModDto(0, "", "", "");
+
+ // Act
+ auto returned = sut.Create(type, &dto);
+ auto result = returned.get();
+
+ // Assert
+ auto resultType = dynamic_cast<TextureArchiveBuilder*>(result);
+ EXPECT_STREQ(typeid(TextureArchiveBuilder).name(), typeid(*resultType).name());
+ }
+}
diff --git a/libs/bsapacker/tests/ArchiveBuilderHelperFacts.cpp b/libs/bsapacker/tests/ArchiveBuilderHelperFacts.cpp
new file mode 100644
index 0000000..a970c24
--- /dev/null
+++ b/libs/bsapacker/tests/ArchiveBuilderHelperFacts.cpp
@@ -0,0 +1,37 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/ArchiveBuilderHelper.h>
+#include "MockSettingsService.h"
+
+using namespace BsaPacker;
+using std::filesystem::path;
+using ::testing::NaggyMock;
+using ::testing::Return;
+
+namespace BsaPackerTests
+{
+ class ArchiveBuilderHelperFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockSettingsService = new NaggyMock<MockSettingsService>();
+ naggyPath = new NaggyMock<path>();
+ }
+
+ void TearDown() override {
+ delete naggyMockSettingsService;
+ delete naggyPath;
+ }
+
+ NaggyMock<MockSettingsService>* naggyMockSettingsService;
+ NaggyMock<std::filesystem::path>* naggyPath;
+ };
+
+ TEST_F(ArchiveBuilderHelperFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = ArchiveBuilderHelper(naggyMockSettingsService);
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/ArchiveNameServiceFacts.cpp b/libs/bsapacker/tests/ArchiveNameServiceFacts.cpp
new file mode 100644
index 0000000..c79c545
--- /dev/null
+++ b/libs/bsapacker/tests/ArchiveNameServiceFacts.cpp
@@ -0,0 +1,260 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "ArchiveNameService.h"
+#include "MockModContext.h"
+#include "ModDto.h"
+#include "NexusId.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+using ::testing::Eq;
+using ::testing::Return;
+
+namespace BsaPackerTests
+{
+ class ArchiveNameServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockModContext = new NaggyMock<MockModContext>();
+ }
+
+ void TearDown() override {
+ delete naggyMockModContext;
+ }
+
+ NaggyMock<MockModContext>* naggyMockModContext;
+ };
+
+ TEST_F(ArchiveNameServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = ArchiveNameService(
+ naggyMockModContext
+ );
+ );
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsMorrowind_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Morrowind));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsOblivion_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Oblivion));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsFallout3_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Fallout3));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsNewVegas_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::NewVegas));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsSkyrim_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Skyrim));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsSkyrimSE_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::SkyrimSE));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_WhenNexusIdIsFallout4_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Fallout4));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ(".ba2", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetFileExtension_InvalidNexusId_Returnsbsa)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(0));
+
+ // Act
+ auto result = sut.GetFileExtension();
+
+ // Assert
+ EXPECT_EQ("", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetArchiveFullPath_WhenTypeIsbaFO4_ReturnsFullPathWithMainInfix)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ auto type = bsa_archive_type_e::baFO4;
+ auto dto = ModDto(0, "C:/directory", "archive", ".ba2");
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Fallout4));
+
+ // Act
+ auto result = sut.GetArchiveFullPath(type, &dto);
+
+ // Assert
+ EXPECT_EQ("C:/directory/archive - Main.ba2", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetArchiveFullPath_WhenTypeIsbaFO4dds_ReturnsFullPathWithTextureInfix)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ auto type = bsa_archive_type_e::baFO4dds;
+ auto dto = ModDto(0, "C:/directory", "archive", ".ba2");
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Fallout4));
+
+ // Act
+ auto result = sut.GetArchiveFullPath(type, &dto);
+
+ // Assert
+ EXPECT_EQ("C:/directory/archive - Textures.ba2", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetArchiveFullPath_WhenTypeIsbaTES3_ReturnsFullPathWithoutInfix)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ auto type = bsa_archive_type_e::baTES3;
+ auto dto = ModDto(0, "C:/directory", "archive", ".ba2");
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Morrowind));
+
+ // Act
+ auto result = sut.GetArchiveFullPath(type, &dto);
+
+ // Assert
+ EXPECT_EQ("C:/directory/archive.bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetArchiveFullPath_WhenTypeIsbaTES4_ReturnsFullPathWithoutInfix)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ auto type = bsa_archive_type_e::baTES3;
+ auto dto = ModDto(0, "C:/directory", "archive", ".ba2");
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Oblivion));
+
+ // Act
+ auto result = sut.GetArchiveFullPath(type, &dto);
+
+ // Assert
+ EXPECT_EQ("C:/directory/archive.bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetArchiveFullPath_WhenTypeIsbaFO3_ReturnsFullPathWithoutInfix)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ auto type = bsa_archive_type_e::baFO3;
+ auto dto = ModDto(0, "C:/directory", "archive", ".ba2");
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::Fallout3));
+
+ // Act
+ auto result = sut.GetArchiveFullPath(type, &dto);
+
+ // Assert
+ EXPECT_EQ("C:/directory/archive.bsa", result.toStdString());
+ }
+
+ TEST_F(ArchiveNameServiceFacts, GetArchiveFullPath_WhenTypeIsbaSSE_ReturnsFullPathWithoutInfix)
+ {
+ // Arrange
+ auto sut = ArchiveNameService(
+ naggyMockModContext);
+ auto type = bsa_archive_type_e::baSSE;
+ auto dto = ModDto(0, "C:/directory", "archive", ".ba2");
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(NexusId::SkyrimSE));
+
+ // Act
+ auto result = sut.GetArchiveFullPath(type, &dto);
+
+ // Assert
+ EXPECT_EQ("C:/directory/archive.bsa", result.toStdString());
+ }
+}
diff --git a/libs/bsapacker/tests/BsaPackerFacts.cpp b/libs/bsapacker/tests/BsaPackerFacts.cpp
new file mode 100644
index 0000000..d3e8e59
--- /dev/null
+++ b/libs/bsapacker/tests/BsaPackerFacts.cpp
@@ -0,0 +1,34 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "BsaPacker.h"
+#include "MockOrganizer.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+using ::testing::Return;
+using ::testing::Eq;
+
+namespace BsaPackerTests
+{
+ class BsaPackerFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockOrganizer = new NaggyMock<MockOrganizer>();
+ }
+
+ void TearDown() override {
+ delete naggyMockOrganizer;
+ }
+
+ NaggyMock<MockOrganizer>* naggyMockOrganizer;
+ };
+
+ TEST_F(BsaPackerFacts, CtorAndInit_Always_Constructs)
+ {
+ auto result = Bsa_Packer();
+ EXPECT_NO_THROW(result.init(naggyMockOrganizer));
+ }
+
+}
diff --git a/libs/bsapacker/tests/BsaPackerWorkerFacts.cpp b/libs/bsapacker/tests/BsaPackerWorkerFacts.cpp
new file mode 100644
index 0000000..851ae3c
--- /dev/null
+++ b/libs/bsapacker/tests/BsaPackerWorkerFacts.cpp
@@ -0,0 +1,67 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "BsaPackerWorker.h"
+#include "MockSettingsService.h"
+#include "MockModDtoFactory.h"
+#include "MockArchiveBuilderFactory.h"
+#include "MockDummyPluginServiceFactory.h"
+#include "MockArchiveAutoService.h"
+#include "MockHideLooseAssetService.h"
+#include "MockArchiveNameService.h"
+#include "MockOverrideFileService.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class BsaPackerWorkerFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override
+ {
+ naggyMockSettingsService = new NaggyMock<MockSettingsService>();
+ naggyMockModDtoFactory = new NaggyMock<MockModDtoFactory>();
+ naggyMockArchiveBuilderFactory = new NaggyMock<MockArchiveBuilderFactory>();
+ naggyMockArchiveAutoService = new NaggyMock<MockArchiveAutoService>();
+ naggyMockDummyPluginServiceFactory = new NaggyMock<MockDummyPluginServiceFactory>();
+ naggyMockHideLooseAssetService = new NaggyMock<MockHideLooseAssetService>();
+ naggyMockArchiveNameService = new NaggyMock<MockArchiveNameService>();
+ naggyOverrideFileService = new NaggyMock<MockOverrideFileService>();
+ }
+
+ void TearDown() override
+ {
+ delete naggyMockSettingsService;
+ delete naggyMockModDtoFactory;
+ delete naggyMockArchiveBuilderFactory;
+ delete naggyMockArchiveAutoService;
+ delete naggyMockDummyPluginServiceFactory;
+ delete naggyMockHideLooseAssetService;
+ delete naggyMockArchiveNameService;
+ }
+
+ NaggyMock<MockSettingsService> *naggyMockSettingsService;
+ NaggyMock<MockModDtoFactory> *naggyMockModDtoFactory;
+ NaggyMock<MockArchiveBuilderFactory> *naggyMockArchiveBuilderFactory;
+ NaggyMock<MockArchiveAutoService> *naggyMockArchiveAutoService;
+ NaggyMock<MockDummyPluginServiceFactory> *naggyMockDummyPluginServiceFactory;
+ NaggyMock<MockHideLooseAssetService> *naggyMockHideLooseAssetService;
+ NaggyMock<MockArchiveNameService> *naggyMockArchiveNameService;
+ NaggyMock<MockOverrideFileService> *naggyOverrideFileService;
+ };
+
+ TEST_F(BsaPackerWorkerFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(BsaPackerWorker(
+ naggyMockSettingsService,
+ naggyMockModDtoFactory,
+ naggyMockArchiveBuilderFactory,
+ naggyMockArchiveAutoService,
+ naggyMockDummyPluginServiceFactory,
+ naggyMockHideLooseAssetService,
+ naggyMockArchiveNameService,
+ naggyOverrideFileService));
+ }
+}
diff --git a/libs/bsapacker/tests/CMakeLists.txt b/libs/bsapacker/tests/CMakeLists.txt
new file mode 100644
index 0000000..5f482a7
--- /dev/null
+++ b/libs/bsapacker/tests/CMakeLists.txt
@@ -0,0 +1,5 @@
+cmake_minimum_required(VERSION 3.22)
+
+add_executable(bsa_packer_tests)
+mo2_configure_tests(bsa_packer_tests WARNINGS OFF)
+target_link_libraries(bsa_packer_tests PRIVATE bsa_packer)
diff --git a/libs/bsapacker/tests/DummyPluginServiceFactoryFacts.cpp b/libs/bsapacker/tests/DummyPluginServiceFactoryFacts.cpp
new file mode 100644
index 0000000..c662438
--- /dev/null
+++ b/libs/bsapacker/tests/DummyPluginServiceFactoryFacts.cpp
@@ -0,0 +1,44 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "DummyPluginServiceFactory.h"
+#include "MockModContext.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class DummyPluginServiceFactoryFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockModContext = new NaggyMock<MockModContext>();
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockModContext;
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockModContext>* naggyMockModContext;
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(DummyPluginServiceFactoryFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = DummyPluginServiceFactory(
+ naggyMockModContext,
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/Fallout3DummyPluginServiceFacts.cpp b/libs/bsapacker/tests/Fallout3DummyPluginServiceFacts.cpp
new file mode 100644
index 0000000..e485d56
--- /dev/null
+++ b/libs/bsapacker/tests/Fallout3DummyPluginServiceFacts.cpp
@@ -0,0 +1,39 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "Fallout3DummyPluginService.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class Fallout3DummyPluginServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(Fallout3DummyPluginServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = Fallout3DummyPluginService(
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/Fallout4DummyPluginServiceFacts.cpp b/libs/bsapacker/tests/Fallout4DummyPluginServiceFacts.cpp
new file mode 100644
index 0000000..07d7139
--- /dev/null
+++ b/libs/bsapacker/tests/Fallout4DummyPluginServiceFacts.cpp
@@ -0,0 +1,39 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "Fallout4DummyPluginService.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class Fallout4DummyPluginServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(Fallout4DummyPluginServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = Fallout4DummyPluginService(
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/FileWriterServiceFacts.cpp b/libs/bsapacker/tests/FileWriterServiceFacts.cpp
new file mode 100644
index 0000000..5038640
--- /dev/null
+++ b/libs/bsapacker/tests/FileWriterServiceFacts.cpp
@@ -0,0 +1,26 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "FileWriterService.h"
+
+using namespace BsaPacker;
+
+namespace BsaPackerTests
+{
+ class FileWriterServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ }
+
+ void TearDown() override {
+ }
+ };
+
+ TEST_F(FileWriterServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = FileWriterService();
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/GeneralArchiveBuilderFacts.cpp b/libs/bsapacker/tests/GeneralArchiveBuilderFacts.cpp
new file mode 100644
index 0000000..2139a44
--- /dev/null
+++ b/libs/bsapacker/tests/GeneralArchiveBuilderFacts.cpp
@@ -0,0 +1,35 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/GeneralArchiveBuilder.h>
+#include "MockArchiveBuilderHelper.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class GeneralArchiveBuilderFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockArchiveBuilderHelper = new NaggyMock<MockArchiveBuilderHelper>();
+ }
+
+ void TearDown() override {
+ delete naggyMockArchiveBuilderHelper;
+ }
+
+ NaggyMock<MockArchiveBuilderHelper>* naggyMockArchiveBuilderHelper;
+ };
+
+ TEST_F(GeneralArchiveBuilderFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = GeneralArchiveBuilder(
+ naggyMockArchiveBuilderHelper,
+ QDir(),
+ baNone);
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/HideLooseAssetServiceFacts.cpp b/libs/bsapacker/tests/HideLooseAssetServiceFacts.cpp
new file mode 100644
index 0000000..c868b8d
--- /dev/null
+++ b/libs/bsapacker/tests/HideLooseAssetServiceFacts.cpp
@@ -0,0 +1,33 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "HideLooseAssetService.h"
+#include "MockSettingsService.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class HideLooseAssetServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockSettingsService = new NaggyMock<MockSettingsService>();
+ }
+
+ void TearDown() override {
+ delete naggyMockSettingsService;
+ }
+
+ NaggyMock<MockSettingsService>* naggyMockSettingsService;
+ };
+
+ TEST_F(HideLooseAssetServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = HideLooseAssetService(
+ naggyMockSettingsService);
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/MockArchiveAutoService.h b/libs/bsapacker/tests/MockArchiveAutoService.h
new file mode 100644
index 0000000..ebbbcfa
--- /dev/null
+++ b/libs/bsapacker/tests/MockArchiveAutoService.h
@@ -0,0 +1,10 @@
+#include <bsapacker/IArchiveAutoService.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockArchiveAutoService : public IArchiveAutoService
+{
+public:
+ MOCK_METHOD(bool, CreateBSA, (libbsarch::bs_archive_auto *, const QString &, bsa_archive_type_e), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockArchiveBuilderFactory.h b/libs/bsapacker/tests/MockArchiveBuilderFactory.h
new file mode 100644
index 0000000..61a7ce4
--- /dev/null
+++ b/libs/bsapacker/tests/MockArchiveBuilderFactory.h
@@ -0,0 +1,11 @@
+#include <bsapacker/IArchiveBuilderFactory.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockArchiveBuilderFactory : public IArchiveBuilderFactory
+{
+public:
+ MOCK_METHOD(std::vector<bsa_archive_type_e>, GetArchiveTypes, (const IModDto*), (const, override));
+ MOCK_METHOD(std::unique_ptr<IArchiveBuilder>, Create, (bsa_archive_type_e, const IModDto*), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockArchiveBuilderHelper.h b/libs/bsapacker/tests/MockArchiveBuilderHelper.h
new file mode 100644
index 0000000..632977e
--- /dev/null
+++ b/libs/bsapacker/tests/MockArchiveBuilderHelper.h
@@ -0,0 +1,15 @@
+#include <bsapacker/IArchiveBuilderHelper.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockArchiveBuilderHelper : public IArchiveBuilderHelper
+{
+public:
+ MOCK_METHOD(bool, isFileIgnorable, (const std::filesystem::path&, const std::vector<std::filesystem::path::string_type>&), (const, override));
+ MOCK_METHOD(bool, isIncompressible, (const std::filesystem::path&), (const, override));
+ MOCK_METHOD(bool, isExtensionBlacklisted, (const std::filesystem::path&), (const, override));
+ MOCK_METHOD(uint32_t, getFileCount, (const std::filesystem::path&), (const, override));
+ MOCK_METHOD(std::vector<std::filesystem::path::string_type>, getRootDirectoryFilenames, (const std::filesystem::path&), (const, override));
+ MOCK_METHOD(bool, doesPathContainFiles, (const std::filesystem::path&, const std::vector<std::filesystem::path::string_type>&), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockArchiveNameService.h b/libs/bsapacker/tests/MockArchiveNameService.h
new file mode 100644
index 0000000..94dd68b
--- /dev/null
+++ b/libs/bsapacker/tests/MockArchiveNameService.h
@@ -0,0 +1,13 @@
+#include <bsapacker/IArchiveNameService.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockArchiveNameService : public IArchiveNameService
+{
+public:
+ MOCK_METHOD(QString, GetFileExtension, (), (const, override));
+ MOCK_METHOD(QString, GetArchiveFullPath, (bsa_archive_type_e, const IModDto *), (const, override));
+ MOCK_METHOD(QString, Infix, (bsa_archive_type_e type), (const, override));
+ MOCK_METHOD(QString, Suffix, (const QString &pathNoExt), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockDummyPluginLogic.h b/libs/bsapacker/tests/MockDummyPluginLogic.h
new file mode 100644
index 0000000..5bdaa50
--- /dev/null
+++ b/libs/bsapacker/tests/MockDummyPluginLogic.h
@@ -0,0 +1,11 @@
+#include <bsapacker/IDummyPluginLogic.h>
+#include "gmock/gmock.h"
+
+using namespace BsaPacker;
+
+class MockDummyPluginLogic : public IDummyPluginLogic
+{
+public:
+ MOCK_METHOD(bool, canCreateDummyESP, (const QString &, const bsa_archive_type_e), (const, override));
+ MOCK_METHOD(bool, canCreateDummyESL, (const QString &, const bsa_archive_type_e), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockDummyPluginServiceFactory.h b/libs/bsapacker/tests/MockDummyPluginServiceFactory.h
new file mode 100644
index 0000000..36ccc29
--- /dev/null
+++ b/libs/bsapacker/tests/MockDummyPluginServiceFactory.h
@@ -0,0 +1,10 @@
+#include <bsapacker/IDummyPluginServiceFactory.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockDummyPluginServiceFactory : public IDummyPluginServiceFactory
+{
+public:
+ MOCK_METHOD(std::unique_ptr<IDummyPluginService>, Create, (), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockFileWriterService.h b/libs/bsapacker/tests/MockFileWriterService.h
new file mode 100644
index 0000000..164ba5a
--- /dev/null
+++ b/libs/bsapacker/tests/MockFileWriterService.h
@@ -0,0 +1,10 @@
+#include <bsapacker/IFileWriterService.h>
+#include "gmock/gmock.h"
+
+using namespace BsaPacker;
+
+class MockFileWriterService : public IFileWriterService
+{
+public:
+ MOCK_METHOD(bool, Write, (const std::string&, const char*, uint32_t), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockHideLooseAssetService.h b/libs/bsapacker/tests/MockHideLooseAssetService.h
new file mode 100644
index 0000000..681534d
--- /dev/null
+++ b/libs/bsapacker/tests/MockHideLooseAssetService.h
@@ -0,0 +1,10 @@
+#include <bsapacker/IHideLooseAssetService.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockHideLooseAssetService : public IHideLooseAssetService
+{
+public:
+ MOCK_METHOD(bool, HideLooseAssets, (const QDir&), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockModContext.h b/libs/bsapacker/tests/MockModContext.h
new file mode 100644
index 0000000..fedb3ff
--- /dev/null
+++ b/libs/bsapacker/tests/MockModContext.h
@@ -0,0 +1,13 @@
+#include <bsapacker/IModContext.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockModContext : public IModContext
+{
+public:
+ MOCK_METHOD(QString, GetAbsoluteModPath, (const QString& modName), (const, override));
+ MOCK_METHOD(int, GetNexusId, (), (const, override));
+ MOCK_METHOD(QStringList, GetPlugins, (const QDir& modDirectory), (const, override));
+ MOCK_METHOD(QStringList, GetValidMods, (), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockModDtoFactory.h b/libs/bsapacker/tests/MockModDtoFactory.h
new file mode 100644
index 0000000..d1f0331
--- /dev/null
+++ b/libs/bsapacker/tests/MockModDtoFactory.h
@@ -0,0 +1,10 @@
+#include <bsapacker/IModDtoFactory.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockModDtoFactory : public IModDtoFactory
+{
+public:
+ MOCK_METHOD(std::unique_ptr<IModDto>, Create, (), (const));
+};
diff --git a/libs/bsapacker/tests/MockOrganizer.h b/libs/bsapacker/tests/MockOrganizer.h
new file mode 100644
index 0000000..4c6762e
--- /dev/null
+++ b/libs/bsapacker/tests/MockOrganizer.h
@@ -0,0 +1,61 @@
+#include "imoinfo.h"
+#include <gmock/gmock.h>
+
+using namespace MOBase;
+
+class MockOrganizer : public IOrganizer
+{
+public:
+ // clang-format off
+ MOCK_METHOD(IModRepositoryBridge*, createNexusBridge, (), (const, override));
+ MOCK_METHOD(QString, profileName, (), (const, override));
+ MOCK_METHOD(QString, profilePath, (), (const, override));
+ MOCK_METHOD(QString, downloadsPath, (), (const, override));
+ MOCK_METHOD(QString, overwritePath, (), (const, override));
+ MOCK_METHOD(QString, basePath, (), (const, override));
+ MOCK_METHOD(QString, modsPath, (), (const, override));
+ MOCK_METHOD(Version, version, (), (const, override));
+ MOCK_METHOD(VersionInfo, appVersion, (), (const, override));
+ MOCK_METHOD(IModInterface*, createMod, (GuessedValue<QString> &name), (override));
+ MOCK_METHOD(IPluginGame*, getGame, (const QString &gameName), (const, override));
+ MOCK_METHOD(void, modDataChanged, (IModInterface *mod), (override));
+ MOCK_METHOD(QVariant, pluginSetting, (const QString &pluginName, const QString &key), (const, override));
+ MOCK_METHOD(void, setPluginSetting, (const QString &pluginName, const QString &key, const QVariant &value), (override));
+ MOCK_METHOD(bool, isPluginEnabled, (const QString& pluginName), (const, override));
+ MOCK_METHOD(bool, isPluginEnabled, (IPlugin *plugin), (const, override));
+ MOCK_METHOD(QVariant, persistent, (const QString &pluginName, const QString &key, const QVariant &def), (const, override));
+ MOCK_METHOD(void, setPersistent, (const QString &pluginName, const QString &key, const QVariant &value, bool sync), (override));
+ MOCK_METHOD(QString, pluginDataPath, (), (const, override));
+ MOCK_METHOD(IModInterface*, installMod, (const QString &fileName, const QString &nameSuggestion), (override));
+ MOCK_METHOD(QString, resolvePath, (const QString &fileName), (const, override));
+ MOCK_METHOD(QStringList, listDirectories, (const QString &directoryName), (const, override));
+ MOCK_METHOD(QStringList, findFiles, (const QString &path, const std::function<bool(const QString&)> &filter), (const, override));
+ MOCK_METHOD(QStringList, findFiles, (const QString &path, const QStringList &filter), (const, override));
+ MOCK_METHOD(QStringList, getFileOrigins, (const QString &fileName) ,(const, override));
+ MOCK_METHOD(QList<FileInfo>, findFileInfos, (const QString &path, const std::function<bool(const FileInfo&)> &filter), (const, override));
+ MOCK_METHOD(std::shared_ptr<const IFileTree>, virtualFileTree, (), (const, override));
+ MOCK_METHOD(MOBase::IDownloadManager*, downloadManager, (), (const, override));
+ MOCK_METHOD(MOBase::IPluginList*, pluginList, (), (const, override));
+ MOCK_METHOD(MOBase::IModList*, modList, (), (const, override));
+ MOCK_METHOD(MOBase::IProfile*, profile, (), (const, override));
+ MOCK_METHOD(IGameFeatures*, gameFeatures, (), (const, override));
+ MOCK_METHOD(HANDLE, startApplication, (const QString &executable, const QStringList &args, const QString &cwd, const QString &profile, const QString &forcedCustomOverwrite, bool ignoreCustomOverwrite), (override));
+ MOCK_METHOD(bool, waitForApplication, (HANDLE handle, bool refresh, LPDWORD exitCode), (const, override));
+ MOCK_METHOD(bool, onAboutToRun, (const std::function<bool(const QString&)> &func), (override));
+ MOCK_METHOD(bool, onAboutToRun, (const std::function<bool(const QString&, const QDir&, const QString&)>&), (override));
+ MOCK_METHOD(bool, onFinishedRun, (const std::function<void(const QString&, unsigned int)> &func), (override));
+ MOCK_METHOD(void, refresh, (bool saveChanges), (override));
+ MOCK_METHOD(MOBase::IPluginGame const *, managedGame, (), (const, override));
+ MOCK_METHOD(bool, onUserInterfaceInitialized, (const std::function<void (QMainWindow *)> &), (override));
+ MOCK_METHOD(bool, onNextRefresh, (const std::function<void()> &, bool), (override));
+ MOCK_METHOD(bool, onProfileCreated, (const std::function<void(MOBase::IProfile*)>&), (override));
+ MOCK_METHOD(bool, onProfileRemoved, (const std::function<void(const QString&)>&), (override));
+ MOCK_METHOD(bool, onProfileRenamed, (const std::function<void(MOBase::IProfile*, QString const&, QString const&)>&), (override));
+ MOCK_METHOD(bool, onProfileChanged, (const std::function<void (MOBase::IProfile*, MOBase::IProfile*)> &), (override));
+ MOCK_METHOD(bool, onPluginSettingChanged, (const std::function<void (const QString &,const QString &,const QVariant &,const QVariant &)> &), (override));
+ MOCK_METHOD(bool, onPluginEnabled, (const std::function<void(const MOBase::IPlugin*)>&), (override));
+ MOCK_METHOD(bool, onPluginEnabled, (const QString&, const std::function<void()>&), (override));
+ MOCK_METHOD(bool, onPluginDisabled, (const std::function<void(const MOBase::IPlugin*)>&), (override));
+ MOCK_METHOD(bool, onPluginDisabled, (const QString&, const std::function<void()>&), (override));
+ // clang-format on
+};
diff --git a/libs/bsapacker/tests/MockOverrideFileService.h b/libs/bsapacker/tests/MockOverrideFileService.h
new file mode 100644
index 0000000..b7c0414
--- /dev/null
+++ b/libs/bsapacker/tests/MockOverrideFileService.h
@@ -0,0 +1,10 @@
+#include <bsapacker/IOverrideFileService.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockOverrideFileService : public IOverrideFileService
+{
+public:
+ MOCK_METHOD(bool, CreateOverrideFile, (const int nexusId, const QString &modPath, const QStringList &archiveNames), (const, override));
+};
diff --git a/libs/bsapacker/tests/MockPackerDialog.h b/libs/bsapacker/tests/MockPackerDialog.h
new file mode 100644
index 0000000..aafad52
--- /dev/null
+++ b/libs/bsapacker/tests/MockPackerDialog.h
@@ -0,0 +1,17 @@
+#include <bsapacker/IPackerDialog.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockPackerDialog : public IPackerDialog
+{
+public:
+ MOCK_METHOD(bool, IsNewFilename, (), (const, override));
+ MOCK_METHOD(QString, SelectedMod, (), (const, override));
+ MOCK_METHOD(void, RefreshModList, (), (override));
+ MOCK_METHOD(QString, SelectedPluginItem, (), (const, override));
+ MOCK_METHOD(void, UpdateNameList, (const QString&), (override));
+ MOCK_METHOD(void, RefreshSelectedName, (), (override));
+ MOCK_METHOD(int, Exec, (), (override));
+ MOCK_METHOD(void, RefreshOkButton, (), (override));
+};
diff --git a/libs/bsapacker/tests/MockSettingsService.h b/libs/bsapacker/tests/MockSettingsService.h
new file mode 100644
index 0000000..73bfea0
--- /dev/null
+++ b/libs/bsapacker/tests/MockSettingsService.h
@@ -0,0 +1,10 @@
+#include <bsapacker/ISettingsService.h>
+#include <gmock/gmock.h>
+
+using namespace BsaPacker;
+
+class MockSettingsService : public ISettingsService
+{
+public:
+ MOCK_METHOD(QVariant, GetPluginSetting, (const QString&), (const, override));
+};
diff --git a/libs/bsapacker/tests/ModContextFacts.cpp b/libs/bsapacker/tests/ModContextFacts.cpp
new file mode 100644
index 0000000..3ab1808
--- /dev/null
+++ b/libs/bsapacker/tests/ModContextFacts.cpp
@@ -0,0 +1,33 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "ModContext.h"
+#include "MockOrganizer.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class ModContextFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockOrganizer = new NaggyMock<MockOrganizer>();
+ }
+
+ void TearDown() override {
+ delete naggyMockOrganizer;
+ }
+
+ NaggyMock<MockOrganizer>* naggyMockOrganizer;
+ };
+
+ TEST_F(ModContextFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = ModContext(
+ naggyMockOrganizer);
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/ModDtoFactoryFacts.cpp b/libs/bsapacker/tests/ModDtoFactoryFacts.cpp
new file mode 100644
index 0000000..ae9a9f7
--- /dev/null
+++ b/libs/bsapacker/tests/ModDtoFactoryFacts.cpp
@@ -0,0 +1,53 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/ModDtoFactory.h>
+#include "MockModContext.h"
+#include "MockPackerDialog.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+using ::testing::Return;
+
+namespace BsaPackerTests
+{
+ class ModDtoFactoryFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockModContext = new NaggyMock<MockModContext>();
+ naggyMockPackerDialog = new NaggyMock<MockPackerDialog>();
+ }
+
+ void TearDown() override {
+ delete naggyMockModContext;
+ delete naggyMockPackerDialog;
+ }
+
+ NaggyMock<MockModContext>* naggyMockModContext;
+ NaggyMock<MockPackerDialog>* naggyMockPackerDialog;
+ };
+
+ TEST_F(ModDtoFactoryFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(ModDtoFactory(
+ naggyMockModContext,
+ naggyMockPackerDialog));
+ }
+
+ TEST_F(ModDtoFactoryFacts, Create_WhenGameIsNewVegas_ReturnsNewVegasIdInDto)
+ {
+ // Arrange
+ auto sut = ModDtoFactory(
+ naggyMockModContext,
+ naggyMockPackerDialog);
+ ON_CALL(*naggyMockModContext, GetNexusId())
+ .WillByDefault(Return(1));
+ ON_CALL(*naggyMockPackerDialog, Exec())
+ .WillByDefault(Return(QDialog::DialogCode::Accepted));
+
+ auto result = sut.Create();
+
+ EXPECT_EQ(1, result->NexusId());
+ }
+}
diff --git a/libs/bsapacker/tests/NewVegasDummyPluginServiceFacts.cpp b/libs/bsapacker/tests/NewVegasDummyPluginServiceFacts.cpp
new file mode 100644
index 0000000..98216ff
--- /dev/null
+++ b/libs/bsapacker/tests/NewVegasDummyPluginServiceFacts.cpp
@@ -0,0 +1,39 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "NewVegasDummyPluginService.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class NewVegasDummyPluginServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(NewVegasDummyPluginServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = NewVegasDummyPluginService(
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/OblivionDummyPluginServiceFacts.cpp b/libs/bsapacker/tests/OblivionDummyPluginServiceFacts.cpp
new file mode 100644
index 0000000..dbebbb1
--- /dev/null
+++ b/libs/bsapacker/tests/OblivionDummyPluginServiceFacts.cpp
@@ -0,0 +1,39 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "OblivionDummyPluginService.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class OblivionDummyPluginServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(OblivionDummyPluginServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = OblivionDummyPluginService(
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/SkyrimDummyPluginServiceFacts.cpp b/libs/bsapacker/tests/SkyrimDummyPluginServiceFacts.cpp
new file mode 100644
index 0000000..e699c10
--- /dev/null
+++ b/libs/bsapacker/tests/SkyrimDummyPluginServiceFacts.cpp
@@ -0,0 +1,39 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "SkyrimDummyPluginService.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class SkyrimDummyPluginServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(SkyrimDummyPluginServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = SkyrimDummyPluginService(
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/SkyrimSEDummyPluginServiceFacts.cpp b/libs/bsapacker/tests/SkyrimSEDummyPluginServiceFacts.cpp
new file mode 100644
index 0000000..5a67937
--- /dev/null
+++ b/libs/bsapacker/tests/SkyrimSEDummyPluginServiceFacts.cpp
@@ -0,0 +1,39 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include "SkyrimSEDummyPluginService.h"
+#include "MockFileWriterService.h"
+#include "MockDummyPluginLogic.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class SkyrimSEDummyPluginServiceFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockFileWriterService = new NaggyMock<MockFileWriterService>();
+ naggyMockDummyPluginLogic = new NaggyMock<MockDummyPluginLogic>();
+ }
+
+ void TearDown() override {
+ delete naggyMockFileWriterService;
+ delete naggyMockDummyPluginLogic;
+ }
+
+ NaggyMock<MockFileWriterService>* naggyMockFileWriterService;
+ NaggyMock<MockDummyPluginLogic>* naggyMockDummyPluginLogic;
+ };
+
+ TEST_F(SkyrimSEDummyPluginServiceFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = SkyrimSEDummyPluginService(
+ naggyMockFileWriterService,
+ naggyMockDummyPluginLogic
+ );
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/TextureArchiveBuilderFacts.cpp b/libs/bsapacker/tests/TextureArchiveBuilderFacts.cpp
new file mode 100644
index 0000000..3ada0de
--- /dev/null
+++ b/libs/bsapacker/tests/TextureArchiveBuilderFacts.cpp
@@ -0,0 +1,35 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/TextureArchiveBuilder.h>
+#include "MockArchiveBuilderHelper.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class TextureArchiveBuilderFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockArchiveBuilderHelper = new NaggyMock<MockArchiveBuilderHelper>();
+ }
+
+ void TearDown() override {
+ delete naggyMockArchiveBuilderHelper;
+ }
+
+ NaggyMock<MockArchiveBuilderHelper>* naggyMockArchiveBuilderHelper;
+ };
+
+ TEST_F(TextureArchiveBuilderFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = TextureArchiveBuilder(
+ naggyMockArchiveBuilderHelper,
+ QDir(),
+ baNone);
+ );
+ }
+}
diff --git a/libs/bsapacker/tests/TexturelessArchiveBuilderFacts.cpp b/libs/bsapacker/tests/TexturelessArchiveBuilderFacts.cpp
new file mode 100644
index 0000000..f0aa7d2
--- /dev/null
+++ b/libs/bsapacker/tests/TexturelessArchiveBuilderFacts.cpp
@@ -0,0 +1,35 @@
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+#include <bsapacker/TexturelessArchiveBuilder.h>
+#include "MockArchiveBuilderHelper.h"
+
+using namespace BsaPacker;
+using ::testing::NaggyMock;
+
+namespace BsaPackerTests
+{
+ class TexturelessArchiveBuilderFacts : public ::testing::Test
+ {
+ protected:
+ void SetUp() override {
+ naggyMockArchiveBuilderHelper = new NaggyMock<MockArchiveBuilderHelper>();
+ }
+
+ void TearDown() override {
+ delete naggyMockArchiveBuilderHelper;
+ }
+
+ NaggyMock<MockArchiveBuilderHelper>* naggyMockArchiveBuilderHelper;
+ };
+
+ TEST_F(TexturelessArchiveBuilderFacts, Ctor_Always_Constructs)
+ {
+ EXPECT_NO_THROW(
+ auto result = TexturelessArchiveBuilder(
+ naggyMockArchiveBuilderHelper,
+ QDir(),
+ baNone);
+ );
+ }
+}