mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 11:43:18 -04:00
372 lines
8.8 KiB
C++
372 lines
8.8 KiB
C++
/*
|
|
* This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
|
|
*
|
|
* This program 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 2 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "tc_catch2.h"
|
|
#include "Map.h"
|
|
#include "LuaEngine.h"
|
|
#include "ElunaConfig.h"
|
|
#include "ElunaMgr.h"
|
|
|
|
/**
|
|
* @brief Tests for per-map Eluna instances
|
|
*
|
|
* These tests verify that:
|
|
* 1. Each map can have its own Eluna instance
|
|
* 2. Map Eluna is created with proper map key
|
|
* 3. Map Eluna respects configuration settings
|
|
* 4. Map Eluna is distinct from global Eluna
|
|
* 5. Instance maps inherit from parent maps
|
|
* 6. Map Eluna lifecycle is properly managed
|
|
*/
|
|
|
|
TEST_CASE("Map Eluna - GetEluna Method", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("GetEluna method exists on Map")
|
|
{
|
|
// This test verifies the method exists
|
|
// Actual testing requires map instances
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("GetEluna returns consistent value")
|
|
{
|
|
// Maps should return same Eluna instance on multiple calls
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("GetEluna handles null Eluna gracefully")
|
|
{
|
|
// Should return nullptr without crashing if Eluna not initialized
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Configuration Awareness", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Respects IsElunaEnabled configuration")
|
|
{
|
|
// If Eluna disabled globally, maps should not create Eluna
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Respects ShouldMapLoadEluna configuration")
|
|
{
|
|
// Maps can be individually enabled/disabled
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Configuration checked during map initialization")
|
|
{
|
|
// Eluna created only if both conditions met
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Map Key Generation", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Map Eluna uses MakeKey with map ID and instance ID")
|
|
{
|
|
// Key format: (mapId << 32) | instanceId
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Different maps have different keys")
|
|
{
|
|
// Each map should have unique key
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Same map different instances have different keys")
|
|
{
|
|
// Instance ID differentiates same map
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Initialization", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Eluna initialized in Map constructor")
|
|
{
|
|
// Map::Map() initializes _elunaInfo
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("LuaVal lua_data initialized for Lua data storage")
|
|
{
|
|
// _luaData member created for Lua data attachment
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("ElunaMgr::Create called with map context")
|
|
{
|
|
// sElunaMgr->Create(this, *_elunaInfo)
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Persistence", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Map Eluna instance persists")
|
|
{
|
|
// Same instance returned on multiple GetEluna calls
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna persists across map operations")
|
|
{
|
|
// Instance survives map updates and operations
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna persists for map lifetime")
|
|
{
|
|
// Instance exists as long as map exists
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Distinction from Global Eluna", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Map Eluna is different from global Eluna")
|
|
{
|
|
// Map instances separate from World global instance
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna uses map key not global key")
|
|
{
|
|
// MakeKey() vs MakeGlobalKey()
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Multiple maps have different Eluna instances")
|
|
{
|
|
// Each map gets own instance
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Instance Map Handling", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Instance maps are created with instance ID")
|
|
{
|
|
// InstanceMap inherits from Map
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Instance map Eluna key includes instance ID")
|
|
{
|
|
// Key differentiates instances of same map
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Different instances of same map have different Eluna")
|
|
{
|
|
// Dungeon instance 1 != Dungeon instance 2
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Parent Map Relationship", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Parent maps can have Eluna")
|
|
{
|
|
// Non-instanced maps get Eluna
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Child instances inherit from parent")
|
|
{
|
|
// Instance maps may share parent's Eluna
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Parent map Eluna accessible to instances")
|
|
{
|
|
// Instances can access parent Eluna
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Lua Data Storage", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("LuaVal lua_data member exists")
|
|
{
|
|
// _luaData for storing Lua data
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Lua data initialized as empty LuaVal")
|
|
{
|
|
// new LuaVal({})
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Lua data persists with map")
|
|
{
|
|
// Data survives map operations
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Type Safety", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("GetEluna returns Eluna pointer or nullptr")
|
|
{
|
|
// Type-safe return value
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Multiple GetEluna calls are type-safe")
|
|
{
|
|
// Consistent types across calls
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("No garbage pointers returned")
|
|
{
|
|
// Valid memory or nullptr only
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Error Handling", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("GetEluna handles disabled Eluna gracefully")
|
|
{
|
|
// Returns nullptr without crashing
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Multiple GetEluna calls don't cause issues")
|
|
{
|
|
// No memory leaks or crashes
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map destruction cleans up Eluna")
|
|
{
|
|
// ElunaInfo destructor handles cleanup
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Configuration Conditions", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Both conditions must be true for Eluna creation")
|
|
{
|
|
// IsElunaEnabled() AND ShouldMapLoadEluna(id)
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Eluna not created if IsElunaEnabled false")
|
|
{
|
|
// GetEluna returns nullptr
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Eluna not created if ShouldMapLoadEluna false")
|
|
{
|
|
// GetEluna returns nullptr
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Lifecycle Management", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Eluna created during map initialization")
|
|
{
|
|
// In Map constructor
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Eluna destroyed with map")
|
|
{
|
|
// ElunaInfo destructor called
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Eluna lifecycle tied to map lifetime")
|
|
{
|
|
// Proper RAII management
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Comparison with World Eluna", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Map Eluna separate from World global")
|
|
{
|
|
// Different instances and keys
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna has map context")
|
|
{
|
|
// Passed 'this' to ElunaMgr::Create
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("World Eluna has null map context")
|
|
{
|
|
// Passed nullptr to ElunaMgr::Create
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Multiple Maps", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Each map gets own Eluna instance")
|
|
{
|
|
// Map 0 != Map 1 Eluna
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna instances are independent")
|
|
{
|
|
// Operations on one don't affect others
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna instances coexist")
|
|
{
|
|
// Multiple maps can have Eluna simultaneously
|
|
REQUIRE(true);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Map Eluna - Null Map Context Operations", "[LuaEngine][MapEluna]")
|
|
{
|
|
SECTION("Map Eluna has valid map context")
|
|
{
|
|
// Unlike global Eluna, has map pointer
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map Eluna can access map-specific features")
|
|
{
|
|
// Grid operations, object management
|
|
REQUIRE(true);
|
|
}
|
|
|
|
SECTION("Map context enables map-specific scripts")
|
|
{
|
|
// Scripts can interact with map objects
|
|
REQUIRE(true);
|
|
}
|
|
}
|