From 8f38f8255cce29bccdc4adf16b2244650029e758 Mon Sep 17 00:00:00 2001
From: kwolekr <kwolekr@minetest.net>
Date: Sun, 3 May 2015 22:19:15 -0400
Subject: [PATCH] Tests: Add ObjDef unittests

---
 build/android/jni/Android.mk |   1 +
 src/unittest/CMakeLists.txt  |   1 +
 src/unittest/test_objdef.cpp | 107 +++++++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+)
 create mode 100644 src/unittest/test_objdef.cpp

diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk
index c00d054b2..e58cb82c8 100644
--- a/build/android/jni/Android.mk
+++ b/build/android/jni/Android.mk
@@ -220,6 +220,7 @@ LOCAL_SRC_FILES :=                                \
 		jni/src/unittest/test_mapnode.cpp         \
 		jni/src/unittest/test_nodedef.cpp         \
 		jni/src/unittest/test_noise.cpp           \
+		jni/src/unittest/test_objdef.cpp          \
 		jni/src/unittest/test_profiler.cpp        \
 		jni/src/unittest/test_random.cpp          \
 		jni/src/unittest/test_serialization.cpp   \
diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt
index 932eb860e..ccb046bb9 100644
--- a/src/unittest/CMakeLists.txt
+++ b/src/unittest/CMakeLists.txt
@@ -8,6 +8,7 @@ set (UNITTEST_SRCS
 	${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/test_noise.cpp
+	${CMAKE_CURRENT_SOURCE_DIR}/test_objdef.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/test_profiler.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/test_random.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/test_serialization.cpp
diff --git a/src/unittest/test_objdef.cpp b/src/unittest/test_objdef.cpp
new file mode 100644
index 000000000..ddb3bc60d
--- /dev/null
+++ b/src/unittest/test_objdef.cpp
@@ -0,0 +1,107 @@
+/*
+Minetest
+Copyright (C) 2010-2014 kwolekr, Ryan Kwolek <kwolekr@minetest.net>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#include "test.h"
+
+#include "exceptions.h"
+#include "mapgen.h"
+
+
+class TestObjDef : public TestBase {
+public:
+	TestObjDef() { TestManager::registerTestModule(this); }
+	const char *getName() { return "TestObjDef"; }
+
+	void runTests(IGameDef *gamedef);
+
+	void testHandles();
+	void testAddGetSetClear();
+};
+
+static TestObjDef g_test_instance;
+
+void TestObjDef::runTests(IGameDef *gamedef)
+{
+	TEST(testHandles);
+	TEST(testAddGetSetClear);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void TestObjDef::testHandles()
+{
+	u32 uid = 0;
+	u32 index = 0;
+	ObjDefType type = OBJDEF_GENERIC;
+
+	ObjDefHandle handle = ObjDefManager::createHandle(9530, OBJDEF_ORE, 47);
+
+	UASSERTEQ(ObjDefHandle, 0xAF507B55, handle);
+
+	UASSERT(ObjDefManager::decodeHandle(handle, &index, &type, &uid));
+
+	UASSERTEQ(u32, 9530, index);
+	UASSERTEQ(u32, 47, uid);
+	UASSERTEQ(ObjDefHandle, OBJDEF_ORE, type);
+}
+
+
+void TestObjDef::testAddGetSetClear()
+{
+	ObjDefManager testmgr(NULL, OBJDEF_GENERIC);
+	ObjDefHandle hObj0, hObj1, hObj2, hObj3;
+	ObjDef *obj0, *obj1, *obj2, *obj3;
+
+	UASSERTEQ(ObjDefType, testmgr.getType(), OBJDEF_GENERIC);
+
+	obj0 = new ObjDef;
+	obj0->name = "foobar";
+	hObj0 = testmgr.add(obj0);
+	UASSERT(hObj0 != OBJDEF_INVALID_HANDLE);
+	UASSERTEQ(u32, obj0->index, 0);
+
+	obj1 = new ObjDef;
+	obj1->name = "FooBaz";
+	hObj1 = testmgr.add(obj1);
+	UASSERT(hObj1 != OBJDEF_INVALID_HANDLE);
+	UASSERTEQ(u32, obj1->index, 1);
+
+	obj2 = new ObjDef;
+	obj2->name = "asdf";
+	hObj2 = testmgr.add(obj2);
+	UASSERT(hObj2 != OBJDEF_INVALID_HANDLE);
+	UASSERTEQ(u32, obj2->index, 2);
+
+	obj3 = new ObjDef;
+	obj3->name = "foobaz";
+	hObj3 = testmgr.add(obj3);
+	UASSERT(hObj3 == OBJDEF_INVALID_HANDLE);
+
+	UASSERTEQ(size_t, testmgr.getNumObjects(), 3);
+
+	UASSERT(testmgr.get(hObj0) == obj0);
+	UASSERT(testmgr.getByName("FOOBAZ") == obj1);
+
+	UASSERT(testmgr.set(hObj0, obj3) == obj0);
+	UASSERT(testmgr.get(hObj0) == obj3);
+	delete obj0;
+
+	testmgr.clear();
+	UASSERTEQ(size_t, testmgr.getNumObjects(), 0);
+}