new tests, cleanup, prepared for node-limits

This commit is contained in:
Marc Wäckerlin
2009-04-09 07:01:25 +00:00
parent 98334b4565
commit f9389d1082
3 changed files with 187 additions and 42 deletions

View File

@@ -199,13 +199,16 @@ class ComplexTest: public CppUnit::TestFixture {
<<"<child/>"
<<"< otherchild >< / otherchild >< otherchild / >"<<std::endl
<<"</base>";
CPPUNIT_ASSERT_THROW(factory.read(file2), xml::access_error);
CPPUNIT_ASSERT_THROW(factory.read(file2), xml::wrong_start_tag);
{
std::stringstream file("<base></xyz>");
CPPUNIT_ASSERT_THROW(factory.read(file), xml::wrong_end_tag);
} {
std::stringstream file("<xyz></xyz>");
CPPUNIT_ASSERT_THROW(factory.read(file), xml::wrong_start_tag);
} {
std::stringstream file("<xyz/>");
CPPUNIT_ASSERT_THROW(factory.read(file), xml::wrong_start_tag);
} {
std::stringstream file("base");
CPPUNIT_ASSERT_THROW(factory.read(file), xml::tag_expected);
@@ -234,7 +237,7 @@ class ComplexTest: public CppUnit::TestFixture {
CPPUNIT_ASSERT_THROW(factory.read(file), xml::missing_end_tag);
} {
std::stringstream file;
CPPUNIT_ASSERT_THROW(factory.read(file), xml::missing_end_tag);
CPPUNIT_ASSERT_THROW(factory.read(file), xml::tag_expected);
} {
std::stringstream file("<base><child a=b></base>");
CPPUNIT_ASSERT_THROW(factory.read(file),
@@ -249,14 +252,50 @@ class ComplexTest: public CppUnit::TestFixture {
}
void attributes() {
xml::Factory factory(xml::Node("base")
.attr("one", xml::mandatory)
.attr("two", xml::optional)
<<(xml::Node("child")
<<xml::String("childofchild")
<<xml::UnsignedInteger("number"))
<<xml::Node("otherchild"));
{
std::stringstream file("<base></base>");
CPPUNIT_ASSERT_THROW(factory.read(file),
xml::mandatory_attribute_missing);
} {
std::stringstream file("<base one two three></base>");
CPPUNIT_ASSERT_THROW(factory.read(file), xml::illegal_attribute);
}
}
void ranges() {
xml::Factory factory(xml::Node("base", 2, 2)
<<xml::Node("mandatory", 1)
<<xml::Node("optional", 0, 1));
{
std::stringstream file("<base><mandatory></mandatory></base>"
"<base><mandatory/><optional/></base>");
CPPUNIT_ASSERT_NO_THROW(factory.read(file));
} /*{
std::stringstream file("<base><mandatory></mandatory></base>"
"<base><mandatory/><optional/></base>");
CPPUNIT_ASSERT_THROW(factory.read(file),
xml::wrong_node_number);
} {
std::stringstream file("<base><mandatory></mandatory></base>"
"<base><mandatory/><optional/></base>");
CPPUNIT_ASSERT_THROW(factory.read(file),
xml::wrong_node_number);
} {
std::stringstream file("<base><mandatory></mandatory></base>"
"<base><mandatory/><optional/></base>");
CPPUNIT_ASSERT_THROW(factory.read(file),
xml::wrong_node_number);
}*/
}
CPPUNIT_TEST_SUITE(ComplexTest);
CPPUNIT_TEST(nodes);
CPPUNIT_TEST(attributes);
CPPUNIT_TEST(ranges);
CPPUNIT_TEST_SUITE_END();
};
CPPUNIT_TEST_SUITE_REGISTRATION(ComplexTest);
@@ -293,7 +332,7 @@ class FunTest: public CppUnit::TestFixture {
<<(xml::Node("head")
<<xml::String("title"))
<<(xml::Node("body")
<<xml::String("h1")
<<xml::String("h1").attr("class", xml::optional)
<<xml::String("h2")
<<xml::String("p")));
std::auto_ptr<xml::Node> read(factory.read(ss)); // read back the example