llcontrol_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llcontrol_tut.cpp
  3.  * @date   February 2008
  4.  * @brief control group unit tests
  5.  *
  6.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2008-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. #include "linden_common.h"
  34. #include "llsdserialize.h"
  35. #include "../llcontrol.h"
  36. #include "../test/lltut.h"
  37. namespace tut
  38. {
  39. struct control_group
  40. {
  41. LLControlGroup* mCG;
  42. std::string mTestConfigDir;
  43. std::string mTestConfigFile;
  44. static bool mListenerFired;
  45. control_group()
  46. {
  47. mCG = new LLControlGroup("foo");
  48. LLUUID random;
  49. random.generate();
  50. // generate temp dir
  51. std::ostringstream oStr;
  52. #ifdef LL_WINDOWS
  53. char* tmp_dir = getenv("TMP");
  54. if(tmp_dir)
  55. {
  56. oStr << tmp_dir << "/llcontrol-test-" << random << "/";
  57. }
  58. else
  59. {
  60. oStr << "c:/tmp/llcontrol-test-" << random << "/";
  61. }
  62. #else
  63. oStr << "/tmp/llcontrol-test-" << random << "/";
  64. #endif
  65. mTestConfigDir = oStr.str();
  66. mTestConfigFile = mTestConfigDir + "settings.xml";
  67. LLFile::mkdir(mTestConfigDir);
  68. LLSD config;
  69. config["TestSetting"]["Comment"] = "Dummy setting used for testing";
  70. config["TestSetting"]["Persist"] = 1;
  71. config["TestSetting"]["Type"] = "U32";
  72. config["TestSetting"]["Value"] = 12;
  73. writeSettingsFile(config);
  74. }
  75. ~control_group()
  76. {
  77. //Remove test files
  78. delete mCG;
  79. }
  80. void writeSettingsFile(const LLSD& config)
  81. {
  82. llofstream file(mTestConfigFile);
  83. if (file.is_open())
  84. {
  85. LLSDSerialize::toPrettyXML(config, file);
  86. }
  87. file.close();
  88. }
  89. static bool handleListenerTest()
  90. {
  91. control_group::mListenerFired = true;
  92. return true;
  93. }
  94. };
  95. bool control_group::mListenerFired = false;
  96. typedef test_group<control_group> control_group_test;
  97. typedef control_group_test::object control_group_t;
  98. control_group_test tut_control_group("control_group");
  99. //load settings from files - LLSD
  100. template<> template<>
  101. void control_group_t::test<1>()
  102. {
  103. int results = mCG->loadFromFile(mTestConfigFile.c_str());
  104. ensure("number of settings", (results == 1));
  105. ensure("value of setting", (mCG->getU32("TestSetting") == 12));
  106. }
  107. //save settings to files
  108. template<> template<>
  109. void control_group_t::test<2>()
  110. {
  111. int results = mCG->loadFromFile(mTestConfigFile.c_str());
  112. mCG->setU32("TestSetting", 13);
  113. ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13);
  114. LLControlGroup test_cg("foo2");
  115. std::string temp_test_file = (mTestConfigDir + "setting_llsd_temp.xml");
  116. mCG->saveToFile(temp_test_file.c_str(), TRUE);
  117. results = test_cg.loadFromFile(temp_test_file.c_str());
  118. ensure("number of changed settings loaded", (results == 1));
  119. ensure("value of changed settings loaded", (test_cg.getU32("TestSetting") == 13));
  120. }
  121.    
  122. //priorities
  123. template<> template<>
  124. void control_group_t::test<3>()
  125. {
  126. int results = mCG->loadFromFile(mTestConfigFile.c_str());
  127. LLControlVariable* control = mCG->getControl("TestSetting");
  128. LLSD new_value = 13;
  129. control->setValue(new_value, FALSE);
  130. ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13);
  131. LLControlGroup test_cg("foo3");
  132. std::string temp_test_file = (mTestConfigDir + "setting_llsd_persist_temp.xml");
  133. mCG->saveToFile(temp_test_file.c_str(), TRUE);
  134. results = test_cg.loadFromFile(temp_test_file.c_str());
  135. //If we haven't changed any settings, then we shouldn't have any settings to load
  136. ensure("number of non-persisted changed settings loaded", (results == 0));
  137. }
  138. //listeners
  139. template<> template<>
  140. void control_group_t::test<4>()
  141. {
  142. int results = mCG->loadFromFile(mTestConfigFile.c_str());
  143. ensure("number of settings", (results == 1));
  144. mCG->getControl("TestSetting")->getSignal()->connect(boost::bind(&this->handleListenerTest));
  145. mCG->setU32("TestSetting", 13);
  146. ensure("listener fired on changed setting", mListenerFired);    
  147. }
  148. }