tests: Added more node/attribute tests
git-svn-id: http://pugixml.googlecode.com/svn/trunk@141 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
parent
6db04f4320
commit
6ff7e79575
@ -1,6 +1,13 @@
|
|||||||
#ifndef HEADER_TEST_HPP
|
#ifndef HEADER_TEST_HPP
|
||||||
#define HEADER_TEST_HPP
|
#define HEADER_TEST_HPP
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
inline bool test_string_equal(const char* lhs, const char* rhs)
|
||||||
|
{
|
||||||
|
return (!lhs || !rhs) ? lhs == rhs : strcmp(lhs, rhs) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct test_runner
|
struct test_runner
|
||||||
{
|
{
|
||||||
test_runner(const char* name)
|
test_runner(const char* name)
|
||||||
@ -55,5 +62,6 @@ struct dummy_fixture {};
|
|||||||
TEST_FIXTURE(name, test_fixture_##name)
|
TEST_FIXTURE(name, test_fixture_##name)
|
||||||
|
|
||||||
#define CHECK(condition) if (condition) ; else throw #condition " is false"
|
#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
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,51 +1,141 @@
|
|||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
template <typename T> void generic_bool_ops_test(const T& obj)
|
||||||
|
{
|
||||||
|
T null;
|
||||||
|
|
||||||
|
CHECK(!null);
|
||||||
|
CHECK(obj);
|
||||||
|
CHECK(!!obj);
|
||||||
|
|
||||||
|
bool b1 = null, b2 = obj;
|
||||||
|
|
||||||
|
CHECK(!b1);
|
||||||
|
CHECK(b2);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> void generic_rel_ops_test(T obj1, T obj2)
|
||||||
|
{
|
||||||
|
T null = T();
|
||||||
|
|
||||||
|
// obj1 < obj2 (we use operator<, but there is no other choice
|
||||||
|
if (obj1 > obj2) std::swap(obj1, obj2);
|
||||||
|
|
||||||
|
// operator==
|
||||||
|
CHECK(null == null);
|
||||||
|
CHECK(obj1 == obj1);
|
||||||
|
CHECK(!(null == obj1));
|
||||||
|
CHECK(!(null == obj2));
|
||||||
|
CHECK(T(null) == null);
|
||||||
|
CHECK(T(obj1) == obj1);
|
||||||
|
|
||||||
|
// operator!=
|
||||||
|
CHECK(!(null != null));
|
||||||
|
CHECK(!(obj1 != obj1));
|
||||||
|
CHECK(null != obj1);
|
||||||
|
CHECK(null != obj2);
|
||||||
|
CHECK(!(T(null) != null));
|
||||||
|
CHECK(!(T(obj1) != obj1));
|
||||||
|
|
||||||
|
// operator<
|
||||||
|
CHECK(null < obj1);
|
||||||
|
CHECK(null < obj2);
|
||||||
|
CHECK(obj1 < obj2);
|
||||||
|
CHECK(!(null < null));
|
||||||
|
CHECK(!(obj1 < obj1));
|
||||||
|
CHECK(!(obj1 < null));
|
||||||
|
CHECK(!(obj2 < obj1));
|
||||||
|
|
||||||
|
// operator<=
|
||||||
|
CHECK(null <= obj1);
|
||||||
|
CHECK(null <= obj2);
|
||||||
|
CHECK(obj1 <= obj2);
|
||||||
|
CHECK(null <= null);
|
||||||
|
CHECK(obj1 <= obj1);
|
||||||
|
CHECK(!(obj1 <= null));
|
||||||
|
CHECK(!(obj2 <= obj1));
|
||||||
|
|
||||||
|
// operator>
|
||||||
|
CHECK(obj1 > null);
|
||||||
|
CHECK(obj2 > null);
|
||||||
|
CHECK(obj2 > obj1);
|
||||||
|
CHECK(!(null > null));
|
||||||
|
CHECK(!(obj1 > obj1));
|
||||||
|
CHECK(!(null > obj1));
|
||||||
|
CHECK(!(obj1 > obj2));
|
||||||
|
|
||||||
|
// operator>=
|
||||||
|
CHECK(obj1 >= null);
|
||||||
|
CHECK(obj2 >= null);
|
||||||
|
CHECK(obj2 >= obj1);
|
||||||
|
CHECK(null >= null);
|
||||||
|
CHECK(obj1 >= obj1);
|
||||||
|
CHECK(!(null >= obj1));
|
||||||
|
CHECK(!(obj1 >= obj2));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T> void generic_empty_test(const T& obj)
|
||||||
|
{
|
||||||
|
T null;
|
||||||
|
|
||||||
|
CHECK(null.empty());
|
||||||
|
CHECK(!obj.empty());
|
||||||
|
}
|
||||||
|
|
||||||
TEST_XML(dom_attr_bool_ops, "<node attr='1'/>")
|
TEST_XML(dom_attr_bool_ops, "<node attr='1'/>")
|
||||||
{
|
{
|
||||||
xml_attribute attr1;
|
generic_bool_ops_test(doc.child("node").attribute("attr"));
|
||||||
xml_attribute attr2 = doc.child("node").attribute("attr");
|
}
|
||||||
|
|
||||||
CHECK(!attr1);
|
TEST_XML(dom_attr_rel_ops, "<node attr1='1' attr2='2'/>")
|
||||||
CHECK(attr2);
|
{
|
||||||
CHECK(!!attr2);
|
generic_rel_ops_test(doc.child("node").attribute("attr1"), doc.child("node").attribute("attr2"));
|
||||||
|
|
||||||
bool attr1b = attr1;
|
|
||||||
bool attr2b = attr2;
|
|
||||||
|
|
||||||
CHECK(!attr1b);
|
|
||||||
CHECK(attr2b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_XML(dom_attr_empty, "<node attr='1'/>")
|
TEST_XML(dom_attr_empty, "<node attr='1'/>")
|
||||||
{
|
{
|
||||||
xml_attribute attr1;
|
generic_empty_test(doc.child("node").attribute("attr"));
|
||||||
xml_attribute attr2 = doc.child("node").attribute("attr");
|
}
|
||||||
|
|
||||||
CHECK(attr1.empty());
|
TEST_XML(dom_attr_next_previous_attribute, "<node attr1='1' attr2='2' />")
|
||||||
CHECK(!attr2.empty());
|
{
|
||||||
|
xml_attribute attr1 = doc.child("node").attribute("attr1");
|
||||||
|
xml_attribute attr2 = doc.child("node").attribute("attr2");
|
||||||
|
|
||||||
|
CHECK(attr1.next_attribute() == attr2);
|
||||||
|
CHECK(attr2.next_attribute() == xml_attribute());
|
||||||
|
|
||||||
|
CHECK(attr1.previous_attribute() == xml_attribute());
|
||||||
|
CHECK(attr2.previous_attribute() == attr1);
|
||||||
|
|
||||||
|
CHECK(xml_attribute().next_attribute() == xml_attribute());
|
||||||
|
CHECK(xml_attribute().previous_attribute() == xml_attribute());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_XML(dom_attr_name_value, "<node attr='1'/>")
|
||||||
|
{
|
||||||
|
xml_attribute attr = doc.child("node").attribute("attr");
|
||||||
|
|
||||||
|
CHECK_STRING(attr.name(), "attr");
|
||||||
|
CHECK_STRING(attr.value(), "1");
|
||||||
|
|
||||||
|
CHECK_STRING(xml_attribute().name(), "");
|
||||||
|
CHECK_STRING(xml_attribute().value(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_XML(dom_node_bool_ops, "<node/>")
|
TEST_XML(dom_node_bool_ops, "<node/>")
|
||||||
{
|
{
|
||||||
xml_node node1;
|
generic_bool_ops_test(doc.child("node"));
|
||||||
xml_node node2 = doc.child("node");
|
}
|
||||||
|
|
||||||
CHECK(!node1);
|
TEST_XML(dom_node_rel_ops, "<node><node1/><node2/></node>")
|
||||||
CHECK(node2);
|
{
|
||||||
CHECK(!!node2);
|
generic_rel_ops_test(doc.child("node").child("node1"), doc.child("node").child("node2"));
|
||||||
|
|
||||||
bool node1b = node1;
|
|
||||||
bool node2b = node2;
|
|
||||||
|
|
||||||
CHECK(!node1b);
|
|
||||||
CHECK(node2b);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_XML(dom_node_empty, "<node/>")
|
TEST_XML(dom_node_empty, "<node/>")
|
||||||
{
|
{
|
||||||
xml_node node1;
|
generic_empty_test(doc.child("node"));
|
||||||
xml_node node2 = doc.child("node");
|
|
||||||
|
|
||||||
CHECK(node1.empty());
|
|
||||||
CHECK(!node2.empty());
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user