00001
00033 #include "linden_common.h"
00034
00035 #include <tut/tut.h>
00036 #include "lltut.h"
00037
00038 #include "llcontrol.h"
00039 #include "llsdserialize.h"
00040
00041 namespace tut
00042 {
00043
00044 struct control_group
00045 {
00046 LLControlGroup* mCG;
00047 LLString mTestConfigDir;
00048 LLString mTestConfigFile;
00049 static bool mListenerFired;
00050 control_group()
00051 {
00052 mCG = new LLControlGroup;
00053 LLUUID random;
00054 random.generate();
00055
00056 std::ostringstream oStr;
00057 oStr << "/tmp/llcontrol-test-" << random << "/";
00058 mTestConfigDir = oStr.str();
00059 mTestConfigFile = mTestConfigDir + "settings.xml";
00060 LLFile::mkdir(mTestConfigDir.c_str());
00061 LLSD config;
00062 config["TestSetting"]["Comment"] = "Dummy setting used for testing";
00063 config["TestSetting"]["Persist"] = 1;
00064 config["TestSetting"]["Type"] = "U32";
00065 config["TestSetting"]["Value"] = 12;
00066 writeSettingsFile(config);
00067 }
00068 ~control_group()
00069 {
00070
00071 delete mCG;
00072 }
00073 void writeSettingsFile(const LLSD& config)
00074 {
00075 llofstream file(mTestConfigFile.c_str());
00076 if (file.is_open())
00077 {
00078 LLSDSerialize::toPrettyXML(config, file);
00079 }
00080 file.close();
00081 }
00082 static bool handleListenerTest(const LLSD& newvalue)
00083 {
00084 control_group::mListenerFired = true;
00085 return true;
00086 }
00087 };
00088
00089 bool control_group::mListenerFired = false;
00090
00091 typedef test_group<control_group> control_group_test;
00092 typedef control_group_test::object control_group_t;
00093 control_group_test tut_control_group("control_group");
00094
00095
00096 template<> template<>
00097 void control_group_t::test<1>()
00098 {
00099 int results = mCG->loadFromFile(mTestConfigFile.c_str());
00100 ensure("number of settings", (results == 1));
00101 ensure("value of setting", (mCG->getU32("TestSetting") == 12));
00102 }
00103
00104
00105 template<> template<>
00106 void control_group_t::test<2>()
00107 {
00108 int results = mCG->loadFromFile(mTestConfigFile.c_str());
00109 mCG->setU32("TestSetting", 13);
00110 ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13);
00111 LLControlGroup test_cg;
00112 LLString temp_test_file = (mTestConfigDir + "setting_llsd_temp.xml");
00113 mCG->saveToFile(temp_test_file.c_str(), TRUE);
00114 results = test_cg.loadFromFile(temp_test_file.c_str());
00115 ensure("number of changed settings loaded", (results == 1));
00116 ensure("value of changed settings loaded", (test_cg.getU32("TestSetting") == 13));
00117 }
00118
00119
00120 template<> template<>
00121 void control_group_t::test<3>()
00122 {
00123 int results = mCG->loadFromFile(mTestConfigFile.c_str());
00124 LLControlVariable* control = mCG->getControl("TestSetting");
00125 LLSD new_value = 13;
00126 control->setValue(new_value, FALSE);
00127 ensure_equals("value of changed setting", mCG->getU32("TestSetting"), 13);
00128 LLControlGroup test_cg;
00129 LLString temp_test_file = (mTestConfigDir + "setting_llsd_persist_temp.xml");
00130 mCG->saveToFile(temp_test_file.c_str(), TRUE);
00131 results = test_cg.loadFromFile(temp_test_file.c_str());
00132
00133 ensure("number of non-persisted changed settings loaded", (results == 0));
00134 }
00135
00136
00137 template<> template<>
00138 void control_group_t::test<4>()
00139 {
00140 int results = mCG->loadFromFile(mTestConfigFile.c_str());
00141 ensure("number of settings", (results == 1));
00142 mCG->getControl("TestSetting")->getSignal()->connect(boost::bind(&this->handleListenerTest, _1));
00143 mCG->setU32("TestSetting", 13);
00144 ensure("listener fired on changed setting", mListenerFired);
00145 }
00146
00147 }