Files
UwU-Engine/Tests/World/WorldTest.cpp
T

265 lines
5.6 KiB
C++

#include <filesystem>
#include <fstream>
#include <gtest/gtest.h>
#include "TestActor.h"
#include "Game/World/World.hpp"
#include "TestWorld.h"
#include "Core/CoreInstance.hpp"
#include "Game/GameInstance.hpp"
#include "Game/SaveMap/SaveMap.hpp"
TestWorld::TestWorld(GameInstance& game_instance) : World(game_instance)
{
}
std::shared_ptr<SaveMap> TestWorld::save()
{
std::shared_ptr<SaveMap> save = std::make_shared<SaveMap>("TestWorld");
save->connect_to(World::save());
return save;
}
void TestWorld::load(std::shared_ptr<SaveMap> save)
{
World::load(save->getParent());
}
TEST(World, check_load)
{
const std::string main_config =
R"({
"Class name":"MainConfig",
"dmin_memory_size":4096.0,
"imin_CPU_count":1,
"sgame_name":"tests",
"sbase_world":"tests"
})";
std::ofstream main_config_file("main_config.conf");
main_config_file << main_config;
main_config_file.close();
const std::string world_config =
R"(
{
"Class name": "TestWorld",
"Parent parameters": {
"Class name": "World",
"vsActorsIDs": [
"TempActor"
],
"loActors": [
{
"Class name": "Actor",
"oloc": {
"Class name": "Vector3D",
"dx": 1,
"dy": -1,
"dz": 1
},
"orot": {
"Class name": "Vector3D",
"dx": 0,
"dy": 0,
"dz": 0
},
"oscale": {
"Class name": "Vector3D",
"dx": 1,
"dy": 1,
"dz": 1
},
"lstags": []
}
]
}
}
)";
std::filesystem::create_directories("Worlds");
std::ofstream world_file("Worlds/tests.world");
world_file << world_config;
world_file.close();
CoreInstance tmp_core;
tmp_core.GetGameInstance()->GetWorld()->SpawnActorFormClass<TestActor>("Test");
std::vector<std::weak_ptr<Actor>> actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass<Actor>();
ASSERT_EQ(actors.size(), 2);
try {
std::filesystem::remove("main_config.conf");
}
catch (...) {}
try {
std::filesystem::remove("Worlds/tests.world");
}
catch (...) {}
try {
std::filesystem::remove("Worlds");
}
catch (...) {}
}
TEST(World, check_finders)
{
const std::string main_config =
R"({
"Class name":"MainConfig",
"dmin_memory_size":4096.0,
"imin_CPU_count":1,
"sgame_name":"tests",
"sbase_world":"tests"
})";
std::ofstream main_config_file("main_config.conf");
main_config_file << main_config;
main_config_file.close();
const std::string world_config =
R"(
{
"Class name": "TestWorld",
"Parent parameters": {
"Class name": "World",
"vsActorsIDs": [
"TempActor1",
"TempActor2"
],
"loActors": [
{
"Class name": "TestActor",
"Parent parameters":{
"Class name": "Actor",
"oloc": {
"Class name": "Vector3D",
"dx": 1,
"dy": -1,
"dz": 1
},
"orot": {
"Class name": "Vector3D",
"dx": 0,
"dy": 0,
"dz": 0
},
"oscale": {
"Class name": "Vector3D",
"dx": 1,
"dy": 1,
"dz": 1
},
"lstags": []
}
},
{
"Class name": "Actor",
"oloc": {
"Class name": "Vector3D",
"dx": 1,
"dy": -1,
"dz": 1
},
"orot": {
"Class name": "Vector3D",
"dx": 0,
"dy": 0,
"dz": 0
},
"oscale": {
"Class name": "Vector3D",
"dx": 1,
"dy": 1,
"dz": 1
},
"lstags": ["Simple"]
}
]
}
}
)";
std::filesystem::create_directories("Worlds");
std::ofstream world_file("Worlds/tests.world");
world_file << world_config;
world_file.close();
CoreInstance tmp_core;
// Test find by class
std::list<std::weak_ptr<TestActor>> test_actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass<TestActor, std::list>();
ASSERT_EQ(test_actors.size(), 1);
// Test find by tag
std::vector<std::weak_ptr<Actor>> actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByTag<Actor>("Simple");
ASSERT_EQ(actors.size(), 1);
// Test find by name
std::weak_ptr<Actor> actor_by_name = tmp_core.GetGameInstance()->GetWorld()->GetActorByName<Actor>("TempActor2");
ASSERT_EQ(actor_by_name.expired(), false);
ASSERT_EQ(*actor_by_name.lock()->GetTags().begin(), "Simple");
try {
std::filesystem::remove("main_config.conf");
}
catch (...) {}
try {
std::filesystem::remove("Worlds/tests.world");
}
catch (...) {}
try {
std::filesystem::remove("Worlds");
}
catch (...) {}
}
TEST(World, check_spawn_actor_from_class)
{
const std::string main_config =
R"({
"Class name":"MainConfig",
"dmin_memory_size":4096.0,
"imin_CPU_count":1,
"sgame_name":"tests",
"sbase_world":"tests"
})";
std::ofstream main_config_file("main_config.conf");
main_config_file << main_config;
main_config_file.close();
const std::string world_config =
R"(
{
"Class name": "TestWorld",
"Parent parameters": {
"Class name": "World",
"vsActorsIDs": [
],
"loActors": [
]
}
}
)";
std::filesystem::create_directories("Worlds");
std::ofstream world_file("Worlds/tests.world");
world_file << world_config;
world_file.close();
CoreInstance tmp_core;
std::vector<std::weak_ptr<TestActor>> test_actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass<TestActor>();
ASSERT_EQ(test_actors.size(), 0);
tmp_core.GetGameInstance()->GetWorld()->SpawnActorFormClass<TestActor>("Test");
test_actors = tmp_core.GetGameInstance()->GetWorld()->GetActorsByClass<TestActor>();
ASSERT_EQ(test_actors.size(), 1);
try {
std::filesystem::remove("main_config.conf");
}
catch (...) {}
try {
std::filesystem::remove("Worlds/tests.world");
}
catch (...) {}
try {
std::filesystem::remove("Worlds");
}
catch (...) {}
}