#include "test.hpp" #include "helpers.hpp" #include using namespace pugi; TEST_XML_FLAGS(dom_text_empty, "foo", parse_default | parse_pi) { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("a")).text()); CHECK(node.child(STR("b")).text()); CHECK(!node.child(STR("c")).text()); CHECK(!node.child(STR("d")).text()); CHECK(!xml_node().text()); CHECK(!xml_text()); generic_empty_test(node.child(STR("a")).text()); } TEST_XML(dom_text_bool_ops, "foo") { generic_bool_ops_test(doc.child(STR("node")).text()); } TEST_XML_FLAGS(dom_text_get, "foo", parse_default | parse_pi) { xml_node node = doc.child(STR("node")); CHECK_STRING(node.child(STR("a")).text().get(), STR("foo")); CHECK_STRING(node.child(STR("a")).first_child().text().get(), STR("foo")); CHECK_STRING(node.child(STR("b")).text().get(), STR("bar")); CHECK_STRING(node.child(STR("b")).last_child().text().get(), STR("bar")); CHECK_STRING(node.child(STR("c")).text().get(), STR("")); CHECK_STRING(node.child(STR("c")).first_child().text().get(), STR("")); CHECK_STRING(node.child(STR("d")).text().get(), STR("")); CHECK_STRING(xml_node().text().get(), STR("")); } TEST_XML_FLAGS(dom_text_as_string, "foo", parse_default | parse_pi) { xml_node node = doc.child(STR("node")); CHECK_STRING(node.child(STR("a")).text().as_string(), STR("foo")); CHECK_STRING(node.child(STR("a")).first_child().text().as_string(), STR("foo")); CHECK_STRING(node.child(STR("b")).text().as_string(), STR("bar")); CHECK_STRING(node.child(STR("b")).last_child().text().as_string(), STR("bar")); CHECK_STRING(node.child(STR("c")).text().as_string(), STR("")); CHECK_STRING(node.child(STR("c")).first_child().text().as_string(), STR("")); CHECK_STRING(node.child(STR("d")).text().as_string(), STR("")); CHECK_STRING(xml_node().text().as_string(), STR("")); } TEST_XML(dom_text_as_int, "1-1-214748364821474836470") { xml_node node = doc.child(STR("node")); CHECK(xml_text().as_int() == 0); CHECK(node.child(STR("text1")).text().as_int() == 1); CHECK(node.child(STR("text2")).text().as_int() == -1); CHECK(node.child(STR("text3")).text().as_int() == -2147483647 - 1); CHECK(node.child(STR("text4")).text().as_int() == 2147483647); CHECK(node.child(STR("text5")).text().as_int() == 0); } TEST_XML(dom_text_as_int_hex, "07770x5ab0XFf-0x20-0x800000000x") { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("text1")).text().as_int() == 777); // no octal support! intentional CHECK(node.child(STR("text2")).text().as_int() == 1451); CHECK(node.child(STR("text3")).text().as_int() == 255); CHECK(node.child(STR("text4")).text().as_int() == -32); CHECK(node.child(STR("text5")).text().as_int() == -2147483647 - 1); CHECK(node.child(STR("text6")).text().as_int() == 0); } TEST_XML(dom_text_as_uint, "01214748364742949672950") { xml_node node = doc.child(STR("node")); CHECK(xml_text().as_uint() == 0); CHECK(node.child(STR("text1")).text().as_uint() == 0); CHECK(node.child(STR("text2")).text().as_uint() == 1); CHECK(node.child(STR("text3")).text().as_uint() == 2147483647); CHECK(node.child(STR("text4")).text().as_uint() == 4294967295u); CHECK(node.child(STR("text5")).text().as_uint() == 0); } TEST_XML(dom_text_as_uint_hex, "07770x5ab0XFf0x200xFFFFFFFF0x") { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("text1")).text().as_uint() == 777); // no octal support! intentional CHECK(node.child(STR("text2")).text().as_uint() == 1451); CHECK(node.child(STR("text3")).text().as_uint() == 255); CHECK(node.child(STR("text4")).text().as_uint() == 32); CHECK(node.child(STR("text5")).text().as_uint() == 4294967295u); CHECK(node.child(STR("text6")).text().as_uint() == 0); } TEST_XML(dom_text_as_integer_space, " \t\n1234\n\t 0x123- 16- 0x10") { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("text1")).text().as_int() == 1234); CHECK(node.child(STR("text2")).text().as_int() == 291); CHECK(node.child(STR("text3")).text().as_int() == 0); CHECK(node.child(STR("text4")).text().as_int() == 0); } TEST_XML(dom_text_as_float, "010.12-5.13e-43.14159265358979323846") { xml_node node = doc.child(STR("node")); CHECK(xml_text().as_float() == 0); CHECK_DOUBLE(double(node.child(STR("text1")).text().as_float()), 0); CHECK_DOUBLE(double(node.child(STR("text2")).text().as_float()), 1); CHECK_DOUBLE(double(node.child(STR("text3")).text().as_float()), 0.12); CHECK_DOUBLE(double(node.child(STR("text4")).text().as_float()), -5.1); CHECK_DOUBLE(double(node.child(STR("text5")).text().as_float()), 3e-4); CHECK_DOUBLE(double(node.child(STR("text6")).text().as_float()), 3.14159265358979323846); } TEST_XML(dom_text_as_double, "010.12-5.13e-43.14159265358979323846") { xml_node node = doc.child(STR("node")); CHECK(xml_text().as_double() == 0); CHECK_DOUBLE(node.child(STR("text1")).text().as_double(), 0); CHECK_DOUBLE(node.child(STR("text2")).text().as_double(), 1); CHECK_DOUBLE(node.child(STR("text3")).text().as_double(), 0.12); CHECK_DOUBLE(node.child(STR("text4")).text().as_double(), -5.1); CHECK_DOUBLE(node.child(STR("text5")).text().as_double(), 3e-4); CHECK_DOUBLE(node.child(STR("text6")).text().as_double(), 3.14159265358979323846); } TEST_XML(dom_text_as_bool, "01trueTrueYesyesfalse") { xml_node node = doc.child(STR("node")); CHECK(!xml_text().as_bool()); CHECK(!node.child(STR("text1")).text().as_bool()); CHECK(node.child(STR("text2")).text().as_bool()); CHECK(node.child(STR("text3")).text().as_bool()); CHECK(node.child(STR("text4")).text().as_bool()); CHECK(node.child(STR("text5")).text().as_bool()); CHECK(node.child(STR("text6")).text().as_bool()); CHECK(!node.child(STR("text7")).text().as_bool()); } #ifdef PUGIXML_HAS_LONG_LONG TEST_XML(dom_text_as_llong, "1-1-922337203685477580892233720368547758070") { xml_node node = doc.child(STR("node")); CHECK(xml_text().as_llong() == 0); CHECK(node.child(STR("text1")).text().as_llong() == 1); CHECK(node.child(STR("text2")).text().as_llong() == -1); CHECK(node.child(STR("text3")).text().as_llong() == -9223372036854775807ll - 1); CHECK(node.child(STR("text4")).text().as_llong() == 9223372036854775807ll); CHECK(node.child(STR("text5")).text().as_llong() == 0); } TEST_XML(dom_text_as_llong_hex, "07770x5ab0XFf-0x20-0x80000000000000000x") { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("text1")).text().as_llong() == 777); // no octal support! intentional CHECK(node.child(STR("text2")).text().as_llong() == 1451); CHECK(node.child(STR("text3")).text().as_llong() == 255); CHECK(node.child(STR("text4")).text().as_llong() == -32); CHECK(node.child(STR("text5")).text().as_llong() == -9223372036854775807ll - 1); CHECK(node.child(STR("text6")).text().as_llong() == 0); } TEST_XML(dom_text_as_ullong, "019223372036854775807184467440737095516150") { xml_node node = doc.child(STR("node")); CHECK(xml_text().as_ullong() == 0); CHECK(node.child(STR("text1")).text().as_ullong() == 0); CHECK(node.child(STR("text2")).text().as_ullong() == 1); CHECK(node.child(STR("text3")).text().as_ullong() == 9223372036854775807ll); CHECK(node.child(STR("text4")).text().as_ullong() == 18446744073709551615ull); CHECK(node.child(STR("text5")).text().as_ullong() == 0); } TEST_XML(dom_text_as_ullong_hex, "07770x5ab0XFf0x200xFFFFFFFFFFFFFFFF0x") { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("text1")).text().as_ullong() == 777); // no octal support! intentional CHECK(node.child(STR("text2")).text().as_ullong() == 1451); CHECK(node.child(STR("text3")).text().as_ullong() == 255); CHECK(node.child(STR("text4")).text().as_ullong() == 32); CHECK(node.child(STR("text5")).text().as_ullong() == 18446744073709551615ull); CHECK(node.child(STR("text6")).text().as_ullong() == 0); } #endif TEST_XML(dom_text_get_no_state, "") { xml_node node = doc.child(STR("node")); xml_text t = node.text(); CHECK(!t); CHECK(t.get() && *t.get() == 0); CHECK(!node.first_child()); node.append_child(node_pcdata); CHECK(t); CHECK_STRING(t.get(), STR("")); node.first_child().set_value(STR("test")); CHECK(t); CHECK_STRING(t.get(), STR("test")); } TEST_XML(dom_text_set, "") { xml_node node = doc.child(STR("node")); xml_text t = node.text(); t.set(STR("")); CHECK(node.first_child().type() == node_pcdata); CHECK_NODE(node, STR("")); t.set(STR("boo")); CHECK(node.first_child().type() == node_pcdata); CHECK(node.first_child() == node.last_child()); CHECK_NODE(node, STR("boo")); t.set(STR("foobarfoobar")); CHECK(node.first_child().type() == node_pcdata); CHECK(node.first_child() == node.last_child()); CHECK_NODE(node, STR("foobarfoobar")); } TEST_XML(dom_text_assign, "") { xml_node node = doc.child(STR("node")); node.append_child(STR("text1")).text() = STR("v1"); xml_text() = STR("v1"); node.append_child(STR("text2")).text() = -2147483647; node.append_child(STR("text3")).text() = -2147483647 - 1; xml_text() = -2147483647 - 1; node.append_child(STR("text4")).text() = 4294967295u; node.append_child(STR("text5")).text() = 4294967294u; xml_text() = 4294967295u; node.append_child(STR("text6")).text() = 0.5; xml_text() = 0.5; node.append_child(STR("text7")).text() = 0.25f; xml_text() = 0.25f; node.append_child(STR("text8")).text() = true; xml_text() = true; CHECK_NODE(node, STR("v1-2147483647-2147483648429496729542949672940.50.25true")); } TEST_XML(dom_text_set_value, "") { xml_node node = doc.child(STR("node")); CHECK(node.append_child(STR("text1")).text().set(STR("v1"))); CHECK(!xml_text().set(STR("v1"))); CHECK(node.append_child(STR("text2")).text().set(-2147483647)); CHECK(node.append_child(STR("text3")).text().set(-2147483647 - 1)); CHECK(!xml_text().set(-2147483647 - 1)); CHECK(node.append_child(STR("text4")).text().set(4294967295u)); CHECK(node.append_child(STR("text5")).text().set(4294967294u)); CHECK(!xml_text().set(4294967295u)); CHECK(node.append_child(STR("text6")).text().set(0.5)); CHECK(!xml_text().set(0.5)); CHECK(node.append_child(STR("text7")).text().set(0.25f)); CHECK(!xml_text().set(0.25f)); CHECK(node.append_child(STR("text8")).text().set(true)); CHECK(!xml_text().set(true)); CHECK_NODE(node, STR("v1-2147483647-2147483648429496729542949672940.50.25true")); } #if LONG_MAX > 2147483647 TEST_XML(dom_text_assign_long, "") { xml_node node = doc.child(STR("node")); node.append_child(STR("text1")).text() = -9223372036854775807l; node.append_child(STR("text2")).text() = -9223372036854775807l - 1; xml_text() = -9223372036854775807l - 1; node.append_child(STR("text3")).text() = 18446744073709551615ul; node.append_child(STR("text4")).text() = 18446744073709551614ul; xml_text() = 18446744073709551615ul; CHECK_NODE(node, STR("-9223372036854775807-92233720368547758081844674407370955161518446744073709551614")); } TEST_XML(dom_text_set_value_long, "") { xml_node node = doc.child(STR("node")); CHECK(node.append_child(STR("text1")).text().set(-9223372036854775807l)); CHECK(node.append_child(STR("text2")).text().set(-9223372036854775807l - 1)); CHECK(!xml_text().set(-9223372036854775807l - 1)); CHECK(node.append_child(STR("text3")).text().set(18446744073709551615ul)); CHECK(node.append_child(STR("text4")).text().set(18446744073709551614ul)); CHECK(!xml_text().set(18446744073709551615ul)); CHECK_NODE(node, STR("-9223372036854775807-92233720368547758081844674407370955161518446744073709551614")); } #else TEST_XML(dom_text_assign_long, "") { xml_node node = doc.child(STR("node")); node.append_child(STR("text1")).text() = -2147483647l; node.append_child(STR("text2")).text() = -2147483647l - 1; xml_text() = -2147483647l - 1; node.append_child(STR("text3")).text() = 4294967295ul; node.append_child(STR("text4")).text() = 4294967294ul; xml_text() = 4294967295ul; CHECK_NODE(node, STR("-2147483647-214748364842949672954294967294")); } TEST_XML(dom_text_set_value_long, "") { xml_node node = doc.child(STR("node")); CHECK(node.append_child(STR("text1")).text().set(-2147483647l)); CHECK(node.append_child(STR("text2")).text().set(-2147483647l - 1)); CHECK(!xml_text().set(-2147483647l - 1)); CHECK(node.append_child(STR("text3")).text().set(4294967295ul)); CHECK(node.append_child(STR("text4")).text().set(4294967294ul)); CHECK(!xml_text().set(4294967295ul)); CHECK_NODE(node, STR("-2147483647-214748364842949672954294967294")); } #endif #ifdef PUGIXML_HAS_LONG_LONG TEST_XML(dom_text_assign_llong, "") { xml_node node = doc.child(STR("node")); node.append_child(STR("text1")).text() = -9223372036854775807ll; node.append_child(STR("text2")).text() = -9223372036854775807ll - 1; xml_text() = -9223372036854775807ll - 1; node.append_child(STR("text3")).text() = 18446744073709551615ull; node.append_child(STR("text4")).text() = 18446744073709551614ull; xml_text() = 18446744073709551615ull; CHECK_NODE(node, STR("-9223372036854775807-92233720368547758081844674407370955161518446744073709551614")); } TEST_XML(dom_text_set_value_llong, "") { xml_node node = doc.child(STR("node")); CHECK(node.append_child(STR("text1")).text().set(-9223372036854775807ll)); CHECK(node.append_child(STR("text2")).text().set(-9223372036854775807ll - 1)); CHECK(!xml_text().set(-9223372036854775807ll - 1)); CHECK(node.append_child(STR("text3")).text().set(18446744073709551615ull)); CHECK(node.append_child(STR("text4")).text().set(18446744073709551614ull)); CHECK(!xml_text().set(18446744073709551615ull)); CHECK_NODE(node, STR("-9223372036854775807-92233720368547758081844674407370955161518446744073709551614")); } #endif TEST_XML(dom_text_middle, "notthisonetext") { xml_node node = doc.child(STR("node")); xml_text t = node.text(); CHECK_STRING(t.get(), STR("text")); t.set(STR("notext")); CHECK_NODE(node, STR("notthisonenotext")); CHECK(node.remove_child(t.data())); CHECK(!t); CHECK_NODE(node, STR("notthisone")); t.set(STR("yestext")); CHECK(t); CHECK_NODE(node, STR("notthisoneyestext")); CHECK(t.data() == node.last_child()); } TEST_XML_FLAGS(dom_text_data, "foo", parse_default | parse_pi) { xml_node node = doc.child(STR("node")); CHECK(node.child(STR("a")).text().data() == node.child(STR("a")).first_child()); CHECK(node.child(STR("b")).text().data() == node.child(STR("b")).first_child()); CHECK(!node.child(STR("c")).text().data()); CHECK(!node.child(STR("d")).text().data()); CHECK(!xml_text().data()); } TEST(dom_text_defaults) { xml_text text; CHECK_STRING(text.as_string(STR("foo")), STR("foo")); CHECK(text.as_int(42) == 42); CHECK(text.as_uint(42) == 42); CHECK(text.as_double(42) == 42); CHECK(text.as_float(42) == 42); CHECK(text.as_bool(true) == true); #ifdef PUGIXML_HAS_LONG_LONG CHECK(text.as_llong(42) == 42); CHECK(text.as_ullong(42) == 42); #endif }