From aa1a61c59f2064592d3000a241b01f7ff4bbe0a8 Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Wed, 5 Nov 2014 09:32:52 +0100 Subject: Fix xml_node::offset_debug for corner cases Computed offsets for documents with nodes that were added using append_buffer or newly appended nodes without name/value information were invalid. --- tests/test_dom_traverse.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests/test_dom_traverse.cpp') diff --git a/tests/test_dom_traverse.cpp b/tests/test_dom_traverse.cpp index 83afec8..721a079 100644 --- a/tests/test_dom_traverse.cpp +++ b/tests/test_dom_traverse.cpp @@ -924,6 +924,43 @@ TEST_XML_FLAGS(dom_offset_debug, "pcd CHECK((cit++)->offset_debug() == 58); } +TEST(dom_offset_debug_encoding) +{ + char buf[] = { 0, '<', 0, 'n', 0, '/', 0, '>' }; + + xml_document doc; + CHECK(doc.load_buffer(buf, sizeof(buf))); + + CHECK(doc.offset_debug() == 0); + CHECK(doc.first_child().offset_debug() == 1); +} + +TEST_XML(dom_offset_debug_append, "") +{ + xml_node c1 = doc.first_child(); + xml_node c2 = doc.append_child(STR("node")); + xml_node c3 = doc.append_child(node_pcdata); + + CHECK(doc.offset_debug() == 0); + CHECK(c1.offset_debug() == 1); + CHECK(c2.offset_debug() == -1); + CHECK(c3.offset_debug() == -1); + + c1.set_name(STR("nodenode")); + CHECK(c1.offset_debug() == -1); +} + +TEST_XML(dom_offset_debug_append_buffer, "") +{ + CHECK(doc.offset_debug() == 0); + CHECK(doc.first_child().offset_debug() == 1); + + CHECK(doc.append_buffer("", 7)); + CHECK(doc.offset_debug() == -1); + CHECK(doc.first_child().offset_debug() == -1); + CHECK(doc.last_child().offset_debug() == -1); +} + TEST_XML(dom_internal_object, "value") { xml_node node = doc.child(STR("node")); -- cgit v1.2.3