// ContentId_t.cxx #include "dataset_id/ContentId.h" #include #include "dataset_util/XmlElement.h" #include "dataset_util/DtdRegistry.h" using std::cout; using std::endl; namespace { void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } } int ContentId_t() { msg("Check table."); ContentId::display(cout); ContentId::size_type count = ContentId::size(); assert( count > 0 ); msg("Update table."); assert( ! ContentId::register_id(2345, "MyClass").is_valid() ); assert( ContentId::register_id( 123, "MyClass").is_valid() ); ++count; assert( ContentId::register_id( 246, "MyClass2").is_valid() ); ++count; assert( ! ContentId::register_id( 1, "MyClass").is_valid() ); assert( ! ContentId::register_id( 123, "YourClass").is_valid() ); ContentId::display(cout); assert( ContentId::size() == count ); msg("Default constructor."); { ContentId cid; cout << cid << endl; assert( ! cid.is_valid() ); } msg("Index constructor."); { ContentId cid(123); cout << cid << endl; assert( cid.index() == 123 ); assert( cid.name() == "MyClass" ); } msg("Name constructor."); { ContentId cid("MyClass"); cout << cid << endl; assert( cid.index() == 123 ); assert( cid.name() == "MyClass" ); } msg("Ordering and equality"); { ContentId cid0("MyClass"); assert( cid0.is_valid() ); ContentId cid1("MyClass"); assert( cid1.is_valid() ); ContentId cid2("MyClass2"); assert( cid2.is_valid() ); assert( cid1 < cid2 ); assert( ! ( cid1 < cid0 ) ); assert( ! ( cid2 < cid1 ) ); assert( cid1 == cid0 ); assert( ! (cid1 == cid2) ); ContentId cid3("MyClass2", "key1"); assert( cid3.is_valid() ); ContentId cid4("MyClass2", "key2"); assert( cid4.is_valid() ); assert( cid3 < cid4 ); assert( cid2 < cid3 ); } msg("XML name."); cout << ContentId::xml_name() << endl; msg("DTD"); cout << ContentId::dtd() << endl; assert( ContentId::dtd().size() > 0 ); assert( DtdRegistry::instance("dataset").has_type("ContentId") ); msg("Write xml"); { ContentId cid("MyClass", "mykey"); cout << cid << endl; const XmlElement* pele = cid.xml(); cout << *pele << endl; msg("Read xml"); ContentId cid2(*pele); cout << cid2 << endl; assert( cid == cid2 ); delete pele; } msg("Write templated xml"); { ContentId cid("MyClass2", "mykey"); cout << cid << endl; const XmlElement* pele = cid.xml(); cout << *pele << endl; msg("Read xml"); ContentId cid2(*pele); cout << cid2 << endl; assert( cid == cid2 ); delete pele; } msg("Write xml w/o key"); { ContentId cid("MyClass"); cout << cid << endl; const XmlElement* pele = cid.xml(); cout << *pele << endl; msg("Read xml"); ContentId cid2(*pele); cout << cid2 << endl; assert( cid == cid2 ); delete pele; } msg("All tests passed."); return 0; } #ifdef CTEST_MAIN int main() { return ContentId_t(); } #endif