// JobPreferences_t.cxx #include "dial_job/JobPreferences.h" #include #include #include #include "dataset_util/XmlElement.h" #include "dataset_util/Text.h" #include "dataset_util/DtdRegistry.h" #include "dataset_id/SimpleUniqueIdGenerator.h" using std::string; using std::cout; using std::endl; using dial::JobPreferencesId; using dial::JobPreferences; void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } int JobPreferences_t() { msg("Create ID generator"); SimpleUniqueIdGenerator::set_as_default(); SimpleUniqueIdGenerator:: create_collection(JobPreferences::id_context(), 11, 101); msg("XML name"); cout << JobPreferences::xml_name() << endl; assert( string(JobPreferences::xml_name()).size() ); msg("DTD"); cout << JobPreferences::dtd() << endl; assert( JobPreferences::dtd().size() ); cout << DtdRegistry::instance("dial") << endl; assert( DtdRegistry::instance("dial"). has_type(JobPreferences::xml_name()) ); msg("Check default"); cout << JobPreferences::default_instance() << endl; assert( JobPreferences::default_instance().is_locked() ); msg("Create preferences"); JobPreferences prefs; cout << prefs << endl; assert( prefs.is_valid() ); assert( ! prefs.id().is_valid() ); assert( prefs.is_unlocked() ); assert( ! prefs.is_locked() ); msg("Check no entries"); assert( prefs.names().size() == 0 ); // Create objects. Text txt("text1"); txt.append("Text 1, line 1"); txt.append("Text 1, line 2"); txt.append("Text 1, line 3"); XmlElement* pxtxt = txt.xml(); assert( pxtxt != 0 ); msg("Add entries"); string sxtxt = pxtxt->to_xml_text(); cout << sxtxt << endl; assert( sxtxt.size() ); assert( prefs.insert("first_text", sxtxt) == 0 ); assert( prefs.insert("second_text", "Text two") == 0 ); assert( prefs.size() == 2 ); assert( prefs.names().size() == 2 ); assert( prefs.names().front() == "first_text" ); assert( prefs.names().back() == "second_text" ); msg("Attempt unlocked write to xml"); const XmlElement* pxprfu = prefs.xml(); assert( pxprfu == 0 ); msg("Unlocked copy"); JobPreferences prefs2 = prefs; assert( ! prefs2.is_valid() ); msg("Lock"); prefs.lock(); cout << prefs << endl; assert( prefs.is_locked() ); assert( prefs.id().is_valid() ); assert( prefs.id().is_global() ); msg("Locked copy"); JobPreferences prefs3 = prefs; assert( prefs3.is_valid() ); assert( prefs3.is_locked() ); assert( prefs3.names() == prefs.names() ); msg("Extract."); assert( prefs.has("first_text") ); assert( prefs.has("second_text") ); assert( ! prefs.has("third_text") ); string sxtxt1 = prefs.extract("first_text"); cout << "> first_text:" << endl; cout << sxtxt1 << endl; assert( sxtxt1 == sxtxt ); cout << "> second_text:" << endl; string txt2 = prefs.extract("second_text"); cout << txt2 << endl; assert( txt2 == "Text two" ); assert( prefs.extract("third_text") == "" ); msg("Attempt to modify locked object"); assert( prefs.insert("third_text", "somevalue") != 0 ); assert( prefs.size() == 2 ); msg("Write to xml"); const XmlElement* pxprf = prefs.xml(); assert( pxprf != 0 ); cout << *pxprf << endl; msg("Read back from XML"); { JobPreferences prfx(*pxprf); cout << prfx << endl; assert( prfx.is_valid() ); assert( prfx.id() == prefs.id() ); assert( prfx.names() == prefs.names() ); assert( prfx.extract("first_text") == prefs.extract("first_text") ); assert( prfx.extract("second_text") == "Text two" ); assert( prfx.id() == prefs.id() ); } msg("Clone"); JobPreferences* pprfc = prefs.clone(); assert( pprfc != 0 ); cout << *pprfc << endl; assert( pprfc->is_valid() ); assert( ! pprfc->is_locked() ); assert( pprfc->size() == 2 ); assert( pprfc->has("first_text") ); assert( pprfc->has("second_text") ); assert( pprfc->extract("first_text") == prefs.extract("first_text") ); assert( pprfc->extract("second_text") == "Text two" ); return 0; } #ifdef CTEST_MAIN int main() { return JobPreferences_t(); } #endif