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