start of xml::Optional
This commit is contained in:
173
test/container_serialization_test.cxx
Normal file
173
test/container_serialization_test.cxx
Normal file
@@ -0,0 +1,173 @@
|
||||
/*! @file
|
||||
|
||||
@id $Id: serialization_test.cxx 31 2009-04-28 07:36:07Z $
|
||||
*/
|
||||
// 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::Serialize {
|
||||
public:
|
||||
int _int;
|
||||
unsigned _unsigned;
|
||||
bool operator<(const A& o) const {
|
||||
return _int<o._int || _int==o._int && _unsigned<o._unsigned;
|
||||
}
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
className("A");
|
||||
persist(_int, "int");
|
||||
persist(_unsigned, "unsigned");
|
||||
}
|
||||
};
|
||||
|
||||
class B: public xml::Serialize {
|
||||
public:
|
||||
long _long;
|
||||
short _short;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
className("B");
|
||||
persist(_long, "long");
|
||||
persist(_short, "short");
|
||||
}
|
||||
};
|
||||
|
||||
class B2: public B {
|
||||
public:
|
||||
double _double;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
B::initXmlMembers();
|
||||
className("B2");
|
||||
persist(_double, "double");
|
||||
}
|
||||
};
|
||||
|
||||
class C: public xml::Serialize {
|
||||
public:
|
||||
xml::Map<A, B2> _map;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
className("C");
|
||||
persist(_map, "map");
|
||||
}
|
||||
};
|
||||
|
||||
class C2: public C {
|
||||
public:
|
||||
xml::Set<std::string> _set;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
C::initXmlMembers();
|
||||
className("C2");
|
||||
persist(_set, "set");
|
||||
}
|
||||
};
|
||||
|
||||
class D: public xml::Serialize {
|
||||
public:
|
||||
xml::Vector<C2> _vector;
|
||||
protected:
|
||||
void initXmlMembers() {
|
||||
className("D");
|
||||
persist(_vector, "vector");
|
||||
}
|
||||
};
|
||||
|
||||
class ContainerSerializationTest: public CppUnit::TestFixture {
|
||||
public:
|
||||
void checkContainers() {
|
||||
// instanciate all container to find template compilation errors
|
||||
xml::Deque<int> c1;
|
||||
xml::List<int> c2;
|
||||
xml::Map<int, int> c3;
|
||||
xml::MultiMap<int, int> c4;
|
||||
xml::MultiSet<int> c5;
|
||||
//xml::PriorityQueue<int> c6;
|
||||
//xml::Queue<int> c7;
|
||||
xml::Set<int> c8;
|
||||
//xml::Stack<int> c9;
|
||||
xml::Vector<int> c10;
|
||||
// no test
|
||||
std::string file("<D>\n"
|
||||
"\t<vector>\n"
|
||||
"\t\t<C2>\n"
|
||||
"\t\t\t<map>\n"
|
||||
"\t\t\t\t<A>\n"
|
||||
"\t\t\t\t\t<int>-13</int>\n"
|
||||
"\t\t\t\t\t<unsigned>13</unsigned>\n"
|
||||
"\t\t\t\t</A>\n"
|
||||
"\t\t\t\t<B2>\n"
|
||||
"\t\t\t\t\t<long>1234567890</long>\n"
|
||||
"\t\t\t\t\t<short>123</short>\n"
|
||||
"\t\t\t\t\t<double>1.234</double>\n"
|
||||
"\t\t\t\t</B2>\n"
|
||||
"\t\t\t\t<A>\n"
|
||||
"\t\t\t\t\t<int>-1</int>\n"
|
||||
"\t\t\t\t\t<unsigned>2</unsigned>\n"
|
||||
"\t\t\t\t</A>\n"
|
||||
"\t\t\t\t<B2>\n"
|
||||
"\t\t\t\t\t<long>451236789</long>\n"
|
||||
"\t\t\t\t\t<short>43</short>\n"
|
||||
"\t\t\t\t\t<double>15.34</double>\n"
|
||||
"\t\t\t\t</B2>\n"
|
||||
"\t\t\t</map>\n"
|
||||
"\t\t\t<set>\n"
|
||||
"\t\t\t\t<item>Hello</item>\n"
|
||||
"\t\t\t\t<item>World</item>\n"
|
||||
"\t\t\t</set>\n"
|
||||
"\t\t</C2>\n"
|
||||
"\t\t<C2>\n"
|
||||
"\t\t\t<map/>\n"
|
||||
"\t\t\t<set/>\n"
|
||||
"\t\t</C2>\n"
|
||||
"\t</vector>\n"
|
||||
"</D>");
|
||||
std::stringstream ss(file);
|
||||
D d;
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("<D>\n"
|
||||
"\t<vector>\n"
|
||||
"\t\t<C2>\n"
|
||||
"\t\t\t<map>\n"
|
||||
"\t\t\t\t<A>\n"
|
||||
"\t\t\t\t\t<int/>\n"
|
||||
"\t\t\t\t\t<unsigned/>\n"
|
||||
"\t\t\t\t</A>\n"
|
||||
"\t\t\t\t<B2>\n"
|
||||
"\t\t\t\t\t<long/>\n"
|
||||
"\t\t\t\t\t<short/>\n"
|
||||
"\t\t\t\t\t<double/>\n"
|
||||
"\t\t\t\t</B2>\n"
|
||||
"\t\t\t</map>\n"
|
||||
"\t\t\t<set>\n"
|
||||
"\t\t\t\t<item/>\n"
|
||||
"\t\t\t</set>\n"
|
||||
"\t\t</C2>\n"
|
||||
"\t</vector>\n"
|
||||
"</D>"),
|
||||
d.schema());
|
||||
CPPUNIT_ASSERT_NO_THROW(d.loadXml(ss));
|
||||
std::stringstream ss2;
|
||||
CPPUNIT_ASSERT_NO_THROW(d.saveXml(ss2));
|
||||
CPPUNIT_ASSERT_EQUAL(file, ss2.str());
|
||||
}
|
||||
CPPUNIT_TEST_SUITE(ContainerSerializationTest);
|
||||
CPPUNIT_TEST(checkContainers);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
};
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(ContainerSerializationTest);
|
||||
|
||||
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;
|
||||
}
|
@@ -7,11 +7,12 @@ AM_CXXFLAGS += -I ${top_srcdir}/src
|
||||
AM_LDFLAGS = -L${top_builddir}/src
|
||||
LDADD = -lcppunit -lxml-cxx
|
||||
|
||||
check_PROGRAMS = xml_test serialization_test
|
||||
check_PROGRAMS = xml_test serialization_test container_serialization_test
|
||||
TESTS=${check_PROGRAMS}
|
||||
|
||||
xml_test_SOURCES = xml_test.cxx
|
||||
serialization_test_SOURCES = serialization_test.cxx
|
||||
container_serialization_test_SOURCES = container_serialization_test.cxx
|
||||
|
||||
CLEANFILES =
|
||||
MAINTAINERCLEANFILES = makefile.in
|
||||
|
Reference in New Issue
Block a user