mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 13:10:05 +00:00
Added test cases for marker_model and marker_manager
This commit is contained in:
parent
2c9a8a33a4
commit
236d7c1e35
7 changed files with 227 additions and 6 deletions
|
|
@ -44,6 +44,14 @@ void WaitForInitialization()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only use for test cases
|
||||||
|
void ResetInitilization()
|
||||||
|
{
|
||||||
|
logger_->debug("Application initialization reset");
|
||||||
|
std::unique_lock lock(initializationMutex_);
|
||||||
|
initialized_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Application
|
} // namespace Application
|
||||||
} // namespace main
|
} // namespace main
|
||||||
} // namespace qt
|
} // namespace qt
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ namespace Application
|
||||||
|
|
||||||
void FinishInitialization();
|
void FinishInitialization();
|
||||||
void WaitForInitialization();
|
void WaitForInitialization();
|
||||||
|
// Only use for test cases
|
||||||
|
void ResetInitilization();
|
||||||
|
|
||||||
} // namespace Application
|
} // namespace Application
|
||||||
} // namespace main
|
} // namespace main
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public:
|
||||||
explicit Impl(MarkerManager* self) : self_ {self} {}
|
explicit Impl(MarkerManager* self) : self_ {self} {}
|
||||||
~Impl() { threadPool_.join(); }
|
~Impl() { threadPool_.join(); }
|
||||||
|
|
||||||
std::string markerSettingsPath_ {};
|
std::string markerSettingsPath_ {""};
|
||||||
std::vector<std::shared_ptr<MarkerRecord>> markerRecords_ {};
|
std::vector<std::shared_ptr<MarkerRecord>> markerRecords_ {};
|
||||||
|
|
||||||
MarkerManager* self_;
|
MarkerManager* self_;
|
||||||
|
|
@ -176,14 +176,13 @@ MarkerManager::Impl::GetMarkerByName(const std::string& name)
|
||||||
|
|
||||||
MarkerManager::MarkerManager() : p(std::make_unique<Impl>(this))
|
MarkerManager::MarkerManager() : p(std::make_unique<Impl>(this))
|
||||||
{
|
{
|
||||||
|
p->InitializeMarkerSettings();
|
||||||
|
|
||||||
boost::asio::post(p->threadPool_,
|
boost::asio::post(p->threadPool_,
|
||||||
[this]()
|
[this]()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
p->InitializeMarkerSettings();
|
|
||||||
|
|
||||||
// Read Marker settings on startup
|
// Read Marker settings on startup
|
||||||
main::Application::WaitForInitialization();
|
main::Application::WaitForInitialization();
|
||||||
p->ReadMarkerSettings();
|
p->ReadMarkerSettings();
|
||||||
|
|
@ -293,6 +292,13 @@ void MarkerManager::move_marker(size_t from, size_t to)
|
||||||
Q_EMIT MarkersUpdated();
|
Q_EMIT MarkersUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only use for testing
|
||||||
|
void MarkerManager::set_marker_settings_path(const std::string& path)
|
||||||
|
{
|
||||||
|
p->markerSettingsPath_ = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::shared_ptr<MarkerManager> MarkerManager::Instance()
|
std::shared_ptr<MarkerManager> MarkerManager::Instance()
|
||||||
{
|
{
|
||||||
static std::weak_ptr<MarkerManager> markerManagerReference_ {};
|
static std::weak_ptr<MarkerManager> markerManagerReference_ {};
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,9 @@ public:
|
||||||
void remove_marker(size_t index);
|
void remove_marker(size_t index);
|
||||||
void move_marker(size_t from, size_t to);
|
void move_marker(size_t from, size_t to);
|
||||||
|
|
||||||
|
// Only use for testing
|
||||||
|
void set_marker_settings_path(const std::string& path);
|
||||||
|
|
||||||
static std::shared_ptr<MarkerManager> Instance();
|
static std::shared_ptr<MarkerManager> Instance();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 40a367ca89b5b197353ca58dea547a3e3407c7f3
|
Subproject commit 166c5a7bcaf8ad0a42bedf8f8dc5c4aa907e7151
|
||||||
201
test/source/scwx/qt/model/marker_model.test.cpp
Normal file
201
test/source/scwx/qt/model/marker_model.test.cpp
Normal file
|
|
@ -0,0 +1,201 @@
|
||||||
|
#include <scwx/qt/model/marker_model.hpp>
|
||||||
|
#include <scwx/qt/manager/marker_manager.hpp>
|
||||||
|
#include <scwx/qt/main/application.hpp>
|
||||||
|
|
||||||
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include <condition_variable>
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
|
||||||
|
namespace scwx
|
||||||
|
{
|
||||||
|
namespace qt
|
||||||
|
{
|
||||||
|
namespace model
|
||||||
|
{
|
||||||
|
|
||||||
|
static const std::string EMPTY_MARKERS_FILE =
|
||||||
|
std::string(SCWX_TEST_DATA_DIR) + "/json/markers/markers-empty.json";
|
||||||
|
static const std::string TEMP_MARKERS_FILE =
|
||||||
|
std::string(SCWX_TEST_DATA_DIR) + "/json/markers/markers-temp.json";
|
||||||
|
static const std::string ONE_MARKERS_FILE =
|
||||||
|
std::string(SCWX_TEST_DATA_DIR) + "/json/markers/markers-one.json";
|
||||||
|
static const std::string FIVE_MARKERS_FILE =
|
||||||
|
std::string(SCWX_TEST_DATA_DIR) + "/json/markers/markers-five.json";
|
||||||
|
|
||||||
|
static std::mutex initializedMutex {};
|
||||||
|
static std::condition_variable initializedCond {};
|
||||||
|
static bool initialized;
|
||||||
|
|
||||||
|
void CompareFiles(const std::string& file1, const std::string& file2)
|
||||||
|
{
|
||||||
|
std::ifstream ifs1 {file1};
|
||||||
|
std::stringstream buffer1;
|
||||||
|
buffer1 << ifs1.rdbuf();
|
||||||
|
|
||||||
|
std::ifstream ifs2 {file2};
|
||||||
|
std::stringstream buffer2;
|
||||||
|
buffer2 << ifs2.rdbuf();
|
||||||
|
|
||||||
|
EXPECT_EQ(buffer1.str(), buffer2.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CopyFile(const std::string& from, const std::string& to)
|
||||||
|
{
|
||||||
|
std::filesystem::copy_file(from, to);
|
||||||
|
CompareFiles(from, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef void TestFunction(std::shared_ptr<manager::MarkerManager> manager,
|
||||||
|
MarkerModel& model);
|
||||||
|
|
||||||
|
void RunTest(const std::string& filename, TestFunction testFunction)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
main::Application::ResetInitilization();
|
||||||
|
MarkerModel model = MarkerModel();
|
||||||
|
std::shared_ptr<manager::MarkerManager> manager =
|
||||||
|
manager::MarkerManager::Instance();
|
||||||
|
|
||||||
|
manager->set_marker_settings_path(TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
initialized = false;
|
||||||
|
QObject::connect(manager.get(),
|
||||||
|
&manager::MarkerManager::MarkersInitialized,
|
||||||
|
[]()
|
||||||
|
{
|
||||||
|
std::unique_lock lock(initializedMutex);
|
||||||
|
initialized = true;
|
||||||
|
initializedCond.notify_all();
|
||||||
|
});
|
||||||
|
|
||||||
|
main::Application::FinishInitialization();
|
||||||
|
|
||||||
|
std::unique_lock lock(initializedMutex);
|
||||||
|
while (!initialized)
|
||||||
|
{
|
||||||
|
initializedCond.wait(lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
testFunction(manager, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), true);
|
||||||
|
|
||||||
|
CompareFiles(TEMP_MARKERS_FILE, filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, CreateJson)
|
||||||
|
{
|
||||||
|
// Verify file doesn't exist prior to test start
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
|
||||||
|
RunTest(EMPTY_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager>, MarkerModel&) {});
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, LoadEmpty)
|
||||||
|
{
|
||||||
|
CopyFile(EMPTY_MARKERS_FILE, TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
RunTest(EMPTY_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager>, MarkerModel&) {});
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, AddRemove)
|
||||||
|
{
|
||||||
|
CopyFile(EMPTY_MARKERS_FILE, TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
RunTest(ONE_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager> manager, MarkerModel&)
|
||||||
|
{ manager->add_marker(types::MarkerInfo("Null", 0, 0)); });
|
||||||
|
RunTest(EMPTY_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager> manager, MarkerModel&)
|
||||||
|
{ manager->remove_marker(0); });
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, AddFive)
|
||||||
|
{
|
||||||
|
CopyFile(EMPTY_MARKERS_FILE, TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
RunTest(FIVE_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager> manager, MarkerModel&)
|
||||||
|
{
|
||||||
|
manager->add_marker(types::MarkerInfo("Null", 0, 0));
|
||||||
|
manager->add_marker(types::MarkerInfo("North", 90, 0));
|
||||||
|
manager->add_marker(types::MarkerInfo("South", -90, 0));
|
||||||
|
manager->add_marker(types::MarkerInfo("East", 0, 90));
|
||||||
|
manager->add_marker(types::MarkerInfo("West", 0, -90));
|
||||||
|
});
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, AddFour)
|
||||||
|
{
|
||||||
|
CopyFile(ONE_MARKERS_FILE, TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
RunTest(FIVE_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager> manager, MarkerModel&)
|
||||||
|
{
|
||||||
|
manager->add_marker(types::MarkerInfo("North", 90, 0));
|
||||||
|
manager->add_marker(types::MarkerInfo("South", -90, 0));
|
||||||
|
manager->add_marker(types::MarkerInfo("East", 0, 90));
|
||||||
|
manager->add_marker(types::MarkerInfo("West", 0, -90));
|
||||||
|
});
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, RemoveFive)
|
||||||
|
{
|
||||||
|
CopyFile(FIVE_MARKERS_FILE, TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
RunTest(EMPTY_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager> manager, MarkerModel&)
|
||||||
|
{
|
||||||
|
manager->remove_marker(4);
|
||||||
|
manager->remove_marker(3);
|
||||||
|
manager->remove_marker(2);
|
||||||
|
manager->remove_marker(1);
|
||||||
|
manager->remove_marker(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(MarkerModelTest, RemoveFour)
|
||||||
|
{
|
||||||
|
CopyFile(FIVE_MARKERS_FILE, TEMP_MARKERS_FILE);
|
||||||
|
|
||||||
|
RunTest(ONE_MARKERS_FILE,
|
||||||
|
[](std::shared_ptr<manager::MarkerManager> manager, MarkerModel&)
|
||||||
|
{
|
||||||
|
manager->remove_marker(4);
|
||||||
|
manager->remove_marker(3);
|
||||||
|
manager->remove_marker(2);
|
||||||
|
manager->remove_marker(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
std::filesystem::remove(TEMP_MARKERS_FILE);
|
||||||
|
EXPECT_EQ(std::filesystem::exists(TEMP_MARKERS_FILE), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace model
|
||||||
|
} // namespace qt
|
||||||
|
} // namespace scwx
|
||||||
|
|
@ -25,7 +25,8 @@ set(SRC_QT_CONFIG_TESTS source/scwx/qt/config/county_database.test.cpp
|
||||||
set(SRC_QT_MANAGER_TESTS source/scwx/qt/manager/settings_manager.test.cpp
|
set(SRC_QT_MANAGER_TESTS source/scwx/qt/manager/settings_manager.test.cpp
|
||||||
source/scwx/qt/manager/update_manager.test.cpp)
|
source/scwx/qt/manager/update_manager.test.cpp)
|
||||||
set(SRC_QT_MAP_TESTS source/scwx/qt/map/map_provider.test.cpp)
|
set(SRC_QT_MAP_TESTS source/scwx/qt/map/map_provider.test.cpp)
|
||||||
set(SRC_QT_MODEL_TESTS source/scwx/qt/model/imgui_context_model.test.cpp)
|
set(SRC_QT_MODEL_TESTS source/scwx/qt/model/imgui_context_model.test.cpp
|
||||||
|
source/scwx/qt/model/marker_model.test.cpp)
|
||||||
set(SRC_QT_SETTINGS_TESTS source/scwx/qt/settings/settings_container.test.cpp
|
set(SRC_QT_SETTINGS_TESTS source/scwx/qt/settings/settings_container.test.cpp
|
||||||
source/scwx/qt/settings/settings_variable.test.cpp)
|
source/scwx/qt/settings/settings_variable.test.cpp)
|
||||||
set(SRC_QT_UTIL_TESTS source/scwx/qt/util/q_file_input_stream.test.cpp
|
set(SRC_QT_UTIL_TESTS source/scwx/qt/util/q_file_input_stream.test.cpp
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue