summaryrefslogtreecommitdiffstats
path: root/tests/BlockTypeRegistry/BlockTypePaletteTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/BlockTypeRegistry/BlockTypePaletteTest.cpp')
-rw-r--r--tests/BlockTypeRegistry/BlockTypePaletteTest.cpp148
1 files changed, 148 insertions, 0 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();
)