llcontrol_tut.cpp

Go to the documentation of this file.
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                         // generate temp dir
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                         //Remove test files
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         //load settings from files - LLSD
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         //save settings to files
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         //priorities
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                 //If we haven't changed any settings, then we shouldn't have any settings to load
00133                 ensure("number of non-persisted changed settings loaded", (results == 0));
00134         }
00135 
00136         //listeners
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 }

Generated on Fri May 16 08:34:29 2008 for SecondLife by  doxygen 1.5.5