X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=utils%2Fxmlgrep%2Ftestxml.c;h=732f0815a815ea0f620cfbcbf465143d3569fb66;hb=6939abc9aff2def44f2b594d2a47e029b824ad5c;hp=318002ba92dc9024424db8c14596b56c84097303;hpb=7f16fbec709124e1091540b49c02829250caf812;p=flightgear.git diff --git a/utils/xmlgrep/testxml.c b/utils/xmlgrep/testxml.c index 318002ba9..732f0815a 100644 --- a/utils/xmlgrep/testxml.c +++ b/utils/xmlgrep/testxml.c @@ -1,11 +1,22 @@ #include #include +#include #include "xml.h" #define ROOTNODE "/Configuration/output/menu" #define LEAFNODE "name" #define PATH ROOTNODE"/"LEAFNODE #define BUFLEN 4096 + +#define PRINT_ERROR_AND_EXIT(id) \ + if (xmlErrorGetNo(id, 0) != XML_NO_ERROR) { \ + const char *errstr = xmlErrorGetString(id, 0); \ + size_t column = xmlErrorGetColumnNo(id, 0); \ + size_t lineno = xmlErrorGetLineNo(id, 1); \ + printf("Error at line %i, column %i: %s\n", lineno, column, errstr); \ + exit(-1); \ + } + int main() { void *root_id; @@ -14,29 +25,43 @@ int main() if (root_id) { void *path_id, *node_id; + char *s; - path_id = xmlNodeGet(root_id, PATH); - node_id = xmlNodeGet(root_id, ROOTNODE); - - if (path_id && node_id) + printf("\nTesting xmlNodeGetString for /*/*/test:\t\t\t\t\t"); + s = xmlNodeGetString(root_id , "/*/*/test"); + if (s) { - char buf[BUFLEN]; - size_t len; - char *s; - - len = xmlNodeCopyString(root_id, PATH, buf, BUFLEN); - printf("%s = '%s'\n", PATH, buf); + printf("failed.\n\t'%s' should be empty\n", s); + free(s); + } + else + printf("succes.\n"); - printf("Testing value of /Configuration/output/test:\t\t\t\t"); - s = xmlNodeGetString(root_id , "/Configuration/output/test"); + printf("Testing xmlGetString for /Configuration/output/test:\t\t\t"); + path_id = xmlNodeGet(root_id, "/Configuration/output/test"); + if (path_id) + { + s = xmlGetString(path_id); if (s) { - printf("failed.\n\t'%s' shoudl be empty\n", s); + printf("failed.\n\t'%s' should be empty\n", s); free(s); } else printf("succes.\n"); + } + else + PRINT_ERROR_AND_EXIT(root_id); + + path_id = xmlNodeGet(root_id, PATH); + node_id = xmlNodeGet(root_id, ROOTNODE); + if (path_id && node_id) + { + char buf[BUFLEN]; + size_t len; + + xmlCopyString(path_id, buf, BUFLEN); printf("Testing xmlNodeCopyString against xmlGetString:\t\t\t\t"); if ((s = xmlGetString(path_id)) != 0) { @@ -48,45 +73,45 @@ int main() printf("Testing xmlCopyString against xmlGetString:\t\t\t\t"); xmlCopyString(path_id, buf, BUFLEN); if (strcmp(s, buf)) /* not the same */ - printf("failed.\n\t'%s' differs from '%s'\n", s, buf); + printf("failed.\n\t'%s' differs from\n\t'%s'\n", s, buf); else printf("succes.\n"); - free(s); } else - printf("Error while fetching node's value.\n"); + PRINT_ERROR_AND_EXIT(path_id); printf("Testing xmlCopyString against xmlCompareString:\t\t\t\t"); if (xmlCompareString(path_id, buf)) /* not the same */ - printf ("failed.\n\t'%s' differs\n", buf); + printf ("failed.\n\t'%s' differs from\n\t'%s'\n", s, buf); else printf("succes.\n"); printf("Testing xmlCopyString against xmlNodeCompareString:\t\t\t"); if (xmlNodeCompareString(node_id, LEAFNODE, buf)) /* not the same */ - printf ("failed.\n\t'%s' differs\n", buf); + printf("failed.\n\t'%s' differs from\n\t'%s'\n", s, buf); else printf("succes.\n"); + + if (s) free(s); printf("Testing xmlCopyString against xmlNodeGetString:\t\t\t\t"); if ((s = xmlNodeGetString(node_id, LEAFNODE)) != 0) { if (strcmp(s, buf)) /* not the same */ - printf("failed.\n\t'%s' differs from '%s'\n", s, buf); + printf("failed.\n\t'%s' differs from\n\t'%s'\n", s, buf); else printf("succes.\n"); free(s); } else - printf("Error while fetching value from node.\n"); + PRINT_ERROR_AND_EXIT(node_id); free(path_id); path_id = xmlNodeGet(root_id, "/Configuration/backend/name"); if (path_id) { - xmlAttributeCopyString(path_id, "type", buf, BUFLEN); - printf("Testing xmlAttributeCopyString against xmlAttributeCompareString:\t"); + xmlAttributeCopyString(path_id, "type", buf, BUFLEN); if (xmlAttributeCompareString(path_id, "type", buf)) /* no match */ printf("failed.\n\t'%s' differs\n", buf); else @@ -102,22 +127,62 @@ int main() free(s); } else - printf("Error while fetching value from attribute.\n"); + PRINT_ERROR_AND_EXIT(path_id); } else - printf("Error while fetching node's attribute.\n"); + PRINT_ERROR_AND_EXIT(root_id); free(node_id); free(path_id); + + path_id = xmlNodeGet(root_id, "Configuration/output/sample/test"); + if (path_id) + { + xmlNodeCopyString(root_id ,"Configuration/output/menu/name", buf, BUFLEN); + printf("Testing xmlCompareString against a fixed string: \t\t\t"); + if (xmlCompareString(path_id, buf)) /* no match */ + printf("failed.\n\t'%s' differs\n", buf); + else + printf("succes.\n"); + + s = xmlGetString(path_id); + if (s) + { + printf("Testing xmlGetString against a fixed string: \t\t\t\t"); + if (strcmp(s, buf)) /* mismatch */ + printf("failed.\n\t'%s' differs from\n\t'%s'\n", s, buf); + else + printf("succes.\n"); + + printf("Testing xmlCopyString gainst a fixed string: \t\t\t\t"); + xmlCopyString(path_id, buf, BUFLEN); + if (strcmp(s, buf)) /* mismatch */ + printf("failed.\n\t'%s' differs from\n\t'%s'\n", s, buf); + else + printf("succes.\n"); + + free(s); + } + else + PRINT_ERROR_AND_EXIT(path_id); + + free(path_id); + } } - else + + if (xmlErrorGetNo(root_id, 0) != XML_NO_ERROR) { - printf("Error: %s\n", xmlErrorGetString(root_id, 1)); + const char *errstr = xmlErrorGetString(root_id, 0); + size_t column = xmlErrorGetColumnNo(root_id, 0); + size_t lineno = xmlErrorGetLineNo(root_id, 1); + + printf("Error at line %i, column %i: %s\n", lineno, column, errstr); } xmlClose(root_id); } + printf("\n"); return 0; }