better serialization, but test does not work actually
This commit is contained in:
		
							
								
								
									
										109
									
								
								test/serialization_test.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								test/serialization_test.cxx
									
									
									
									
									
										Normal 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; | ||||
|  } | ||||
		Reference in New Issue
	
	Block a user