diff options
| -rw-r--r-- | tests/common.hpp | 2 | ||||
| -rw-r--r-- | tests/test.hpp | 12 | ||||
| -rw-r--r-- | tests/test_dom_modify.cpp | 63 | 
3 files changed, 75 insertions, 2 deletions
| diff --git a/tests/common.hpp b/tests/common.hpp index 0091e1c..306fb18 100644 --- a/tests/common.hpp +++ b/tests/common.hpp @@ -1,5 +1,3 @@  #include "test.hpp"
 -#include "../src/pugixml.hpp"
 -
  using namespace pugi;
 diff --git a/tests/test.hpp b/tests/test.hpp index fa4ef1d..10e32c7 100644 --- a/tests/test.hpp +++ b/tests/test.hpp @@ -3,6 +3,9 @@  #include <string.h>
  #include <math.h>
 +#include <sstream>
 +
 +#include "../src/pugixml.hpp"
  inline bool test_string_equal(const char* lhs, const char* rhs)
  {
 @@ -14,6 +17,14 @@ template <typename Node> 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)
 +{
 +	std::ostringstream oss;
 +	node.print(oss, "", pugi::format_raw);
 +
 +	return oss.str() == contents;
 +}
 +
  struct test_runner
  {
  	test_runner(const char* name)
 @@ -73,5 +84,6 @@ struct dummy_fixture {};  #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
  #endif
 diff --git a/tests/test_dom_modify.cpp b/tests/test_dom_modify.cpp new file mode 100644 index 0000000..b775d2d --- /dev/null +++ b/tests/test_dom_modify.cpp @@ -0,0 +1,63 @@ +#include "common.hpp"
 +
 +TEST_XML(dom_attr_assign, "<node attr1='' attr2='' attr3='' attr4='' attr5=''/>")
 +{
 +	xml_node node = doc.child("node");
 +
 +	node.attribute("attr1") = "v1";
 +	xml_attribute() = "v1";
 +
 +	node.attribute("attr2") = -2147483647 - 1;
 +	xml_attribute() = -2147483647 - 1;
 +
 +	node.attribute("attr3") = 2147483647u;
 +	xml_attribute() = 2147483647;
 +
 +	node.attribute("attr4") = 0.5;
 +	xml_attribute() = 0.5;
 +
 +	node.attribute("attr5") = true;
 +	xml_attribute() = true;
 +
 +	CHECK_NODE(node, "<node attr1=\"v1\" attr2=\"-2147483648\" attr3=\"2147483647\" attr4=\"0.5\" attr5=\"true\" />");
 +}
 +
 +TEST_XML(dom_attr_set_value, "<node attr1='' attr2='' attr3='' attr4='' attr5=''/>")
 +{
 +	xml_node node = doc.child("node");
 +
 +	CHECK(node.attribute("attr1").set_value("v1"));
 +	CHECK(!xml_attribute().set_value("v1"));
 +
 +	CHECK(node.attribute("attr2").set_value(-2147483647 - 1));
 +	CHECK(!xml_attribute().set_value(-2147483647 - 1));
 +
 +	CHECK(node.attribute("attr3").set_value(2147483647u));
 +	CHECK(!xml_attribute().set_value(2147483647));
 +
 +	CHECK(node.attribute("attr4").set_value(0.5));
 +	CHECK(!xml_attribute().set_value(0.5));
 +
 +	CHECK(node.attribute("attr5").set_value(true));
 +	CHECK(!xml_attribute().set_value(true));
 +
 +	CHECK_NODE(node, "<node attr1=\"v1\" attr2=\"-2147483648\" attr3=\"2147483647\" attr4=\"0.5\" attr5=\"true\" />");
 +}
 +
 +TEST_XML(dom_node_set_name, "<node>text</node>")
 +{
 +	CHECK(doc.child("node").set_name("n"));
 +	CHECK(!doc.child("node").first_child().set_name("n"));
 +	CHECK(!xml_node().set_name("n"));
 +
 +	CHECK_NODE(doc, "<n>text</n>");
 +}
 +
 +TEST_XML(dom_node_set_value, "<node>text</node>")
 +{
 +	CHECK(doc.child("node").first_child().set_value("no text"));
 +	CHECK(!doc.child("node").set_value("no text"));
 +	CHECK(!xml_node().set_value("no text"));
 +
 +	CHECK_NODE(doc, "<node>no text</node>");
 +}
 | 
