diff options
| author | Adam Moss <moss@lindenlab.com> | 2009-10-15 16:43:12 +0000 | 
|---|---|---|
| committer | Adam Moss <moss@lindenlab.com> | 2009-10-15 16:43:12 +0000 | 
| commit | 226c08130d6648bc53b25f45d2ec2a5d7b9f8977 (patch) | |
| tree | 2cf033612a8269e7f54ee07e5a98cbf0ecf07e82 | |
| parent | 423f5b0078d813a14759f9671c11aedadc3a2d78 (diff) | |
DEV-41343 lljoint unit test - resurrected - this was previously disabled (and old-style monolithic tut)
| -rw-r--r-- | indra/llcharacter/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | indra/llcharacter/tests/lljoint_test.cpp | 246 | ||||
| -rw-r--r-- | indra/test/CMakeLists.txt | 1 | 
3 files changed, 256 insertions, 1 deletions
| diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt index 612229d16b..85e3f97092 100644 --- a/indra/llcharacter/CMakeLists.txt +++ b/indra/llcharacter/CMakeLists.txt @@ -75,3 +75,13 @@ set_source_files_properties(${llcharacter_HEADER_FILES}  list(APPEND llcharacter_SOURCE_FILES ${llcharacter_HEADER_FILES})  add_library (llcharacter ${llcharacter_SOURCE_FILES}) + + +# Add tests +include(LLAddBuildTest) +# UNIT TESTS +SET(llcharacter_TEST_SOURCE_FILES +  lljoint.cpp +  ) +LL_ADD_PROJECT_UNIT_TESTS(llcharacter "${llcharacter_TEST_SOURCE_FILES}") + diff --git a/indra/llcharacter/tests/lljoint_test.cpp b/indra/llcharacter/tests/lljoint_test.cpp new file mode 100644 index 0000000000..e43e164dd1 --- /dev/null +++ b/indra/llcharacter/tests/lljoint_test.cpp @@ -0,0 +1,246 @@ +/** + * @file lljoint_tut.cpp + * @author Adroit + * @date 2007-03 + * @brief lljoint test cases. + * + * $LicenseInfo:firstyear=2007&license=viewergpl$ + *  + * Copyright (c) 2007-2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "linden_common.h" +#include "m4math.h" +#include "v3math.h" + +#include "../lljoint.h" + +#include "../test/lltut.h" + + +namespace tut +{ +	struct lljoint_data +	{ +	}; +	typedef test_group<lljoint_data> lljoint_test; +	typedef lljoint_test::object lljoint_object; +	tut::lljoint_test lljoint_testcase("lljoint"); + +	template<> template<> +	void lljoint_object::test<1>() +	{ +		LLJoint lljoint; +		LLJoint* jnt = lljoint.getParent(); +		ensure("getParent() failed ", (NULL == jnt)); +		ensure("getRoot() failed ", (&lljoint == lljoint.getRoot())); +	} + +	template<> template<> +	void lljoint_object::test<2>() +	{ +		std::string str = "LLJoint"; +		LLJoint parent(str), child; +		child.setup(str, &parent); +		LLJoint* jnt = child.getParent(); +		ensure("setup() failed ", (&parent == jnt)); +	} + +	template<> template<> +	void lljoint_object::test<3>() +	{ +		LLJoint parent, child; +		std::string str = "LLJoint"; +		child.setup(str, &parent); +		LLJoint* jnt = parent.findJoint(str); +		ensure("findJoint() failed ", (&child == jnt)); +	} + +	template<> template<> +	void lljoint_object::test<4>() +	{ +		LLJoint parent; +		std::string str1 = "LLJoint", str2; +		parent.setName(str1); +		str2 = parent.getName(); +		ensure("setName() failed ", (str1 == str2)); +	} + +	template<> template<> +	void lljoint_object::test<5>() +	{ +		LLJoint lljoint; +		LLVector3 vec3(2.3f,30.f,10.f); +		lljoint.setPosition(vec3); +		LLVector3 pos = lljoint.getPosition(); +		ensure("setPosition()/getPosition() failed ", (vec3 == pos)); +	} + +	template<> template<> +	void lljoint_object::test<6>() +	{ +		LLJoint lljoint; +		LLVector3 vec3(2.3f,30.f,10.f); +		lljoint.setWorldPosition(vec3); +		LLVector3 pos = lljoint.getWorldPosition(); +		ensure("1:setWorldPosition()/getWorldPosition() failed ", (vec3 == pos)); +		LLVector3 lastPos = lljoint.getLastWorldPosition(); +		ensure("2:getLastWorldPosition failed ", (vec3 == lastPos)); +	} +	 +	template<> template<> +	void lljoint_object::test<7>() +	{ +		LLJoint lljoint("LLJoint"); +		LLQuaternion q(2.3f,30.f,10.f,1.f); +		lljoint.setRotation(q); +		LLQuaternion rot = lljoint.getRotation(); +		ensure("setRotation()/getRotation() failed ", (q == rot)); +	} +	template<> template<> +	void lljoint_object::test<8>() +	{ +		LLJoint lljoint("LLJoint"); +		LLQuaternion q(2.3f,30.f,10.f,1.f); +		lljoint.setWorldRotation(q); +		LLQuaternion rot = lljoint.getWorldRotation(); +		ensure("1:setWorldRotation()/getWorldRotation() failed ", (q == rot)); +		LLQuaternion lastRot = lljoint.getLastWorldRotation(); +		ensure("2:getLastWorldRotation failed ", (q == lastRot)); +	} + +	template<> template<> +	void lljoint_object::test<9>() +	{ +		LLJoint lljoint; +		LLVector3 vec3(2.3f,30.f,10.f); +		lljoint.setScale(vec3); +		LLVector3 scale = lljoint.getScale(); +		ensure("setScale()/getScale failed ", (vec3 == scale)); +	} + +	template<> template<> +	void lljoint_object::test<10>() +	{ +		LLJoint lljoint("LLJoint"); +		LLMatrix4 mat; +		mat.setIdentity(); +		lljoint.setWorldMatrix(mat);//giving warning setWorldMatrix not correctly implemented; +		LLMatrix4 mat4 = lljoint.getWorldMatrix(); +		ensure("setWorldMatrix()/getWorldMatrix failed ", (mat4 == mat)); +	} + +	template<> template<> +	void lljoint_object::test<11>() +	{ +		LLJoint lljoint("parent"); +		S32 joint_num = 12; +		lljoint.setJointNum(joint_num); +		S32 jointNum = 	lljoint.getJointNum(); +		ensure("setJointNum()/getJointNum failed ", (jointNum == joint_num)); +	} + +	template<> template<> +	void lljoint_object::test<12>() +	{ +		LLJoint lljoint; +		LLVector3 vec3(2.3f,30.f,10.f); +		lljoint.setSkinOffset(vec3); +		LLVector3 offset = lljoint.getSkinOffset(); +		ensure("1:setSkinOffset()/getSkinOffset() failed ", (vec3 == offset)); +	} + +	template<> template<> +	void lljoint_object::test<13>() +	{ +		LLJoint lljointgp("gparent"); +		LLJoint lljoint("parent"); +		LLJoint lljoint1("child1"); +		lljoint.addChild(&lljoint1); +		LLJoint lljoint2("child2"); +		lljoint.addChild(&lljoint2); +		LLJoint lljoint3("child3"); +		lljoint.addChild(&lljoint3); + +		LLJoint* jnt = NULL; +		jnt = lljoint2.getParent(); +		ensure("addChild() failed ", (&lljoint == jnt)); +		LLJoint* jnt1 = lljoint.findJoint("child3"); +		ensure("findJoint() failed ", (&lljoint3 == jnt1)); +		lljoint.removeChild(&lljoint3); +		LLJoint* jnt2 = lljoint.findJoint("child3"); +		ensure("removeChild() failed ", (NULL == jnt2)); + +		lljointgp.addChild(&lljoint); +		ensure("GetParent() failed ", (&lljoint== lljoint2.getParent())); +		ensure("getRoot() failed ", (&lljointgp == lljoint2.getRoot())); + +		ensure("getRoot() failed ", &lljoint1 == lljoint.findJoint("child1")); + +		lljointgp.removeAllChildren(); +		// parent removed from grandparent - so should not be able to locate child +		ensure("removeAllChildren() failed ", (NULL == lljointgp.findJoint("child1"))); +		// it should still exist in parent though +		ensure("removeAllChildren() failed ", (&lljoint1 == lljoint.findJoint("child1"))); +	} + +	template<> template<> +	void lljoint_object::test<14>() +	{ +		LLJoint lljointgp("gparent"); +		 +		LLJoint llparent1("parent1"); +		LLJoint llparent2("parent2"); + +		LLJoint llchild("child1"); +		LLJoint lladoptedchild("child2"); +		llparent1.addChild(&llchild); +		llparent1.addChild(&lladoptedchild); + +		llparent2.addChild(&lladoptedchild); +		ensure("1. addChild failed to remove prior parent", lladoptedchild.getParent() == &llparent2); +		ensure("2. addChild failed to remove prior parent", llparent1.findJoint("child2") == NULL); +	} + + +	/* +		Test cases for the following not added. They perform operations  +		on underlying LLXformMatrix	and LLVector3 elements which have +		been unit tested separately.  +		Unit Testing these functions will basically require re-implementing +		logic of these function in the test case itself + +		1) void WorldMatrixChildren(); +        2) void updateWorldMatrixParent(); +        3) void updateWorldPRSParent(); +        4) void updateWorldMatrix(); +        5) LLXformMatrix *getXform() { return &mXform; } +        6) void setConstraintSilhouette(LLDynamicArray<LLVector3>& silhouette); +        7) void clampRotation(LLQuaternion old_rot, LLQuaternion new_rot); + +	*/ +} + diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt index 52b370873f..ff68b2d68a 100644 --- a/indra/test/CMakeLists.txt +++ b/indra/test/CMakeLists.txt @@ -42,7 +42,6 @@ set(test_SOURCE_FILES      llhttpnode_tut.cpp      llinventoryparcel_tut.cpp      lliohttpserver_tut.cpp -    lljoint_tut.cpp      llmime_tut.cpp      llmessageconfig_tut.cpp      llmodularmath_tut.cpp | 
