From 80d778d0532d83d566d310bc790d9a50646016bb Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine" Date: Mon, 12 Oct 2009 16:26:18 +0000 Subject: tests: Refactored checking macros, added writing tests git-svn-id: http://pugixml.googlecode.com/svn/trunk@152 99668b35-9821-0410-8761-19e4c4f06640 --- tests/test.hpp | 17 +++++++----- tests/test_write.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 tests/test_write.cpp diff --git a/tests/test.hpp b/tests/test.hpp index 10e32c7..af3c63b 100644 --- a/tests/test.hpp +++ b/tests/test.hpp @@ -17,10 +17,10 @@ template inline bool test_node_name_value(const Node& node, cons return test_string_equal(node.name(), name) && test_string_equal(node.value(), value); } -inline bool test_node(const pugi::xml_node& node, const char* contents) +inline bool test_node(const pugi::xml_node& node, const char* contents, const char* indent, unsigned int flags) { std::ostringstream oss; - node.print(oss, "", pugi::format_raw); + node.print(oss, indent, flags); return oss.str() == contents; } @@ -80,10 +80,13 @@ struct dummy_fixture {}; #define TEST_XML(name, xml) TEST_XML_FLAGS(name, xml, pugi::parse_default) -#define CHECK(condition) if (condition) ; else throw #condition " is false" -#define CHECK_STRING(value, expected) if (test_string_equal(value, expected)) ; else throw #value " is not equal to " #expected -#define CHECK_DOUBLE(value, expected) if (fabs(value - expected) < 1e-6) ; else throw #value " is not equal to " #expected -#define CHECK_NAME_VALUE(node, name, value) if (test_node_name_value(node, name, value)) ; else throw #node " name/value do not match " #name " and " #value -#define CHECK_NODE(node, expected) if (test_node(node, expected)) ; else throw #node " contents does not match " #expected +#define CHECK_TEXT(condition, text) if (condition) ; else throw text + +#define CHECK(condition) CHECK_TEXT(condition, #condition " is false") +#define CHECK_STRING(value, expected) CHECK_TEXT(test_string_equal(value, expected), #value " is not equal to " #expected) +#define CHECK_DOUBLE(value, expected) CHECK_TEXT(fabs(value - expected) < 1e-6, #value " is not equal to " #expected) +#define CHECK_NAME_VALUE(node, name, value) CHECK_TEXT(test_node_name_value(node, name, value), #node " name/value do not match " #name " and " #value) +#define CHECK_NODE_EX(node, expected, indent, flags) CHECK_TEXT(test_node(node, expected, indent, flags), #node " contents does not match " #expected) +#define CHECK_NODE(node, expected) CHECK_NODE_EX(node, expected, "", pugi::format_raw) #endif diff --git a/tests/test_write.cpp b/tests/test_write.cpp new file mode 100644 index 0000000..78516b2 --- /dev/null +++ b/tests/test_write.cpp @@ -0,0 +1,77 @@ +#include "common.hpp" + +#include + +TEST_XML(write_simple, "text") +{ + CHECK_NODE_EX(doc, "\ntext\n\n", "", 0); +} + +TEST_XML(write_raw, "text") +{ + CHECK_NODE_EX(doc, "text", "", pugi::format_raw); +} + +TEST_XML(write_indent, "text") +{ + CHECK_NODE_EX(doc, "\n\t\n\t\ttext\n\t\n\n", "\t", pugi::format_indent); +} + +TEST_XML(write_pcdata, "text") +{ + CHECK_NODE_EX(doc, "\n\t\n\t\t\n\t\ttext\n\t\n\n", "\t", pugi::format_indent); +} + +TEST_XML(write_cdata, "") +{ + CHECK_NODE(doc, ""); +} + +TEST_XML_FLAGS(write_comment, "", pugi::parse_default | pugi::parse_comments) +{ + CHECK_NODE(doc, ""); +} + +TEST_XML_FLAGS(write_pi, "", pugi::parse_default | pugi::parse_pi) +{ + CHECK_NODE(doc, ""); +} + +TEST_XML_FLAGS(write_declaration, "", pugi::parse_default | pugi::parse_declaration) +{ + CHECK_NODE(doc, ""); +} + +TEST_XML(write_escape, "text") +{ + doc.child("node").attribute("attr") = "<>'\"&\x04\r\n\t"; + doc.child("node").first_child().set_value("<>'\"&\x04\r\n\t"); + + CHECK_NODE(doc, "<>'\"&\r\n\t"); +} + +struct test_writer: xml_writer +{ + std::string contents; + + virtual void write(const void* data, size_t size) + { + contents += std::string(static_cast(data), static_cast(data) + size); + } +}; + +TEST_XML(write_print_writer, "") +{ + test_writer writer; + doc.print(writer); + + CHECK(writer.contents == "\n"); +} + +TEST_XML(write_print_stream, "") +{ + std::ostringstream oss; + doc.print(oss); + + CHECK(oss.str() == "\n"); +} -- cgit v1.2.3