import
This commit is contained in:
		
							
								
								
									
										290
									
								
								test/xml_test.cxx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								test/xml_test.cxx
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,290 @@ | ||||
| #include <xml.hxx> | ||||
| #include <cppunit/TestFixture.h> | ||||
| #include <cppunit/ui/text/TestRunner.h> | ||||
| #include <cppunit/extensions/HelperMacros.h> | ||||
| #include <cppunit/extensions/TestFactoryRegistry.h> | ||||
| #include <memory> | ||||
|  | ||||
| class NodeTest: public CppUnit::TestFixture {  | ||||
|   public: | ||||
|     void constructorName() { | ||||
|       xml::Node t("test"); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("test"), t.name()); | ||||
|     } | ||||
|     void clone() { | ||||
|       xml::Node t("test"); | ||||
|       std::auto_ptr<xml::Node> p(t.clone()); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("test"), p->name()); | ||||
|     } | ||||
|     void shift() { | ||||
|       xml::Node t("test"); | ||||
|       t<<xml::Node("yxz"); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("yxz"), t["yxz"].name()); | ||||
|     } | ||||
|     void out() { | ||||
|       xml::Node t("test"); | ||||
|       { std::stringstream ss; | ||||
|         t.out(ss); | ||||
|         CPPUNIT_ASSERT_EQUAL(std::string("<test/>"), ss.str()); | ||||
|       } | ||||
|       { std::stringstream ss; | ||||
|         t<<xml::Node("ABC"); | ||||
|         t.out(ss); | ||||
|         CPPUNIT_ASSERT_EQUAL(std::string("<test>\n\t<ABC/>\n</test>"), | ||||
|                              ss.str()); | ||||
|       } | ||||
|     } | ||||
|     void operatorParenses() { | ||||
|       xml::Node t("test"); | ||||
|       t<<xml::Node("yxz"); | ||||
|       CPPUNIT_ASSERT_EQUAL(true, t("yxz")); | ||||
|       CPPUNIT_ASSERT_EQUAL(false, t("zxy")); | ||||
|     } | ||||
|     void operatorBrackets() { | ||||
|       xml::Node t("test"); | ||||
|       t<<xml::Node("yxz"); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("yxz"), t["yxz"].name()); | ||||
|       CPPUNIT_ASSERT_THROW(t["zxy"], xml::access_error); | ||||
|     } | ||||
|     void in() { | ||||
|       //! @todo | ||||
|     } | ||||
|     void text() { | ||||
|       xml::Node t("test"); | ||||
|       CPPUNIT_ASSERT_THROW(t.text("Hallo Welt"), xml::tag_expected); | ||||
|     } | ||||
|     void textOut() { | ||||
|       xml::Node t("test"); | ||||
|       t<<xml::String("yxc").text("Hello")<<xml::String("dfg").text("World"); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("HelloWorld"), t.text()); | ||||
|     } | ||||
|     void dereference() { | ||||
|       xml::Node t("test"); | ||||
|       t<<xml::Node("yxc")<<xml::Node("dfg"); | ||||
|       CPPUNIT_ASSERT_EQUAL(t.text(), *t);       | ||||
|     } | ||||
|     void assign() { | ||||
|       xml::Node t("test"); | ||||
|       CPPUNIT_ASSERT_THROW((t="Hallo Welt"), xml::tag_expected); | ||||
|     } | ||||
|     CPPUNIT_TEST_SUITE(NodeTest); | ||||
|     CPPUNIT_TEST(constructorName); | ||||
|     CPPUNIT_TEST(clone); | ||||
|     CPPUNIT_TEST(operatorBrackets); | ||||
|     CPPUNIT_TEST(shift); | ||||
|     CPPUNIT_TEST(out); | ||||
|     CPPUNIT_TEST(operatorParenses); | ||||
|     CPPUNIT_TEST(in); | ||||
|     CPPUNIT_TEST(text); | ||||
|     CPPUNIT_TEST(textOut); | ||||
|     CPPUNIT_TEST(dereference); | ||||
|     CPPUNIT_TEST(assign); | ||||
|     CPPUNIT_TEST_SUITE_END(); | ||||
| }; | ||||
| CPPUNIT_TEST_SUITE_REGISTRATION(NodeTest); | ||||
|  | ||||
| class StringTest: public CppUnit::TestFixture {  | ||||
|   public: | ||||
|     void constructorName() { | ||||
|       xml::String t("test"); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("test"), t.name()); | ||||
|     } | ||||
|     void clone() { | ||||
|       xml::String t("test"); | ||||
|       std::auto_ptr<xml::Node> p(t.clone()); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("test"), p->name()); | ||||
|     } | ||||
|     void shift() { | ||||
|       xml::String t("test"); | ||||
|       CPPUNIT_ASSERT_THROW(t<<xml::String("yxz"), xml::cannot_have_children); | ||||
|     } | ||||
|     void out() { | ||||
|       xml::String t("test"); | ||||
|       { std::stringstream ss; | ||||
|         t.out(ss); | ||||
|         CPPUNIT_ASSERT_EQUAL(std::string("<test/>"), ss.str()); | ||||
|       } | ||||
|       { std::stringstream ss; | ||||
|         (t="ABC").out(ss); | ||||
|         CPPUNIT_ASSERT_EQUAL(std::string("<test>ABC</test>"), | ||||
|                              ss.str()); | ||||
|       } | ||||
|     } | ||||
|     void operatorParenses() { | ||||
|       xml::String t("test"); | ||||
|       CPPUNIT_ASSERT_EQUAL(false, t("zxy")); | ||||
|     } | ||||
|     void operatorBrackets() { | ||||
|       xml::String t("test"); | ||||
|       CPPUNIT_ASSERT_THROW(t["zxy"], xml::access_error); | ||||
|     } | ||||
|     void text() { | ||||
|       xml::String t("test"); | ||||
|       t.text("Hallo Welt"); | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("Hallo Welt"), t.text());       | ||||
|     } | ||||
|     void textOut() { | ||||
|       xml::String t("test"); | ||||
|       t="yxc"; | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("yxc"), t.text()); | ||||
|     } | ||||
|     void dereference() { | ||||
|       xml::String t("test"); | ||||
|       t="dfg"; | ||||
|       CPPUNIT_ASSERT_EQUAL(t.text(), *t);       | ||||
|     } | ||||
|     void assign() { | ||||
|       xml::String t1("test"), t2(t1); | ||||
|       t1="Hallo Welt"; | ||||
|       t2.text("Hallo Welt"); | ||||
|       CPPUNIT_ASSERT_EQUAL(t1.text(), t2.text());       | ||||
|     } | ||||
|     CPPUNIT_TEST_SUITE(StringTest); | ||||
|     CPPUNIT_TEST(constructorName); | ||||
|     CPPUNIT_TEST(clone); | ||||
|     CPPUNIT_TEST(operatorBrackets); | ||||
|     CPPUNIT_TEST(shift); | ||||
|     CPPUNIT_TEST(out); | ||||
|     CPPUNIT_TEST(operatorParenses); | ||||
|     CPPUNIT_TEST(text); | ||||
|     CPPUNIT_TEST(textOut); | ||||
|     CPPUNIT_TEST(dereference); | ||||
|     CPPUNIT_TEST(assign); | ||||
|     CPPUNIT_TEST_SUITE_END(); | ||||
| }; | ||||
| CPPUNIT_TEST_SUITE_REGISTRATION(StringTest); | ||||
|  | ||||
| class FunTest: public CppUnit::TestFixture {  | ||||
|   public: | ||||
|     void playing() { | ||||
|       std::string contents("<html>\n\t<head>\n\t\t<title/>\n\t</head>\n" | ||||
|                            "\t<body>\n\t\t<h1 class=\"main\">Title</h1>" | ||||
|                            "\n\t\t<p>First Paragraf.</p>\n\t\t<p/>\n" | ||||
|                            "\t\t<h2/>\n\t\t<p/>\n\t\t<p/>\n\t</body>\n</html>"); | ||||
|       xml::Attributes attr; | ||||
|       attr["class"]="main"; | ||||
|       xml::Node test(xml::Node("html") // example | ||||
|                      <<(xml::Node("head") | ||||
|                         <<xml::String("title")) | ||||
|                      <<(xml::Node("body") | ||||
|                         <<(xml::String("h1") | ||||
|                            <<(xml::Attributes() | ||||
|                               <<(xml::Attr("class")="main"))) | ||||
|                         <<xml::String("p") | ||||
|                         <<xml::String("p") | ||||
|                         <<xml::String("h2") | ||||
|                         <<xml::String("p") | ||||
|                         <<xml::String("p"))); | ||||
|       test["body"]["h1"] = "Title"; | ||||
|       test["body"]["p"] = "First Paragraf."; | ||||
|       CPPUNIT_ASSERT_EQUAL(std::string("main"), | ||||
|                            test["body"]["h1"].attr("class")); | ||||
|       std::stringstream ss; | ||||
|       test.out(ss); | ||||
|       CPPUNIT_ASSERT_EQUAL(contents, ss.str()); | ||||
|       xml::Factory factory(xml::Node("html") // template | ||||
|                            <<(xml::Node("head") | ||||
|                               <<xml::String("title")) | ||||
|                            <<(xml::Node("body") | ||||
|                               <<xml::String("h1") | ||||
|                               <<xml::String("h2") | ||||
|                               <<xml::String("p"))); | ||||
|       std::auto_ptr<xml::Node> read(factory.read(ss)); // read back the example | ||||
|       std::stringstream ss2; | ||||
|       read->out(ss2); | ||||
|       CPPUNIT_ASSERT_EQUAL(contents, ss2.str()); | ||||
|     } | ||||
|     void project() { | ||||
|       xml::Factory applications(xml::Node("applications") | ||||
|                                 <<(xml::Node("application") | ||||
|                                    .attr("id", xml::mandatory) | ||||
|                                    .attr("os", xml::optional) | ||||
|                                    <<xml::String("title") | ||||
|                                    <<xml::String("icon") | ||||
|                                    <<xml::String("info") | ||||
|                                    <<(xml::String("prog") | ||||
|                                       .attr("os", xml::optional)) | ||||
|                                    <<(xml::Node("args") | ||||
|                                       .attr("os", xml::optional) | ||||
|                                       <<xml::String("arg")) | ||||
|                                    <<(xml::Node("env") | ||||
|                                       .attr("os", xml::optional) | ||||
|                                       <<(xml::Node("var") | ||||
|                                          .attr("name", xml::mandatory) | ||||
|                                          .attr("value", xml::optional))) | ||||
|                                    <<(xml::Node("runtime") | ||||
|                                       .attr("os", xml::optional) | ||||
|                                       <<(xml::Node("copy") | ||||
|                                          .attr("from", xml::mandatory) | ||||
|                                          .attr("to", xml::mandatory) | ||||
|                                          .attr("os", xml::optional))) | ||||
|                                    <<(xml::Node("buildtime") | ||||
|                                       <<(xml::Node("copy") | ||||
|                                          .attr("from", xml::mandatory) | ||||
|                                          .attr("to", xml::mandatory))))); | ||||
|       xml::Factory edition(xml::Node("edition") | ||||
|                            <<xml::String("userfriendly-name") | ||||
|                            <<xml::String("update-url") | ||||
|                            <<xml::String("startpage") | ||||
|                            <<xml::String("startsplash") | ||||
|                            <<xml::String("endsplash") | ||||
|                            <<(xml::String("termination") | ||||
|                               .attr("terminate-on-media-removal", xml::optional) | ||||
|                               .attr("terminate-children", xml::optional) | ||||
|                               .attr("cleanup-files", xml::optional)) | ||||
|                            <<(xml::Node("startactions") | ||||
|                               .attr("os", xml::optional) | ||||
|                               <<(xml::Node("application") | ||||
|                                  .attr("id", xml::mandatory) | ||||
|                                  .attr("os", xml::optional) | ||||
|                                  <<xml::String("splash") | ||||
|                                  <<xml::String("type"))) | ||||
|                            <<(xml::Node("stopactions") | ||||
|                               .attr("os", xml::optional) | ||||
|                               <<(xml::Node("application") | ||||
|                                  .attr("id", xml::mandatory) | ||||
|                                  .attr("os", xml::optional) | ||||
|                                  <<xml::String("splash"))) | ||||
|                            <<(xml::Node("tree") | ||||
|                               <<(xml::String("application") | ||||
|                                  .attr("id", xml::mandatory) | ||||
|                                  .attr("os", xml::optional)) | ||||
|                               <<(xml::Node("folder") | ||||
|                                  .attr("open", xml::optional) | ||||
|                                  .attr("os", xml::optional) | ||||
|                                  <<xml::String("title") | ||||
|                                  <<xml::String("icon") | ||||
|                                  <<xml::String("info") | ||||
|                                  <<(xml::String("application") | ||||
|                                     .attr("id", xml::mandatory) | ||||
|                                     .attr("os", xml::optional)))) | ||||
|                            <<(xml::Node("toolbar") | ||||
|                               .attr("os", xml::optional) | ||||
|                               <<(xml::String("application") | ||||
|                                  .attr("id", xml::mandatory) | ||||
|                                  .attr("os", xml::optional))) | ||||
|                            <<(xml::Node("tray") | ||||
|                               .attr("os", xml::optional) | ||||
|                               <<xml::String("icon") | ||||
|                               <<(xml::String("application") | ||||
|                                  .attr("id", xml::mandatory) | ||||
|                                  .attr("os", xml::optional)))); | ||||
|       std::cout<<std::endl | ||||
|                <<*applications<<std::endl | ||||
|                <<*edition<<std::endl; | ||||
|     } | ||||
|     CPPUNIT_TEST_SUITE(FunTest); | ||||
|     CPPUNIT_TEST(playing); | ||||
|     CPPUNIT_TEST(project); | ||||
|     CPPUNIT_TEST_SUITE_END(); | ||||
| }; | ||||
| CPPUNIT_TEST_SUITE_REGISTRATION(FunTest); | ||||
|  | ||||
| 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