diff options
| author | Adam Moss <moss@lindenlab.com> | 2009-10-16 13:28:31 +0000 | 
|---|---|---|
| committer | Adam Moss <moss@lindenlab.com> | 2009-10-16 13:28:31 +0000 | 
| commit | d999da2072f7d8c6a2e86f4c40420f5112d44b0f (patch) | |
| tree | 6bcc4cb1c843eef60fcf57157e016eacde799c2f | |
| parent | 90a8ec369f5a57bdcadf8941b3c4febd583c19e9 (diff) | |
DEV-41407 resurrect and fix LLControlGroup test, convert it to a llxml integration test.
| -rw-r--r-- | indra/llxml/CMakeLists.txt | 22 | ||||
| -rw-r--r-- | indra/llxml/tests/llcontrol_test.cpp | 147 | 
2 files changed, 169 insertions, 0 deletions
| diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt index 3f7714f505..fbcfade383 100644 --- a/indra/llxml/CMakeLists.txt +++ b/indra/llxml/CMakeLists.txt @@ -44,3 +44,25 @@ target_link_libraries( llxml      llmath      ${EXPAT_LIBRARIES}      ) + +# tests + +# unit tests + +SET(llxml_TEST_SOURCE_FILES +  # none yet! +  ) +LL_ADD_PROJECT_UNIT_TESTS(llxml "${llxml_TEST_SOURCE_FILES}") + +# integration tests + +#    set(TEST_DEBUG on) +set(test_libs +  ${LLXML_LIBRARIES} +  ${WINDOWS_LIBRARIES} +  ${LLMATH_LIBRARIES} +  ${LLCOMMON_LIBRARIES} +  ) + +LL_ADD_INTEGRATION_TEST(llcontrol "" "${test_libs}") + diff --git a/indra/llxml/tests/llcontrol_test.cpp b/indra/llxml/tests/llcontrol_test.cpp new file mode 100644 index 0000000000..cf1f24ac5f --- /dev/null +++ b/indra/llxml/tests/llcontrol_test.cpp @@ -0,0 +1,147 @@ +/**  + * @file llcontrol_tut.cpp + * @date   February 2008 + * @brief control group unit tests + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + *  + * Copyright (c) 2008-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 "llsdserialize.h" + +#include "../llcontrol.h" + +#include "../test/lltut.h" + +namespace tut +{ + +	struct control_group +	{ +		LLControlGroup* mCG; +		std::string mTestConfigDir; +		std::string mTestConfigFile; +		static bool mListenerFired; +		control_group() +		{ +			mCG = new LLControlGroup("foo"); +			LLUUID random; +			random.generate(); +			// generate temp dir +			std::ostringstream oStr; +			oStr << "/tmp/llcontrol-test-" << random << "/"; +			mTestConfigDir = oStr.str(); +			mTestConfigFile = mTestConfigDir + "settings.xml"; +			LLFile::mkdir(mTestConfigDir); +			LLSD config; +			config["TestSetting"]["Comment"] = "Dummy setting used for testing"; +			config["TestSetting"]["Persist"] = 1; +			config["TestSetting"]["Type"] = "U32"; +			config["TestSetting"]["Value"] = 12; +			writeSettingsFile(config); +		} +		~control_group() +		{ +			//Remove test files +			delete mCG; +		} +		void writeSettingsFile(const LLSD& config) +		{ +			llofstream file(mTestConfigFile); +			if (file.is_open()) +			{ +				LLSDSerialize::toPrettyXML(config, file); +			} +			file.close(); +		} +		static bool handleListenerTest() +		{ +			control_group::mListenerFired = true; +			return true; +		} +	}; + +	bool control_group::mListenerFired = false; + +	typedef test_group<control_group> control_group_test; +	typedef control_group_test::object control_group_t; +	control_group_test tut_control_group("control_group"); + +	//load settings from files - LLSD +	template<> template<> +	void control_group_t::test<1>() +	{ +		int results = mCG->loadFromFile(mTestConfigFile.c_str()); +		ensure("number of settings", (results == 1)); +		ensure("value of setting", (mCG->getU32("TestSetting") == 12)); +	} + +	//save settings to files +	template<> template<> +	void control_group_t::test<2>() +	{ +		int results = mCG->loadFromFile(mTestConfigFile.c_str()); +		mCG->setU32("TestSetting", 13); +		ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13); +		LLControlGroup test_cg("foo2"); +		std::string temp_test_file = (mTestConfigDir + "setting_llsd_temp.xml"); +		mCG->saveToFile(temp_test_file.c_str(), TRUE); +		results = test_cg.loadFromFile(temp_test_file.c_str()); +		ensure("number of changed settings loaded", (results == 1)); +		ensure("value of changed settings loaded", (test_cg.getU32("TestSetting") == 13)); +	} +    +	//priorities +	template<> template<> +	void control_group_t::test<3>() +	{ +		int results = mCG->loadFromFile(mTestConfigFile.c_str()); +		LLControlVariable* control = mCG->getControl("TestSetting"); +		LLSD new_value = 13; +		control->setValue(new_value, FALSE); +		ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13); +		LLControlGroup test_cg("foo3"); +		std::string temp_test_file = (mTestConfigDir + "setting_llsd_persist_temp.xml"); +		mCG->saveToFile(temp_test_file.c_str(), TRUE); +		results = test_cg.loadFromFile(temp_test_file.c_str()); +		//If we haven't changed any settings, then we shouldn't have any settings to load +		ensure("number of non-persisted changed settings loaded", (results == 0)); +	} + +	//listeners +	template<> template<> +	void control_group_t::test<4>() +	{ +		int results = mCG->loadFromFile(mTestConfigFile.c_str()); +		ensure("number of settings", (results == 1)); +		mCG->getControl("TestSetting")->getSignal()->connect(boost::bind(&this->handleListenerTest)); +		mCG->setU32("TestSetting", 13); +		ensure("listener fired on changed setting", mListenerFired);	    +	} + +} | 
