summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/BlockTypeRegistry/BlockTypePaletteTest.cpp148
-rw-r--r--tests/BlockTypeRegistry/CMakeLists.txt12
-rw-r--r--tests/BlockTypeRegistry/test.btp.json (renamed from tests/ProtocolBlockTypePalette/test.btp.json)0
-rw-r--r--tests/CMakeLists.txt1
-rw-r--r--tests/ProtocolBlockTypePalette/CMakeLists.txt47
-rw-r--r--tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp168
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();
-)