Externalized cPrefabPiecePool self-test.
This commit is contained in:
parent
ae16689420
commit
8df31067d4
@ -197,13 +197,53 @@ if(${SELF_TEST})
|
|||||||
add_subdirectory (tests)
|
add_subdirectory (tests)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Put project into solution folders in MSVC:
|
# Put projects into solution folders in MSVC:
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
set_target_properties(event_core event_extra expat jsoncpp lua luaexpat mbedtls sqlite SQLiteCpp tolualib zlib PROPERTIES FOLDER Lib)
|
set_target_properties(
|
||||||
set_target_properties(luaproxy tolua PROPERTIES FOLDER Support)
|
event_core
|
||||||
|
event_extra
|
||||||
|
expat
|
||||||
|
jsoncpp
|
||||||
|
lua
|
||||||
|
luaexpat
|
||||||
|
mbedtls
|
||||||
|
sqlite
|
||||||
|
SQLiteCpp
|
||||||
|
tolualib
|
||||||
|
zlib
|
||||||
|
PROPERTIES FOLDER Lib
|
||||||
|
)
|
||||||
|
set_target_properties(
|
||||||
|
luaproxy
|
||||||
|
tolua
|
||||||
|
PROPERTIES FOLDER Support
|
||||||
|
)
|
||||||
if (${SELF_TEST})
|
if (${SELF_TEST})
|
||||||
set_target_properties(Network PROPERTIES FOLDER Lib)
|
set_target_properties(
|
||||||
set_target_properties(arraystocoords-exe coordinates-exe copies-exe copyblocks-exe creatable-exe EchoServer Google-exe ChunkBuffer NameLookup PROPERTIES FOLDER Tests)
|
Network
|
||||||
|
PROPERTIES FOLDER Lib
|
||||||
|
)
|
||||||
|
set_target_properties(
|
||||||
|
arraystocoords-exe
|
||||||
|
ChunkBuffer
|
||||||
|
coordinates-exe
|
||||||
|
copies-exe
|
||||||
|
copyblocks-exe
|
||||||
|
creatable-exe
|
||||||
|
EchoServer
|
||||||
|
Google-exe
|
||||||
|
LoadablePieces
|
||||||
|
NameLookup
|
||||||
|
PROPERTIES FOLDER Tests
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${BUILD_TOOLS})
|
||||||
|
set_target_properties(
|
||||||
|
MCADefrag
|
||||||
|
ProtoProxy
|
||||||
|
PROPERTIES FOLDER Tools
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -98,7 +98,9 @@ local function OutputLuaStateHelpers(a_Package)
|
|||||||
f:write("// This file expects to be included form inside the cLuaState class definition\n")
|
f:write("// This file expects to be included form inside the cLuaState class definition\n")
|
||||||
f:write("\n\n\n\n\n")
|
f:write("\n\n\n\n\n")
|
||||||
for _, item in ipairs(types) do
|
for _, item in ipairs(types) do
|
||||||
f:write("void Push(" .. item.name .. " * a_Value);\n")
|
if not(g_HasCustomPushImplementation[item.name]) then
|
||||||
|
f:write("void Push(" .. item.name .. " * a_Value);\n")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
for _, item in ipairs(types) do
|
for _, item in ipairs(types) do
|
||||||
f:write("bool GetStackValue(int a_StackPos, Ptr" .. item.lname .. " & a_ReturnedVal);\n")
|
f:write("bool GetStackValue(int a_StackPos, Ptr" .. item.lname .. " & a_ReturnedVal);\n")
|
||||||
|
@ -242,13 +242,14 @@ public:
|
|||||||
|
|
||||||
// Push a simple value onto the stack (keep alpha-sorted):
|
// Push a simple value onto the stack (keep alpha-sorted):
|
||||||
void Push(bool a_Value);
|
void Push(bool a_Value);
|
||||||
|
void Push(cEntity * a_Entity);
|
||||||
|
void Push(cLuaServerHandle * a_ServerHandle);
|
||||||
|
void Push(cLuaTCPLink * a_TCPLink);
|
||||||
|
void Push(cLuaUDPEndpoint * a_UDPEndpoint);
|
||||||
void Push(double a_Value);
|
void Push(double a_Value);
|
||||||
void Push(int a_Value);
|
void Push(int a_Value);
|
||||||
void Push(void * a_Ptr);
|
void Push(void * a_Ptr);
|
||||||
void Push(std::chrono::milliseconds a_time);
|
void Push(std::chrono::milliseconds a_time);
|
||||||
void Push(cLuaServerHandle * a_ServerHandle);
|
|
||||||
void Push(cLuaTCPLink * a_TCPLink);
|
|
||||||
void Push(cLuaUDPEndpoint * a_UDPEndpoint);
|
|
||||||
|
|
||||||
// GetStackValue() retrieves the value at a_StackPos, if it is a valid type. If not, a_Value is unchanged.
|
// GetStackValue() retrieves the value at a_StackPos, if it is a valid type. If not, a_Value is unchanged.
|
||||||
// Returns whether value was changed
|
// Returns whether value was changed
|
||||||
|
@ -427,6 +427,7 @@ void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_Bl
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
||||||
{
|
{
|
||||||
// Setting the meta to a_BlockMeta keeps most textures. The few other blocks have to override this.
|
// Setting the meta to a_BlockMeta keeps most textures. The few other blocks have to override this.
|
||||||
|
@ -101,5 +101,5 @@ endif()
|
|||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
add_library(Generating ${SRCS} ${HDRS})
|
add_library(Generating ${SRCS} ${HDRS})
|
||||||
|
|
||||||
target_link_libraries(Generating OSSupport Blocks)
|
target_link_libraries(Generating OSSupport Blocks Bindings)
|
||||||
endif()
|
endif()
|
||||||
|
@ -24,33 +24,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if SELF_TEST
|
|
||||||
static class cPrefabPiecePoolTest
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
cPrefabPiecePoolTest(void)
|
|
||||||
{
|
|
||||||
cSelfTests::Get().Register(cSelfTests::SelfTestFunction(cPrefabPiecePoolTest::TestLoading), "PrefabPiecePool loading test");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void TestLoading(void)
|
|
||||||
{
|
|
||||||
cPrefabPiecePool test;
|
|
||||||
auto res = test.LoadFromFile("test.cubeset", true);
|
|
||||||
if (!res)
|
|
||||||
{
|
|
||||||
LOGWARNING("Loading from file \"test.cubeset\" failed.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LOG("Loaded %u pieces and %u starting pieces", static_cast<unsigned>(test.GetAllPiecesCount()), static_cast<unsigned>(test.GetStartingPiecesCount()));
|
|
||||||
}
|
|
||||||
} g_Test;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** Returns the map of string => eMergeStrategy used when translating cubeset file merge strategies. */
|
/** Returns the map of string => eMergeStrategy used when translating cubeset file merge strategies. */
|
||||||
static std::map<AString, cBlockArea::eMergeStrategy> & GetMergeStrategyMap(void)
|
static std::map<AString, cBlockArea::eMergeStrategy> & GetMergeStrategyMap(void)
|
||||||
{
|
{
|
||||||
@ -173,6 +146,7 @@ bool cPrefabPiecePool::LoadFromFile(const AString & a_FileName, bool a_LogWarnin
|
|||||||
cFile f;
|
cFile f;
|
||||||
if (!f.Open(a_FileName, cFile::fmRead))
|
if (!f.Open(a_FileName, cFile::fmRead))
|
||||||
{
|
{
|
||||||
|
CONDWARNING(a_LogWarnings, "Cannot open file %s for reading", a_FileName.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
@ -184,6 +158,7 @@ bool cPrefabPiecePool::LoadFromFile(const AString & a_FileName, bool a_LogWarnin
|
|||||||
{
|
{
|
||||||
return LoadFromCubesetFile(a_FileName, a_LogWarnings);
|
return LoadFromCubesetFile(a_FileName, a_LogWarnings);
|
||||||
}
|
}
|
||||||
|
CONDWARNING(a_LogWarnings, "Cannot load prefabs from file %s, unknown file format", a_FileName.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,14 +261,15 @@ template class SizeChecker<UInt8, 1>;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Common headers (part 1, without macros):
|
||||||
|
#include "StringUtils.h"
|
||||||
|
#include "OSSupport/CriticalSection.h"
|
||||||
|
#include "OSSupport/Event.h"
|
||||||
|
#include "OSSupport/File.h"
|
||||||
|
#include "OSSupport/StackTrace.h"
|
||||||
|
|
||||||
#ifndef TEST_GLOBALS
|
#ifndef TEST_GLOBALS
|
||||||
// Common headers (part 1, without macros):
|
|
||||||
#include "StringUtils.h"
|
|
||||||
#include "OSSupport/CriticalSection.h"
|
|
||||||
#include "OSSupport/Event.h"
|
|
||||||
#include "OSSupport/File.h"
|
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
#include "OSSupport/StackTrace.h"
|
|
||||||
#else
|
#else
|
||||||
// Logging functions
|
// Logging functions
|
||||||
void inline LOGERROR(const char * a_Format, ...) FORMATSTRING(1, 2);
|
void inline LOGERROR(const char * a_Format, ...) FORMATSTRING(1, 2);
|
||||||
@ -315,6 +316,9 @@ void inline LOG(const char * a_Format, ...)
|
|||||||
va_end(argList);
|
va_end(argList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LOGINFO LOG
|
||||||
|
#define LOGWARN LOGWARNING
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,8 @@ SET (SRCS
|
|||||||
ScoreboardSerializer.cpp
|
ScoreboardSerializer.cpp
|
||||||
StatSerializer.cpp
|
StatSerializer.cpp
|
||||||
WSSAnvil.cpp
|
WSSAnvil.cpp
|
||||||
WorldStorage.cpp)
|
WorldStorage.cpp
|
||||||
|
)
|
||||||
|
|
||||||
SET (HDRS
|
SET (HDRS
|
||||||
EnchantmentSerializer.h
|
EnchantmentSerializer.h
|
||||||
@ -26,7 +27,8 @@ SET (HDRS
|
|||||||
ScoreboardSerializer.h
|
ScoreboardSerializer.h
|
||||||
StatSerializer.h
|
StatSerializer.h
|
||||||
WSSAnvil.h
|
WSSAnvil.h
|
||||||
WorldStorage.h)
|
WorldStorage.h
|
||||||
|
)
|
||||||
|
|
||||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
set_source_files_properties(EnchantmentSerializer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=old-style-cast")
|
set_source_files_properties(EnchantmentSerializer.cpp PROPERTIES COMPILE_FLAGS "-Wno-error=old-style-cast")
|
||||||
|
@ -238,27 +238,27 @@ bool cSchematicFileSerializer::LoadFromSchematicNBT(cBlockArea & a_BlockArea, cP
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copy the block types and metas:
|
// Copy the block types and metas:
|
||||||
size_t NumBytes = a_BlockArea.GetBlockCount();
|
size_t NumTypeBytes = a_BlockArea.GetBlockCount();
|
||||||
if (a_NBT.GetDataLength(TBlockTypes) < NumBytes)
|
if (a_NBT.GetDataLength(TBlockTypes) < NumTypeBytes)
|
||||||
{
|
{
|
||||||
LOG("BlockTypes truncated in the schematic file (exp %d, got %d bytes). Loading partial.",
|
LOG("BlockTypes truncated in the schematic file (exp %u, got %u bytes). Loading partial.",
|
||||||
(int)NumBytes, (int)a_NBT.GetDataLength(TBlockTypes)
|
static_cast<unsigned>(NumTypeBytes), static_cast<unsigned>(a_NBT.GetDataLength(TBlockTypes))
|
||||||
);
|
);
|
||||||
NumBytes = a_NBT.GetDataLength(TBlockTypes);
|
NumTypeBytes = a_NBT.GetDataLength(TBlockTypes);
|
||||||
}
|
}
|
||||||
memcpy(a_BlockArea.m_BlockTypes, a_NBT.GetData(TBlockTypes), NumBytes);
|
memcpy(a_BlockArea.m_BlockTypes, a_NBT.GetData(TBlockTypes), NumTypeBytes);
|
||||||
|
|
||||||
if (AreMetasPresent)
|
if (AreMetasPresent)
|
||||||
{
|
{
|
||||||
size_t NumBytes = a_BlockArea.GetBlockCount();
|
size_t NumMetaBytes = a_BlockArea.GetBlockCount();
|
||||||
if (a_NBT.GetDataLength(TBlockMetas) < NumBytes)
|
if (a_NBT.GetDataLength(TBlockMetas) < NumMetaBytes)
|
||||||
{
|
{
|
||||||
LOG("BlockMetas truncated in the schematic file (exp %d, got %d bytes). Loading partial.",
|
LOG("BlockMetas truncated in the schematic file (exp %u, got %u bytes). Loading partial.",
|
||||||
(int)NumBytes, (int)a_NBT.GetDataLength(TBlockMetas)
|
static_cast<unsigned>(NumMetaBytes), static_cast<unsigned>(a_NBT.GetDataLength(TBlockMetas))
|
||||||
);
|
);
|
||||||
NumBytes = a_NBT.GetDataLength(TBlockMetas);
|
NumMetaBytes = a_NBT.GetDataLength(TBlockMetas);
|
||||||
}
|
}
|
||||||
memcpy(a_BlockArea.m_BlockMetas, a_NBT.GetData(TBlockMetas), NumBytes);
|
memcpy(a_BlockArea.m_BlockMetas, a_NBT.GetData(TBlockMetas), NumMetaBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -6,3 +6,4 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
|||||||
|
|
||||||
add_subdirectory(ChunkData)
|
add_subdirectory(ChunkData)
|
||||||
add_subdirectory(Network)
|
add_subdirectory(Network)
|
||||||
|
add_subdirectory(LoadablePieces)
|
||||||
|
15
tests/LoadablePieces/Bindings.h
Normal file
15
tests/LoadablePieces/Bindings.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
// Bindings.h
|
||||||
|
|
||||||
|
// Dummy include file needed for LuaState to compile successfully
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct lua_State;
|
||||||
|
|
||||||
|
int tolua_AllToLua_open(lua_State * a_LuaState);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
93
tests/LoadablePieces/CMakeLists.txt
Normal file
93
tests/LoadablePieces/CMakeLists.txt
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
cmake_minimum_required (VERSION 2.6)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/src/)
|
||||||
|
include_directories(${CMAKE_SOURCE_DIR}/lib/)
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
add_definitions(-DTEST_GLOBALS=1)
|
||||||
|
|
||||||
|
set (SHARED_SRCS
|
||||||
|
${CMAKE_SOURCE_DIR}/src/BlockArea.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Cuboid.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ChunkData.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/StringCompression.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/StringUtils.cpp
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.cpp
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/PieceGenerator.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/Prefab.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.cpp
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Noise/Noise.cpp
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/Event.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/File.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.cpp
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.cpp
|
||||||
|
${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set (SHARED_HDRS
|
||||||
|
${CMAKE_SOURCE_DIR}/src/BlockArea.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Cuboid.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/ChunkData.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Globals.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/StringCompression.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/StringUtils.h
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Bindings/LuaState.h
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/ChunkDesc.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/PieceGenerator.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/Prefab.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Generating/PrefabPiecePool.h
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/Noise/Noise.h
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/Event.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/File.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/GZipFile.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/OSSupport/StackTrace.h
|
||||||
|
|
||||||
|
${CMAKE_SOURCE_DIR}/src/WorldStorage/FastNBT.h
|
||||||
|
${CMAKE_SOURCE_DIR}/src/WorldStorage/SchematicFileSerializer.h
|
||||||
|
)
|
||||||
|
|
||||||
|
set (SRCS
|
||||||
|
LoadablePieces.cpp
|
||||||
|
Stubs.cpp
|
||||||
|
LuaState_Typedefs.inc
|
||||||
|
LuaState_Declaration.inc
|
||||||
|
Bindings.h
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||||
|
add_flags_cxx("-Wno-error=conversion -Wno-error=old-style-cast")
|
||||||
|
add_flags_cxx("-Wno-error=global-constructors")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
# Add the MSVC-specific LeakFinder sources:
|
||||||
|
list (APPEND SHARED_SRCS ${CMAKE_SOURCE_DIR}/src/LeakFinder.cpp ${CMAKE_SOURCE_DIR}/src/StackWalker.cpp)
|
||||||
|
list (APPEND SHARED_HDRS ${CMAKE_SOURCE_DIR}/src/LeakFinder.h ${CMAKE_SOURCE_DIR}/src/StackWalker.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
source_group("Shared" FILES ${SHARED_SRCS} ${SHARED_HDRS})
|
||||||
|
source_group("Sources" FILES ${SRCS})
|
||||||
|
add_executable(LoadablePieces ${SRCS} ${SHARED_SRCS} ${SHARED_HDRS})
|
||||||
|
target_link_libraries(LoadablePieces tolualib zlib)
|
||||||
|
add_test(NAME LoadablePieces-test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND LoadablePieces)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
57
tests/LoadablePieces/LoadablePieces.cpp
Normal file
57
tests/LoadablePieces/LoadablePieces.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
|
||||||
|
// LoadablePieces.cpp
|
||||||
|
|
||||||
|
// Implements the LoadablePieces test main entrypoint
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <direct.h>
|
||||||
|
#define GetCurrentFolder _getcwd
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#define GetCurrentFolder getcwd
|
||||||
|
#endif
|
||||||
|
#include "Generating/PrefabPiecePool.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int DoTest(void)
|
||||||
|
{
|
||||||
|
cPrefabPiecePool test;
|
||||||
|
auto res = test.LoadFromFile("Test.cubeset", true);
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
LOGWARNING("Loading from file \"Test.cubeset\" failed.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
LOG("Loaded %u regular pieces and %u starting pieces", static_cast<unsigned>(test.GetAllPiecesCount()), static_cast<unsigned>(test.GetStartingPiecesCount()));
|
||||||
|
|
||||||
|
// Check that we loaded all the pieces:
|
||||||
|
testassert(test.GetAllPiecesCount() == 1);
|
||||||
|
testassert(test.GetStartingPiecesCount() == 1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
// Print the current directory for reference:
|
||||||
|
char folder[FILENAME_MAX];
|
||||||
|
GetCurrentFolder(folder, sizeof(folder));
|
||||||
|
LOG("Running cPrefabPiecePool test from folder \"%s\".", folder);
|
||||||
|
|
||||||
|
// Run the test:
|
||||||
|
int res = DoTest();
|
||||||
|
LOG("cPrefabPiecePool loading test done: %s", (res == 0) ? "success" : "failure");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
4
tests/LoadablePieces/LuaState_Declaration.inc
Normal file
4
tests/LoadablePieces/LuaState_Declaration.inc
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
// LuaState_Declaration.inc
|
||||||
|
|
||||||
|
// Dummy include file needed for LuaState to compile successfully
|
19
tests/LoadablePieces/LuaState_Typedefs.inc
Normal file
19
tests/LoadablePieces/LuaState_Typedefs.inc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
// LuaState_Typedefs.inc
|
||||||
|
|
||||||
|
// Dummy include file needed for LuaState to compile successfully
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Forward-declare classes that are used in the API but never called:
|
||||||
|
struct HTTPRequest;
|
||||||
|
struct HTTPTemplateRequest;
|
||||||
|
class cPluginLua;
|
||||||
|
class cBoundingBox;
|
||||||
|
template <typename T> class cItemCallback;
|
||||||
|
class cEntity;
|
||||||
|
|
||||||
|
|
||||||
|
|
283
tests/LoadablePieces/Stubs.cpp
Normal file
283
tests/LoadablePieces/Stubs.cpp
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
|
||||||
|
// Stubs.cpp
|
||||||
|
|
||||||
|
// Implements stubs of various MCServer methods that are needed for linking but not for runtime
|
||||||
|
// This is required so that we don't bring in the entire MCServer via dependencies
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "BlockInfo.h"
|
||||||
|
#include "SelfTests.h"
|
||||||
|
#include "Bindings.h"
|
||||||
|
#include "Bindings/DeprecatedBindings.h"
|
||||||
|
#include "Bindings/ManualBindings.h"
|
||||||
|
#include "BlockEntities/BlockEntity.h"
|
||||||
|
#include "Blocks/BlockHandler.h"
|
||||||
|
#include "Generating/ChunkDesc.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// fwd:
|
||||||
|
struct lua_State;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Prototypes, needed by clang:
|
||||||
|
extern "C" int luaopen_lsqlite3(lua_State * a_LuaState);
|
||||||
|
extern "C" int luaopen_lxp(lua_State * a_LuaState);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cManualBindings::Bind(lua_State * a_LuaState)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void DeprecatedBindings::Bind(lua_State * a_LuaState)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int tolua_AllToLua_open(lua_State * a_LuaState)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" int luaopen_lsqlite3(lua_State * a_LuaState)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" int luaopen_lxp(lua_State * a_LuaState)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cBlockInfo::~cBlockInfo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockInfo::Initialize(cBlockInfo::cBlockInfoArray & a_BlockInfos)
|
||||||
|
{
|
||||||
|
// The piece-loading code uses the handlers for rotations, so we need valid handlers
|
||||||
|
// Insert dummy handlers:
|
||||||
|
for (size_t i = 0; i < ARRAYCOUNT(a_BlockInfos); i++)
|
||||||
|
{
|
||||||
|
a_BlockInfos[i].m_Handler = new cBlockHandler(static_cast<BLOCKTYPE>(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cBlockHandler::cBlockHandler(BLOCKTYPE a_BlockType)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::GetPlacementBlockTypeMeta(
|
||||||
|
cChunkInterface & a_ChunkInterface, cPlayer * a_Player,
|
||||||
|
int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace,
|
||||||
|
int a_CursorX, int a_CursorY, int a_CursorZ,
|
||||||
|
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, const sSetBlock & a_BlockChange)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::OnDestroyedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::OnPlaced(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::CanBeAt(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ, const cChunk & a_Chunk)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::CanDirtGrowGrass(NIBBLETYPE a_Meta)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::IsUseable()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::IsClickedThrough(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::DoesIgnoreBuildCollision(void)
|
||||||
|
{
|
||||||
|
return (m_BlockType == E_BLOCK_AIR);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cBlockHandler::DoesDropOnUnsuitable(void)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cBlockHandler::Check(cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface, int a_RelX, int a_RelY, int a_RelZ, cChunk & a_Chunk)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cBlockEntity * cBlockEntity::CreateByBlockType(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cSelfTests::cSelfTests(void):
|
||||||
|
m_AllowRegistering(true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cSelfTests & cSelfTests::Get(void)
|
||||||
|
{
|
||||||
|
static cSelfTests singleton;
|
||||||
|
return singleton;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cSelfTests::Register(cSelfTests::SelfTestFunction a_TestFn, const AString & a_TestName)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
154
tests/LoadablePieces/Test.cubeset
Normal file
154
tests/LoadablePieces/Test.cubeset
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
|
||||||
|
-- Test.cubeset
|
||||||
|
|
||||||
|
-- This simple cubeset file is used for testing the cPrefabPiecePool loader.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Cubeset =
|
||||||
|
{
|
||||||
|
Metadata =
|
||||||
|
{
|
||||||
|
CubesetFormatVersion = 1,
|
||||||
|
},
|
||||||
|
|
||||||
|
Pieces =
|
||||||
|
{
|
||||||
|
-- One piece with inline definition:
|
||||||
|
{
|
||||||
|
Size =
|
||||||
|
{
|
||||||
|
x = 4,
|
||||||
|
y = 4,
|
||||||
|
z = 4,
|
||||||
|
},
|
||||||
|
Hitbox =
|
||||||
|
{
|
||||||
|
MinX = 0,
|
||||||
|
MinY = 0,
|
||||||
|
MinZ = 0,
|
||||||
|
MaxX = 3,
|
||||||
|
MaxY = 3,
|
||||||
|
MaxZ = 3,
|
||||||
|
},
|
||||||
|
BlockDefinitions =
|
||||||
|
{
|
||||||
|
".: 0: 0", -- air
|
||||||
|
"a: 1: 0", -- stone
|
||||||
|
"b: 24: 0", -- sandstone
|
||||||
|
"c: 8: 0", -- water
|
||||||
|
"d: 85: 0", -- fence
|
||||||
|
"m: 19: 0", -- sponge
|
||||||
|
},
|
||||||
|
BlockData =
|
||||||
|
{
|
||||||
|
-- Level 0
|
||||||
|
"aaaa", -- 0
|
||||||
|
"aaaa", -- 1
|
||||||
|
"aaaa", -- 2
|
||||||
|
"aaaa", -- 3
|
||||||
|
|
||||||
|
-- Level 1
|
||||||
|
"bbbb", -- 0
|
||||||
|
"bccb", -- 1
|
||||||
|
"bccb", -- 2
|
||||||
|
"bbbb", -- 3
|
||||||
|
|
||||||
|
-- Level 2
|
||||||
|
"bbbb", -- 0
|
||||||
|
"bccb", -- 1
|
||||||
|
"bccb", -- 2
|
||||||
|
"bbbb", -- 3
|
||||||
|
|
||||||
|
-- Level 3
|
||||||
|
"bbbb", -- 0
|
||||||
|
"bccb", -- 1
|
||||||
|
"bccb", -- 2
|
||||||
|
"bbbb", -- 3
|
||||||
|
},
|
||||||
|
Connectors =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
Type = 2,
|
||||||
|
RelX = 2,
|
||||||
|
RelY = 2,
|
||||||
|
RelZ = 0,
|
||||||
|
Direction = 2, -- Z-
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Type = 2,
|
||||||
|
RelX = 0,
|
||||||
|
RelY = 2,
|
||||||
|
RelZ = 1,
|
||||||
|
Direction = 4, -- X-
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Type = 2,
|
||||||
|
RelX = 1,
|
||||||
|
RelY = 2,
|
||||||
|
RelZ = 3,
|
||||||
|
Direction = 3, -- Z+
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Type = 2,
|
||||||
|
RelX = 3,
|
||||||
|
RelY = 2,
|
||||||
|
RelZ = 2,
|
||||||
|
Direction = 5, -- X+
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Metadata =
|
||||||
|
{
|
||||||
|
["DefaultWeight"] = "100",
|
||||||
|
["AllowedRotations"] = "7",
|
||||||
|
["MergeStrategy"] = "msSpongePrint",
|
||||||
|
["IsStarting"] = "1",
|
||||||
|
["DepthWeight"] = "",
|
||||||
|
["ShouldExpandFloor"] = "1",
|
||||||
|
["MoveToGround"] = "1",
|
||||||
|
["AddWeightIfSame"] = "0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- One piece with external definition:
|
||||||
|
{
|
||||||
|
Hitbox =
|
||||||
|
{
|
||||||
|
MinX = 0,
|
||||||
|
MinY = 0,
|
||||||
|
MinZ = 0,
|
||||||
|
MaxX = 3,
|
||||||
|
MaxY = 3,
|
||||||
|
MaxZ = 3,
|
||||||
|
},
|
||||||
|
SchematicFileName = "Test1.schematic",
|
||||||
|
Connectors =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
Type = 2,
|
||||||
|
RelX = 2,
|
||||||
|
RelY = 2,
|
||||||
|
RelZ = 0,
|
||||||
|
Direction = 2, -- Z-
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Metadata =
|
||||||
|
{
|
||||||
|
["DefaultWeight"] = "100",
|
||||||
|
["AllowedRotations"] = "7",
|
||||||
|
["MergeStrategy"] = "msSpongePrint",
|
||||||
|
["IsStarting"] = "0",
|
||||||
|
["DepthWeight"] = "",
|
||||||
|
["ShouldExpandFloor"] = "1",
|
||||||
|
["MoveToGround"] = "0",
|
||||||
|
["AddWeightIfSame"] = "0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, -- Pieces
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
tests/LoadablePieces/Test1.schematic
Normal file
BIN
tests/LoadablePieces/Test1.schematic
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user