better serialization, but test does not work actually

This commit is contained in:
Marc Wäckerlin
2009-04-23 15:10:21 +00:00
parent a9ad45ad4d
commit 37fd5e8695
5 changed files with 473 additions and 149 deletions

109
test/serialization_test.cxx Normal file
View File

@@ -0,0 +1,109 @@
/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <xml-cxx/xml.hxx>
#include <cppunit/TestFixture.h>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
class A: public xml::Serialization {
public:
int _anInteger;
bool _aBool;
double _aDouble;
std::string _aString;
std::string _anotherString;
unsigned long _aLong;
protected:
void initXmlMembers() {
className("A");
persist(_anInteger, "anInteger");
persist(_aBool, "aBool");
persist(_aDouble, "aDouble");
persist(_aString, "aString");
persist(_anotherString, "anotherString");
persist(_aLong, "aLong");
}
};
class SerializationTest: public CppUnit::TestFixture {
public:
std::string _file;
A _a;
void setUp() {
_a._anInteger = 15;
_a._aBool = true;
_a._aDouble = 123.456;
_a._aString = "Hello World";
_a._anotherString = "This is another Text";
_a._aLong = 4123674622;
try {
std::stringstream ss;
_a.saveXml(ss);
_file = ss.str();
} catch (...) {}
}
void memberDeclaration() {
// This is more a compile time test than a runtime test.
A a;
a._anInteger = 15;
CPPUNIT_ASSERT_EQUAL(15, a._anInteger);
a._aString = "Hello World";
CPPUNIT_ASSERT_EQUAL(std::string("Hello World"), a._aString);
std::stringstream ss;
}
void store() {
{
std::stringstream ss;
CPPUNIT_ASSERT_NO_THROW(_a.saveXml(ss));
CPPUNIT_ASSERT_EQUAL(std::string("<A>\n"
"\t<anInteger>15</anInteger>\n"
"\t<aBool>1</aBool>\n"
"\t<aDouble>123.456</aDouble>\n"
"\t<aString>Hello World</aString>\n"
"\t<anotherString>This is"
" another Text</anotherString>\n"
"\t<aLong>4123674622</aLong>\n"
"</A>"),
ss.str());
} { // again - initialisation of A should be done only once
std::stringstream ss;
CPPUNIT_ASSERT_NO_THROW(_a.saveXml(ss));
CPPUNIT_ASSERT_EQUAL(_file, ss.str());
}
}
void restore() {
A a;
std::stringstream ss(_file);
CPPUNIT_ASSERT(_file.size()>0);
CPPUNIT_ASSERT_EQUAL(_file, ss.str());
CPPUNIT_ASSERT_NO_THROW(a.loadXml(ss));
CPPUNIT_ASSERT_EQUAL(15, a._anInteger);
CPPUNIT_ASSERT_EQUAL(true, a._aBool);
CPPUNIT_ASSERT_EQUAL(123.456, a._aDouble);
CPPUNIT_ASSERT_EQUAL(std::string("Hello World"), a._aString);
CPPUNIT_ASSERT_EQUAL(std::string("This is another Text"),
a._anotherString);
CPPUNIT_ASSERT_EQUAL(4123674622ul, a._aLong);
}
CPPUNIT_TEST_SUITE(SerializationTest);
CPPUNIT_TEST(memberDeclaration);
CPPUNIT_TEST(store);
CPPUNIT_TEST(restore);
CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION(SerializationTest);
int main() try {
CppUnit::TextUi::TestRunner runner;
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
return runner.run() ? 0 : 1;
} catch (std::exception& e) {
std::cerr<<"***Exception: "<<e.what()<<std::endl;
return 1;
}