From 4a0b63431f7169012c18369c4416e9fcb9729b76 Mon Sep 17 00:00:00 2001 From: Tomasz Gajewski Date: Sun, 19 Apr 2015 23:08:31 +0200 Subject: [PATCH] Extended test for XML node Added function to print tokens. Added test for text mixed with nodes. Issue #1424 --- repos/os/src/test/xml_node/test.cc | 63 +++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/repos/os/src/test/xml_node/test.cc b/repos/os/src/test/xml_node/test.cc index 191f63a1c..8d0a8dd51 100644 --- a/repos/os/src/test/xml_node/test.cc +++ b/repos/os/src/test/xml_node/test.cc @@ -116,11 +116,64 @@ static const char *xml_test_attributes = " " ""; +/* valid example of XML structure with text between nodes */ +static const char *xml_test_text_between_nodes = + "" + " sometext1" + " " + " sometext2" + " inProgram" + " sometext3" + ""; + /****************** ** Test program ** ******************/ +/** + * Print attributes of XML token + */ +template +static const char *token_type_string(typename Token::Type token_type) +{ + switch (token_type) { + case Token::SINGLECHAR: return "SINGLECHAR"; + case Token::NUMBER : return "NUMBER"; + case Token::IDENT : return "IDENT"; + case Token::STRING : return "STRING"; + case Token::WHITESPACE: return "WHITESPACE"; + case Token::END : return "END"; + } + return ""; +} + + +/** + * Print attributes of XML token + */ +template +static void print_xml_token_info(Token xml_token) +{ + static char content_buf[128]; + xml_token.string(content_buf, sizeof(content_buf)); + printf("token type=\"%s\", len=%zd, content=\"%s\"\n", + token_type_string(xml_token.type()), + xml_token.len(), content_buf); +} + + +template +static void print_xml_tokens(const char *xml_string) +{ + Token token(xml_string); + while (token.type() != Token::END) { + print_xml_token_info(token); + token = token.next(); + } +} + + /** * Print attributes of XML node */ @@ -135,7 +188,7 @@ static void print_xml_attr_info(Xml_node xml_node, int indent = 0) /* read attribute name and value */ char name[32]; name[0] = 0; - a.value(name, sizeof(name)); + a.type(name, sizeof(name)); char value[32]; value[0] = 0; a.value(value, sizeof(value)); @@ -166,7 +219,7 @@ static void print_xml_node_info(Xml_node xml_node, int indent = 0) xml_node.value(buf, sizeof(buf)); printf("leaf content = \"%s\"\n", buf); } else - printf("number of subnodes = %d\n", + printf("number of subnodes = %zd\n", xml_node.num_sub_nodes()); print_xml_attr_info(xml_node, indent + 2); @@ -213,6 +266,9 @@ static void print_xml_info(const char *xml_string) int main() { + printf("--- XML-token test ---\n"); + print_xml_tokens(xml_test_text_between_nodes); + printf("--- XML-parser test ---\n"); printf("-- Test valid XML structure --\n"); @@ -239,6 +295,9 @@ int main() printf("-- Test access to XML attributes --\n"); print_xml_info(xml_test_attributes); + printf("-- Test parsing XML with nodes mixed with text --\n"); + print_xml_info(xml_test_text_between_nodes); + printf("--- End of XML-parser test ---\n"); return 0; }