diff options
Diffstat (limited to '')
-rw-r--r-- | tests/BlockTypeRegistry/BlockTypePaletteTest.cpp | 148 | ||||
-rw-r--r-- | tests/BlockTypeRegistry/CMakeLists.txt | 12 | ||||
-rw-r--r-- | tests/BlockTypeRegistry/test.btp.json (renamed from tests/ProtocolBlockTypePalette/test.btp.json) | 0 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/ProtocolBlockTypePalette/CMakeLists.txt | 47 | ||||
-rw-r--r-- | tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp | 168 |
6 files changed, 158 insertions, 218 deletions
diff --git a/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp b/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp index 1337c7dc3..dddf80348 100644 --- a/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp +++ b/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp @@ -123,10 +123,158 @@ static void testTransformWithFallback() +/** Tests that loading a simple JSON palette succeeds. */ +static void testLoadSimpleSuccess(void) +{ + LOG("Testing loading a simple JSON palette"); + + BlockTypePalette palette; + + auto example = "{\"Metadata\":{\"ProtocolBlockTypePaletteVersion\":1}, \"Palette\":[{\ + \"props\": {\ + \"foo\": \"bar\"\ + }, \ + \"name\": \"b\", \ + \"id\": \"0\"\ + }]}"; + + palette.loadFromString(example); + TEST_EQUAL(palette.maybeIndex("b", BlockState({{"foo", "bar"}})), (std::make_pair<UInt32, bool>(0, true))); + TEST_EQUAL(palette.maybeIndex("b", BlockState({{"foo", "baz"}})), (std::make_pair<UInt32, bool>(0, false))); + TEST_EQUAL(palette.maybeIndex("a", BlockState({{"foo", "bar"}})), (std::make_pair<UInt32, bool>(0, false))); +} + + + + + +static void testLoadErrors(void) +{ + LOG("Testing palette load error reporting."); + + BlockTypePalette palette; + TEST_THROWS(palette.loadFromString(""), BlockTypePalette::LoadFailedException); + TEST_THROWS(palette.loadFromString("[]"), BlockTypePalette::LoadFailedException); + TEST_THROWS(palette.loadFromString("a = {}"), BlockTypePalette::LoadFailedException); + TEST_THROWS(palette.loadFromString("{x = 1}"), BlockTypePalette::LoadFailedException); // Lua style + TEST_THROWS(palette.loadFromString("$#^%&"), BlockTypePalette::LoadFailedException); +} + + + + + +static void testLoadComplex1(void) +{ + LOG("Testing loading a complex palette (1)"); + BlockTypePalette palette; + auto str = "{\"Metadata\":{\"ProtocolBlockTypePaletteVersion\":1}, \"Palette\":[{\ + \"props\": {\ + \"foo\": \"bar\", \ + \"moo\": \"baz\"\ + }, \ + \"id\": \"0\", \ + \"name\": \"b\"\ + }, {\ + \"props\": {\ + \"foo\": \"baz\", \ + \"moo\": \"bar\"\ + }, \ + \"id\": \"1\", \ + \"name\": \"b\"\ + }, {\ + \"props\": {\ + \"foo\": \"baz\", \ + \"moo\": \"bar\"\ + }, \ + \"id\": \"1001\", \ + \"name\": \"b\"\ + }]}"; + // Note: The palette has a duplicate entry with differrent IDs, the latter ID wins + palette.loadFromString(str); + TEST_EQUAL(palette.maybeIndex("b", {{"foo", "bar"}}).second, false); + TEST_EQUAL(palette.maybeIndex("b", {{"foo", "bar"}, {"moo", "baz"}}), (std::make_pair<UInt32, bool>(0, true))); + TEST_EQUAL(palette.maybeIndex("b", {{"foo", "baz"}, {"moo", "bar"}}), (std::make_pair<UInt32, bool>(1001, true))); + TEST_EQUAL(palette.maybeIndex("c", {{"foo", "baz"}, {"moo", "bar"}}).second, false); +} + + + + + +static void testLoadComplex2(void) +{ + LOG("Testing loading a complex palette (2)"); + BlockTypePalette palette; + auto str = "{\"Metadata\":{\"ProtocolBlockTypePaletteVersion\":1}, \"Palette\":[{\ + \"id\": \"0\", \ + \"name\": \"a\"\ + }, {\ + \"id\": \"1\", \ + \"name\": \"b\"\ + }]}"; + palette.loadFromString(str); + TEST_EQUAL(palette.maybeIndex("a", BlockState()), (std::make_pair<UInt32, bool>(0, true))); + TEST_EQUAL(palette.maybeIndex("b", BlockState()), (std::make_pair<UInt32, bool>(1, true))); +} + + + + + +static void testLoadFromFile1(void) +{ + LOG("Testing loading a palette from file \"test.btp.json\""); + BlockTypePalette palette; + palette.loadFromString(cFile::ReadWholeFile("test.btp.json")); + + TEST_EQUAL(palette.maybeIndex("minecraft:air", BlockState()), (std::make_pair<UInt32, bool>(0, true))); + TEST_EQUAL(palette.maybeIndex("minecraft:stone", BlockState()), (std::make_pair<UInt32, bool>(1, true))); + TEST_EQUAL( + palette.maybeIndex( + "minecraft:dark_oak_leaves", + BlockState({{"persistent", "false"}, {"distance", "6"}}) + ), + (std::make_pair<UInt32, bool>(225, true)) + ); + TEST_EQUAL( + palette.maybeIndex( + "minecraft:dark_oak_leaves", + BlockState({{"persistent", "false"}}) + ).second, + false + ); +} + + + + + +static void testLoadFromFile2(void) +{ + LOG("Testing loading a palette from file \"base.btp.json\" (version 1.13)"); + BlockTypePalette palette; + palette.loadFromString(cFile::ReadWholeFile("base.btp.json")); + + TEST_EQUAL(palette.maybeIndex("minecraft:air", BlockState()), (std::make_pair<UInt32, bool>(0, true))); + TEST_EQUAL(palette.maybeIndex("minecraft:stone", BlockState()), (std::make_pair<UInt32, bool>(1, true))); + TEST_EQUAL(palette.maybeIndex("minecraft:dirt", BlockState()), (std::make_pair<UInt32, bool>(10, true))); +} + + + + + IMPLEMENT_TEST_MAIN("BlockTypePalette", testBasic(); testTransformAddMissing(); testTransformWithFallback(); + testLoadSimpleSuccess(); + testLoadErrors(); + testLoadComplex1(); + testLoadComplex2(); + testLoadFromFile1(); + testLoadFromFile2(); ) diff --git a/tests/BlockTypeRegistry/CMakeLists.txt b/tests/BlockTypeRegistry/CMakeLists.txt index 379158d5c..beadc8af3 100644 --- a/tests/BlockTypeRegistry/CMakeLists.txt +++ b/tests/BlockTypeRegistry/CMakeLists.txt @@ -28,8 +28,9 @@ add_executable(BlockTypePaletteTest ${CMAKE_SOURCE_DIR}/src/BlockTypePalette.cpp ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.cpp + ${CMAKE_SOURCE_DIR}/src/OSSupport/File.cpp ) -target_link_libraries(BlockTypePaletteTest fmt::fmt) +target_link_libraries(BlockTypePaletteTest fmt::fmt jsoncpp_lib_static) # BlockTypeRegistryTest: Verify that the BlockTypeRegistry class works as intended: add_executable(BlockTypeRegistryTest @@ -53,7 +54,14 @@ add_executable(PalettedBlockAreaTest ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp ${CMAKE_SOURCE_DIR}/src/OSSupport/CriticalSection.cpp ) -target_link_libraries(PalettedBlockAreaTest fmt::fmt) +target_link_libraries(PalettedBlockAreaTest fmt::fmt jsoncpp_lib_static) + +# Extra files for BlockTypePalette test: +file (COPY + test.btp.json + ../../Server/Protocol/1.13/base.btp.json + DESTINATION ./ +) diff --git a/tests/ProtocolBlockTypePalette/test.btp.json b/tests/BlockTypeRegistry/test.btp.json index 264e56185..264e56185 100644 --- a/tests/ProtocolBlockTypePalette/test.btp.json +++ b/tests/BlockTypeRegistry/test.btp.json diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2ea55af25..74e4323ec 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,4 +19,3 @@ add_subdirectory(Network) add_subdirectory(OSSupport) add_subdirectory(SchematicFileSerializer) add_subdirectory(UUID) -add_subdirectory(ProtocolBlockTypePalette) diff --git a/tests/ProtocolBlockTypePalette/CMakeLists.txt b/tests/ProtocolBlockTypePalette/CMakeLists.txt deleted file mode 100644 index 43c2df676..000000000 --- a/tests/ProtocolBlockTypePalette/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -cmake_minimum_required(VERSION 3.0.2) -enable_testing() -add_definitions(-DTEST_GLOBALS=1) - -include_directories(SYSTEM "../../lib/jsoncpp/include") -include_directories(${CMAKE_SOURCE_DIR}/src/) - - -add_definitions(-DTEST_GLOBALS=1) - -set (SHARED_SRCS - ${CMAKE_SOURCE_DIR}/src/Protocol/ProtocolBlockTypePalette.cpp - ${CMAKE_SOURCE_DIR}/src/BlockState.cpp - ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp -) - -set (SHARED_HDRS - ../TestHelpers.h - ${CMAKE_SOURCE_DIR}/src/Protocol/ProtocolBlockTypePalette.h - ${CMAKE_SOURCE_DIR}/src/BlockState.h - ${CMAKE_SOURCE_DIR}/src/StringUtils.h -) - -set (SRCS - ProtocolBlockTypePaletteTest.cpp -) - -file (COPY - test.btp.json - ../../Server/Protocol/1.13/base.btp.json - DESTINATION ./) - -source_group("Shared" FILES ${SHARED_SRCS} ${SHARED_HDRS}) -source_group("Sources" FILES ${SRCS}) -add_executable(ProtocolBlockTypePaletteTest-exe ${SRCS} ${SHARED_SRCS} ${SHARED_HDRS}) -target_link_libraries(ProtocolBlockTypePaletteTest-exe fmt::fmt jsoncpp_lib_static) -add_test(NAME ProtocolBlockTypePaletteTest-test COMMAND ProtocolBlockTypePaletteTest-exe) - - - - - -# Put the projects into solution folders (MSVC): -set_target_properties( - ProtocolBlockTypePaletteTest-exe - PROPERTIES FOLDER Tests -) diff --git a/tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp b/tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp deleted file mode 100644 index 948fd2219..000000000 --- a/tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp +++ /dev/null @@ -1,168 +0,0 @@ -// ProtocolBlockTypePaletteTest.cpp - -#include <string> -#include <fstream> -#include <streambuf> -#include "Globals.h" - -#include "Protocol/ProtocolBlockTypePalette.h" - -#include "../TestHelpers.h" - - - - - -static void TestSuccess(void) -{ - LOG("Test TestSuccess"); - ProtocolBlockTypePalette palette; - - auto example = "{\"Metadata\":{\"ProtocolBlockTypePaletteVersion\":1}, \"Palette\":[{\ - \"props\": {\ - \"foo\": \"bar\"\ - }, \ - \"name\": \"b\", \ - \"id\": \"0\"\ - }]}"; - - palette.clear(); - TEST_TRUE(palette.loadFromString(example)); - TEST_EQUAL(palette.index("b", BlockState({{"foo", "bar"}})), 0); - TEST_EQUAL(palette.index("b", BlockState({{"foo", "baz"}})), ProtocolBlockTypePalette::NOT_FOUND); - TEST_EQUAL(palette.index("a", BlockState({{"foo", "bar"}})), ProtocolBlockTypePalette::NOT_FOUND); -} - - - - - -static void TestErrors(void) -{ - LOG("Test TestErrors"); - ProtocolBlockTypePalette palette; - TEST_FALSE(palette.loadFromString("")); - - palette.clear(); - TEST_FALSE(palette.loadFromString("[]")); - - palette.clear(); - TEST_FALSE(palette.loadFromString("a = {}")); - - palette.clear(); - TEST_FALSE(palette.loadFromString("{x = 1}")); // Lua style - - palette.clear(); - TEST_FALSE(palette.loadFromString("$#^%&")); -} - - - - - -static void TestComplex1(void) -{ - LOG("Test TestComplex1"); - ProtocolBlockTypePalette palette; - auto str = "{\"Metadata\":{\"ProtocolBlockTypePaletteVersion\":1}, \"Palette\":[{\ - \"props\": {\ - \"foo\": \"bar\", \ - \"moo\": \"baz\"\ - }, \ - \"id\": \"0\", \ - \"name\": \"b\"\ - }, {\ - \"props\": {\ - \"foo\": \"baz\", \ - \"moo\": \"bar\"\ - }, \ - \"id\": \"1\", \ - \"name\": \"b\"\ - }, {\ - \"props\": {\ - \"foo\": \"baz\", \ - \"moo\": \"bar\"\ - }, \ - \"id\": \"1001\", \ - \"name\": \"b\"\ - }]}"; - TEST_TRUE(palette.loadFromString(str)); // This should print info message about duplicate ID - TEST_EQUAL(palette.index("b", BlockState({{"foo","bar"}})), ProtocolBlockTypePalette::NOT_FOUND); - TEST_EQUAL(palette.index("b", BlockState({{"foo","bar"}, {"moo","baz"}})), 0); - TEST_EQUAL(palette.index("b", BlockState({{"foo","baz"}, {"moo","bar"}})), 1); - TEST_EQUAL(palette.index("c", BlockState({{"foo","baz"}, {"moo","bar"}})), ProtocolBlockTypePalette::NOT_FOUND); -} - - - - - -static void TestComplex2(void) -{ - LOG("Test TestComplex2"); - ProtocolBlockTypePalette palette; - auto str = "{\"Metadata\":{\"ProtocolBlockTypePaletteVersion\":1}, \"Palette\":[{\ - \"id\": \"0\", \ - \"name\": \"a\"\ - }, {\ - \"id\": \"1\", \ - \"name\": \"b\"\ - }]}"; - TEST_TRUE(palette.loadFromString(str)); - TEST_EQUAL(palette.index("a", BlockState()), 0); - TEST_EQUAL(palette.index("b", BlockState({})), 1); -} - - - - - -static void TestFile(void) -{ - LOG("Test TestFile"); - std::ifstream f("base.btp.json"); - ProtocolBlockTypePalette palette; - TEST_TRUE(palette.loadFromStream(f)); - - // This is a bit problematic - the only permanently fixed block Id is air... - TEST_EQUAL(palette.index("minecraft:air", BlockState()), 0); - TEST_NOTEQUAL(palette.index("minecraft:stone", BlockState()), ProtocolBlockTypePalette::NOT_FOUND); - TEST_NOTEQUAL(palette.index("minecraft:dirt", BlockState()), ProtocolBlockTypePalette::NOT_FOUND); -} - - - - - -static void TestFile2(void) -{ - LOG("Test TestFile2"); - std::ifstream f("test.btp.json"); - ProtocolBlockTypePalette palette; - TEST_TRUE(palette.loadFromStream(f)); - - TEST_EQUAL(palette.index("minecraft:air", BlockState({})), 0); - TEST_EQUAL(palette.index("minecraft:stone", BlockState()), 1); - TEST_EQUAL(palette.index("minecraft:stone", BlockState()), 1); - TEST_EQUAL(palette.index( - "minecraft:dark_oak_leaves", - BlockState({{"persistent", "false"}, {"distance", "6"}}) - ), 225); - TEST_EQUAL(palette.index( - "minecraft:dark_oak_leaves", - BlockState({{"persistent", "false"}}) - ), ProtocolBlockTypePalette::NOT_FOUND); -} - - - - - -IMPLEMENT_TEST_MAIN("ProtocolBlockTypePaletteTest", - TestSuccess(); - TestErrors(); - TestComplex1(); - TestComplex2(); - TestFile(); - TestFile2(); -) |