/* * tester.c : a small tester program for XML input. * * See Copyright for the status of this software. * * Daniel.Veillard@w3.org */ #ifdef WIN32 #define HAVE_FCNTL_H #include #else #include #endif #include #ifdef HAVE_SYS_STAT_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include "parser.h" #include "tree.h" #include "debugXML.h" static int debug = 0; static int copy = 0; static int recovery = 0; /* * Note: there is a couple of errors introduced on purpose. */ static CHAR buffer[] = "\n\ \n\ \n\ \n\ \n\ \n\ \n\ Jim Whitehead\n\ Roy Fielding\n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ \n\ "; /************************************************************************ * * * Debug * * * ************************************************************************/ int treeTest(void) { xmlDocPtr doc, tmp; xmlNodePtr tree, subtree; /* * build a fake XML document */ doc = xmlNewDoc("1.0"); doc->root = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL); xmlSetProp(doc->root, "prop1", "gnome is great"); xmlSetProp(doc->root, "prop2", "&linux; too"); xmlSetProp(doc->root, "emptyprop", ""); tree = xmlNewChild(doc->root, NULL, "head", NULL); subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome"); tree = xmlNewChild(doc->root, NULL, "chapter", NULL); subtree = xmlNewChild(tree, NULL, "title", "The Linux adventure"); subtree = xmlNewChild(tree, NULL, "p", "bla bla bla ..."); subtree = xmlNewChild(tree, NULL, "image", NULL); xmlSetProp(subtree, "href", "linus.gif"); /* * test intermediate copy if needed. */ if (copy) { tmp = doc; doc = xmlCopyDoc(doc, 1); xmlFreeDoc(tmp); } /* * print it. */ xmlDocDump(stdout, doc); /* * free it. */ xmlFreeDoc(doc); return(0); } void parseAndPrintFile(char *filename) { xmlDocPtr doc, tmp; /* * build an XML tree from a string; */ if (recovery) doc = xmlRecoverFile(filename); else doc = xmlParseFile(filename); /* * test intermediate copy if needed. */ if (copy) { tmp = doc; doc = xmlCopyDoc(doc, 1); xmlFreeDoc(tmp); } /* * print it. */ if (!debug) xmlDocDump(stdout, doc); else xmlDebugDumpDocument(stdout, doc); /* * free it. */ xmlFreeDoc(doc); } void parseAndPrintBuffer(CHAR *buf) { xmlDocPtr doc, tmp; /* * build an XML tree from a string; */ if (recovery) doc = xmlRecoverDoc(buf); else doc = xmlParseDoc(buf); /* * test intermediate copy if needed. */ if (copy) { tmp = doc; doc = xmlCopyDoc(doc, 1); xmlFreeDoc(tmp); } /* * print it. */ if (!debug) xmlDocDump(stdout, doc); else xmlDebugDumpDocument(stdout, doc); /* * free it. */ xmlFreeDoc(doc); } int main(int argc, char **argv) { int i; int files = 0; for (i = 1; i < argc ; i++) { if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) debug++; else if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy"))) copy++; else if ((!strcmp(argv[i], "-recover")) || (!strcmp(argv[i], "--recover"))) recovery++; } for (i = 1; i < argc ; i++) { if (argv[i][0] != '-') { parseAndPrintFile(argv[i]); files ++; } } if (files == 0) { printf("\nFirst test for the parser, with errors\n"); parseAndPrintBuffer(buffer); printf("\nBuilding a tree from scratch and printing it\n"); treeTest(); } return(0); }