// ContentIdList_t.cxx #include "dataset_id/ContentIdList.h" #include #include #include "dataset_util/XmlElement.h" using std::cout; using std::endl; using std::vector; namespace { void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } } int ContentIdList_t() { msg("Update table."); assert( ContentId::register_id( 123, "MyClass1").is_valid() ); assert( ContentId::register_id( 246, "MyClass2").is_valid() ); assert( ContentId::register_id( 369, "MyClass3").is_valid() ); assert( ContentId::register_id( 482, "MyClass4").is_valid() ); ContentId::display(cout); ContentId cid1("MyClass1"); ContentId cid2("MyClass2", "mykey2"); ContentId cid3("MyClass3"); ContentId cid3b("MyClass3"); ContentId cid4("MyClass4"); msg("Fill list"); ContentIdList cids; cout << cids << endl; assert( cids.size() == 0 ); cids.insert(cid2); cout << cids << endl; assert( cids.size() == 1 ); cids.insert(cid2); cout << cids << endl; assert( cids.size() == 1 ); cids.insert(cid3); cout << cids << endl; assert( cids.size() == 2 ); cids.insert(cid1); cout << cids << endl; assert( cids.size() == 3 ); msg("Iterate and check order"); vector vcids; vcids.push_back(cid1); vcids.push_back(cid2); vcids.push_back(cid3); vector::const_iterator ivcid = vcids.begin(); for ( ContentIdList::const_iterator icid=cids.begin(); icid!=cids.end(); ++icid ) { cout << *icid << endl; assert( *icid == *ivcid ); ++ivcid; } msg("Contains"); { assert( cids.contains(ContentId("MyClass1")) ); assert( ! cids.contains(ContentId("MyClass4")) ); } msg("Contains a list"); { cout << cids << endl; ContentIdList cids2; cout << cids2 << endl; assert( cids.contains(cids2)); cids2.insert(cid2); cout << cids2 << endl; assert( cids.contains(cids2)); cids2.insert(cid1); cout << cids2 << endl; assert( cids.contains(cids2)); cids2.insert(cid3); cout << cids2 << endl; assert( cids.contains(cids2)); cids2.insert(cid4); cout << cids2 << endl; assert( ! cids.contains(cids2)); } msg("Select none."); { ContentIdList cids1 = cids; cout << cids1 << endl; assert( cids1.size() == 3 ); ContentIdList cids2; cout << cids2 << endl; cids1.select(cids2); cout << cids1 << endl; assert( cids1.size() == 0 ); } msg("Select 1."); { ContentIdList cids1 = cids; cout << cids1 << endl; ContentIdList cids2; cids2.insert(cid2); cout << cids2 << endl; cids1.select(cids2); cout << cids1 << endl; assert( cids1.size() == 1 ); } msg("Select 2."); { ContentIdList cids1 = cids; cout << cids1 << endl; ContentIdList cids2; cids2.insert(cid2); cids2.insert(cid3); cids2.insert(cid3b); cout << cids2 << endl; cids1.select(cids2); cout << cids1 << endl; assert( cids1.size() == 2 ); } msg("Select all."); { ContentIdList cids1 = cids; cout << cids1 << endl; ContentIdList cids2 = cids; cids1.select(cids2); cout << cids1 << endl; assert( cids1.size() == 3 ); } msg("XML name."); cout << ContentIdList::xml_name() << endl; msg("DTD"); cout << ContentIdList::dtd() << endl; assert( ContentIdList::dtd().size() > 0 ); msg("Write to XML"); const XmlElement* pele = cids.xml(); cout << *pele << endl; msg("Read XML"); { ContentIdList cids2(*pele); cout << cids2 << endl; assert(cids2.size() == 3 ); assert( cids2 == cids ); } msg("Read XML child"); { XmlElement xtest("Test"); xtest.add_child(cids.xml()); cout << xtest << endl; ContentIdList cids2(xtest, true); cout << cids2 << endl; assert( cids2 == cids ); } msg("Read XML child -- NOT"); { XmlElement xtest("Test"); xtest.add_child(cids.xml()); cout << xtest << endl; ContentIdList cids2(xtest, false); cout << cids2 << endl; assert( cids2.size() == 0 ); } msg("Read XML with too many children"); { XmlElement xtest("Test"); xtest.add_child(cids.xml()); xtest.add_child(cids.xml()); cout << xtest << endl; ContentIdList cids2(xtest, true); cout << cids2 << endl; assert( cids2.size() == 0 ); } msg("Read XML child"); { XmlElement xtest("Test"); XmlElement* pchild = new XmlElement("TestChild"); pchild->add_child(cids.xml()); xtest.add_child(pchild); cout << xtest << endl; ContentIdList cids2(xtest, true); cout << cids2 << endl; assert( cids2.size() == 0 ); } msg("All tests passed."); return 0; } #ifdef CTEST_MAIN int main() { return ContentIdList_t(); } #endif