From d1c95742ddd83899bb35051de9d731d38aba80a4 Mon Sep 17 00:00:00 2001 From: E14 <1640391+E14@users.noreply.github.com> Date: Sun, 22 Sep 2019 22:57:54 +0200 Subject: Add ProtocolBlockTypePalette (#4391) --- .../ProtocolBlockTypePaletteTest.cpp | 168 +++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp (limited to 'tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp') diff --git a/tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp b/tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp new file mode 100644 index 000000000..948fd2219 --- /dev/null +++ b/tests/ProtocolBlockTypePalette/ProtocolBlockTypePaletteTest.cpp @@ -0,0 +1,168 @@ +// ProtocolBlockTypePaletteTest.cpp + +#include +#include +#include +#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(); +) -- cgit v1.2.3