1562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project/* 2562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project Test program for TinyXML. 3562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project*/ 4562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 5562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 6562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#include "tinyxml.h" 7562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 8562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 9562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #include <iostream> 10562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #include <sstream> 11562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project using namespace std; 12562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#else 13562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #include <stdio.h> 14562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 15562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 16562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#if defined( WIN32 ) && defined( TUNE ) 17562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #include <windows.h> 18562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Apologies to non-windows users! But I need some good timers for 19562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // profiling, and these are very platform specific. 20562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project __int64 start; 21562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project __int64 end; 22562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project __int64 freq; 23562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 24562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 25562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic int gPass = 0; 26562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectstatic int gFail = 0; 27562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 28562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 29562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool XmlTest (const char* testString, const char* expected, const char* found, bool noEcho = false) 30562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 31562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool pass = !strcmp( expected, found ); 32562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( pass ) 33562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("[pass]"); 34562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 35562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("[fail]"); 36562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 37562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( noEcho ) 38562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf (" %s\n", testString); 39562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 40562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf (" %s [%s][%s]\n", testString, expected, found); 41562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 42562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( pass ) 43562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ++gPass; 44562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 45562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ++gFail; 46562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return pass; 47562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 48562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 49562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 50562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectbool XmlTest( const char* testString, int expected, int found, bool noEcho = false ) 51562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 52562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool pass = ( expected == found ); 53562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( pass ) 54562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("[pass]"); 55562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 56562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("[fail]"); 57562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 58562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( noEcho ) 59562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf (" %s\n", testString); 60562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 61562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf (" %s [%d][%d]\n", testString, expected, found); 62562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 63562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( pass ) 64562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ++gPass; 65562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 66562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ++gFail; 67562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return pass; 68562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 69562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 70562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 71562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// 72562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// This file demonstrates some basic functionality of TinyXml. 73562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// Note that the example is very contrived. It presumes you know 74562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// what is in the XML file. But it does test the basic operations, 75562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// and show how to add and remove nodes. 76562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project// 77562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 78562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Projectint main() 79562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project{ 80562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // 81562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // We start with the 'demoStart' todo list. Process it. And 82562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // should hopefully end up with the todo list as illustrated. 83562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // 84562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* demoStart = 85562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<?xml version=\"1.0\" standalone='no' >\n" 86562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!-- Our to do list data -->" 87562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<ToDo>\n" 88562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!-- Do I need a secure PDA? -->\n" 89562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Item priority=\"1\" distance='close'> Go to the <bold>Toy store!</bold></Item>" 90562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Item priority=\"2\" distance='none'> Do bills </Item>" 91562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Item priority=\"2\" distance='far & back'> Look for Evil Dinosaurs! </Item>" 92562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</ToDo>"; 93562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 94562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 95562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project /* What the todo list should look like after processing. 96562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project In stream (no formatting) representation. */ 97562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* demoEnd = 98562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<?xml version=\"1.0\" standalone=\"no\" ?>" 99562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!-- Our to do list data -->" 100562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<ToDo>" 101562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!-- Do I need a secure PDA? -->" 102562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Item priority=\"2\" distance=\"close\">Go to the" 103562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<bold>Toy store!" 104562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</bold>" 105562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</Item>" 106562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Item priority=\"1\" distance=\"far\">Talk to:" 107562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Meeting where=\"School\">" 108562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Attendee name=\"Marple\" position=\"teacher\" />" 109562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Attendee name=\"Voel\" position=\"counselor\" />" 110562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</Meeting>" 111562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Meeting where=\"Lunch\" />" 112562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</Item>" 113562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<Item priority=\"2\" distance=\"here\">Do bills" 114562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</Item>" 115562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</ToDo>"; 116562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 117562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 118562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // The example parses from the character string (above): 119562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #if defined( WIN32 ) && defined( TUNE ) 120562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project QueryPerformanceCounter( (LARGE_INTEGER*) (&start) ); 121562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 122562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 123562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 124562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Write to a file and read it back, to check file I/O. 125562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 126562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc( "demotest.xml" ); 127562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( demoStart ); 128562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 129562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( doc.Error() ) 130562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 131562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "Error in %s: %s\n", doc.Value(), doc.ErrorDesc() ); 132562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project exit( 1 ); 133562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 134562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.SaveFile(); 135562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 136562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 137562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc( "demotest.xml" ); 138562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool loadOkay = doc.LoadFile(); 139562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 140562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( !loadOkay ) 141562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 142562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "Could not load test file 'demotest.xml'. Error='%s'. Exiting.\n", doc.ErrorDesc() ); 143562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project exit( 1 ); 144562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 145562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 146562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "** Demo doc read from disk: ** \n\n" ); 147562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Print( stdout ); 148562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 149562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlNode* node = 0; 150562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* todoElement = 0; 151562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* itemElement = 0; 152562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 153562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 154562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 155562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // An example of changing existing attributes, and removing 156562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // an element from the document. 157562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 158562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 159562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Get the "ToDo" element. 160562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // It is a child of the document, and can be selected by name. 161562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = doc.FirstChild( "ToDo" ); 162562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( node ); 163562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project todoElement = node->ToElement(); 164562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( todoElement ); 165562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 166562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Going to the toy store is now our second priority... 167562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // So set the "priority" attribute of the first item in the list. 168562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = todoElement->FirstChildElement(); // This skips the "PDA" comment. 169562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( node ); 170562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement = node->ToElement(); 171562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( itemElement ); 172562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement->SetAttribute( "priority", 2 ); 173562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 174562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Change the distance to "doing bills" from 175562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // "none" to "here". It's the next sibling element. 176562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement = itemElement->NextSiblingElement(); 177562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( itemElement ); 178562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement->SetAttribute( "distance", "here" ); 179562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 180562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Remove the "Look for Evil Dinosaurs!" item. 181562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // It is 1 more sibling away. We ask the parent to remove 182562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // a particular child. 183562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement = itemElement->NextSiblingElement(); 184562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project todoElement->RemoveChild( itemElement ); 185562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 186562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement = 0; 187562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 188562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 189562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // What follows is an example of created elements and text 190562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // nodes and adding them to the document. 191562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 192562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 193562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Add some meetings. 194562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement item( "Item" ); 195562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project item.SetAttribute( "priority", "1" ); 196562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project item.SetAttribute( "distance", "far" ); 197562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 198562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText text( "Talk to:" ); 199562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 200562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement meeting1( "Meeting" ); 201562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project meeting1.SetAttribute( "where", "School" ); 202562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 203562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement meeting2( "Meeting" ); 204562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project meeting2.SetAttribute( "where", "Lunch" ); 205562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 206562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement attendee1( "Attendee" ); 207562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project attendee1.SetAttribute( "name", "Marple" ); 208562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project attendee1.SetAttribute( "position", "teacher" ); 209562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 210562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement attendee2( "Attendee" ); 211562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project attendee2.SetAttribute( "name", "Voel" ); 212562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project attendee2.SetAttribute( "position", "counselor" ); 213562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 214562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Assemble the nodes we've created: 215562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project meeting1.InsertEndChild( attendee1 ); 216562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project meeting1.InsertEndChild( attendee2 ); 217562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 218562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project item.InsertEndChild( text ); 219562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project item.InsertEndChild( meeting1 ); 220562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project item.InsertEndChild( meeting2 ); 221562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 222562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // And add the node to the existing list after the first child. 223562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = todoElement->FirstChild( "Item" ); 224562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( node ); 225562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project itemElement = node->ToElement(); 226562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( itemElement ); 227562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 228562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project todoElement->InsertAfterChild( itemElement, item ); 229562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 230562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "\n** Demo doc processed: ** \n\n" ); 231562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Print( stdout ); 232562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 233562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 234562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 235562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "** Demo doc processed to stream: ** \n\n" ); 236562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project cout << doc << endl << endl; 237562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 238562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 239562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 240562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Different tests...do we have what we expect? 241562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 242562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 243562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int count = 0; 244562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* element; 245562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 246562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 247562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 248562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 249562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project cout << "** Basic structure. **\n"; 250562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ostringstream outputStream( ostringstream::out ); 251562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project outputStream << doc; 252562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Output stream correct.", string( demoEnd ).c_str(), 253562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project outputStream.str().c_str(), true ); 254562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 255562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 256562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = doc.RootElement(); 257562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Root element exists.", true, ( node != 0 && node->ToElement() ) ); 258562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Root element value is 'ToDo'.", "ToDo", node->Value()); 259562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 260562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->FirstChild(); 261562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "First child exists & is a comment.", true, ( node != 0 && node->ToComment() ) ); 262562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->NextSibling(); 263562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Sibling element exists & is an element.", true, ( node != 0 && node->ToElement() ) ); 264562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Value is 'Item'.", "Item", node->Value() ); 265562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 266562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->FirstChild(); 267562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "First child exists.", true, ( node != 0 && node->ToText() ) ); 268562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Value is 'Go to the'.", "Go to the", node->Value() ); 269562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 270562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 271562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 272562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("\n** Iterators. **\n"); 273562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 274562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Walk all the top level nodes of the document. 275562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count = 0; 276562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for( node = doc.FirstChild(); 277562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node; 278562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->NextSibling() ) 279562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 280562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count++; 281562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 282562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Top level nodes, using First / Next.", 3, count ); 283562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 284562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count = 0; 285562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for( node = doc.LastChild(); 286562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node; 287562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->PreviousSibling() ) 288562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 289562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count++; 290562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 291562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Top level nodes, using Last / Previous.", 3, count ); 292562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 293562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Walk all the top level nodes of the document, 294562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // using a different syntax. 295562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count = 0; 296562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for( node = doc.IterateChildren( 0 ); 297562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node; 298562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = doc.IterateChildren( node ) ) 299562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 300562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count++; 301562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 302562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Top level nodes, using IterateChildren.", 3, count ); 303562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 304562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Walk all the elements in a node. 305562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count = 0; 306562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for( element = todoElement->FirstChildElement(); 307562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project element; 308562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project element = element->NextSiblingElement() ) 309562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 310562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count++; 311562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 312562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Children of the 'ToDo' element, using First / Next.", 313562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 3, count ); 314562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 315562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Walk all the elements in a node by value. 316562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count = 0; 317562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for( node = todoElement->FirstChild( "Item" ); 318562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node; 319562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->NextSibling( "Item" ) ) 320562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 321562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count++; 322562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 323562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "'Item' children of the 'ToDo' element, using First/Next.", 3, count ); 324562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 325562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count = 0; 326562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project for( node = todoElement->LastChild( "Item" ); 327562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node; 328562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project node = node->PreviousSibling( "Item" ) ) 329562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 330562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project count++; 331562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 332562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "'Item' children of the 'ToDo' element, using Last/Previous.", 3, count ); 333562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 334562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 335562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 336562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project cout << "\n** Parsing. **\n"; 337562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project istringstream parse0( "<Element0 attribute0='foo0' attribute1= noquotes attribute2 = '>' />" ); 338562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement element0( "default" ); 339562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project parse0 >> element0; 340562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 341562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Element parsed, value is 'Element0'.", "Element0", element0.Value() ); 342562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Reads attribute 'attribute0=\"foo0\"'.", "foo0", element0.Attribute( "attribute0" )); 343562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Reads incorrectly formatted 'attribute1=noquotes'.", "noquotes", element0.Attribute( "attribute1" ) ); 344562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Read attribute with entity value '>'.", ">", element0.Attribute( "attribute2" ) ); 345562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 346562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 347562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 348562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 349562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* error = "<?xml version=\"1.0\" standalone=\"no\" ?>\n" 350562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<passages count=\"006\" formatversion=\"20020620\">\n" 351562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project " <wrong error>\n" 352562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</passages>"; 353562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 354562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 355562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( error ); 356562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Error row", doc.ErrorRow(), 3 ); 357562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Error column", doc.ErrorCol(), 17 ); 358562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //printf( "error=%d id='%s' row %d col%d\n", (int) doc.Error(), doc.ErrorDesc(), doc.ErrorRow()+1, doc.ErrorCol() + 1 ); 359562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 360562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 361562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 362562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = "\t<?xml version=\"1.0\" standalone=\"no\" ?>\t<room doors='2'>\n" 363562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project " <!-- Silly example -->\n" 364562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project " <door wall='north'>A great door!</door>\n" 365562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "\t<door wall='east'/>" 366562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</room>"; 367562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 368562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 369562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 370562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 371562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docHandle( &doc ); 372562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle roomHandle = docHandle.FirstChildElement( "room" ); 373562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle commentHandle = docHandle.FirstChildElement( "room" ).FirstChild(); 374562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle textHandle = docHandle.FirstChildElement( "room" ).ChildElement( "door", 0 ).FirstChild(); 375562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle door0Handle = docHandle.FirstChildElement( "room" ).ChildElement( 0 ); 376562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle door1Handle = docHandle.FirstChildElement( "room" ).ChildElement( 1 ); 377562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 378562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( docHandle.Node() ); 379562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( roomHandle.Element() ); 380562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( commentHandle.Node() ); 381562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( textHandle.Text() ); 382562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( door0Handle.Element() ); 383562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( door1Handle.Element() ); 384562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 385562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDeclaration* declaration = doc.FirstChild()->ToDeclaration(); 386562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( declaration ); 387562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* room = roomHandle.Element(); 388562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( room ); 389562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlAttribute* doors = room->FirstAttribute(); 390562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( doors ); 391562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText* text = textHandle.Text(); 392562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlComment* comment = commentHandle.Node()->ToComment(); 393562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( comment ); 394562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* door0 = door0Handle.Element(); 395562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* door1 = door1Handle.Element(); 396562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 397562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Declaration row", declaration->Row(), 1 ); 398562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Declaration col", declaration->Column(), 5 ); 399562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: room row", room->Row(), 1 ); 400562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: room col", room->Column(), 45 ); 401562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: doors row", doors->Row(), 1 ); 402562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: doors col", doors->Column(), 51 ); 403562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Comment row", comment->Row(), 2 ); 404562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Comment col", comment->Column(), 3 ); 405562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: text row", text->Row(), 3 ); 406562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: text col", text->Column(), 24 ); 407562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: door0 row", door0->Row(), 3 ); 408562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: door0 col", door0->Column(), 5 ); 409562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: door1 row", door1->Row(), 4 ); 410562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: door1 col", door1->Column(), 5 ); 411562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 412562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 413562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = "\t<?xml version=\"1.0\" standalone=\"no\" ?>\t<room doors='2'>\n" 414562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</room>"; 415562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 416562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 417562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.SetTabSize( 8 ); 418562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 419562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 420562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docHandle( &doc ); 421562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle roomHandle = docHandle.FirstChildElement( "room" ); 422562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 423562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( docHandle.Node() ); 424562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( roomHandle.Element() ); 425562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 426562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* room = roomHandle.Element(); 427562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( room ); 428562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlAttribute* doors = room->FirstAttribute(); 429562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( doors ); 430562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 431562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Tab 8: room row", room->Row(), 1 ); 432562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Tab 8: room col", room->Column(), 49 ); 433562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Tab 8: doors row", doors->Row(), 1 ); 434562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Location tracking: Tab 8: doors col", doors->Column(), 55 ); 435562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 436562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 437562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 438562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = "<doc attr0='1' attr1='2.0' attr2='foo' />"; 439562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 440562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 441562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 442562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 443562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* ele = doc.FirstChildElement(); 444562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 445562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int iVal, result; 446562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project double dVal; 447562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 448562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project result = ele->QueryDoubleAttribute( "attr0", &dVal ); 449562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: int as double", result, TIXML_SUCCESS ); 450562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: int as double", (int)dVal, 1 ); 451562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project result = ele->QueryDoubleAttribute( "attr1", &dVal ); 452562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: double as double", (int)dVal, 2 ); 453562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project result = ele->QueryIntAttribute( "attr1", &iVal ); 454562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: double as int", result, TIXML_SUCCESS ); 455562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: double as int", iVal, 2 ); 456562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project result = ele->QueryIntAttribute( "attr2", &iVal ); 457562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: not a number", result, TIXML_WRONG_TYPE ); 458562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project result = ele->QueryIntAttribute( "bar", &iVal ); 459562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Query attribute: does not exist", result, TIXML_NO_ATTRIBUTE ); 460562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 461562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 462562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 463562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 464562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 465562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project cout << "\n** Streaming. **\n"; 466562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 467562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Round trip check: stream in, then stream back out to verify. The stream 468562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // out has already been checked, above. We use the output 469562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 470562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project istringstream inputStringStream( outputStream.str() ); 471562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument document0; 472562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 473562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project inputStringStream >> document0; 474562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 475562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ostringstream outputStream0( ostringstream::out ); 476562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project outputStream0 << document0; 477562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 478562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Stream round trip correct.", string( demoEnd ).c_str(), 479562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project outputStream0.str().c_str(), true ); 480562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 481562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project std::string str; 482562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project str << document0; 483562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 484562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "String printing correct.", string( demoEnd ).c_str(), 485562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project str.c_str(), true ); 486562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 487562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 488562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 489562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 490562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // UTF-8 testing. It is important to test: 491562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // 1. Making sure name, value, and text read correctly 492562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // 2. Row, Col functionality 493562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // 3. Correct output 494562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // -------------------------------------------------------- 495562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("\n** UTF-8 **\n"); 496562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 497562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc( "utf8test.xml" ); 498562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.LoadFile(); 499562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( doc.Error() && doc.ErrorId() == TiXmlBase::TIXML_ERROR_OPENING_FILE ) { 500562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "WARNING: File 'utf8test.xml' not found.\n" 501562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "(Are you running the test from the wrong directory?)\n" 502562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "Could not test UTF-8 functionality.\n" ); 503562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 504562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project else 505562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 506562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docH( &doc ); 507562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Get the attribute "value" from the "Russian" element and check it. 508562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Russian" ).Element(); 509562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const unsigned char correctValue[] = { 0xd1U, 0x86U, 0xd0U, 0xb5U, 0xd0U, 0xbdU, 0xd0U, 0xbdU, 510562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 0xd0U, 0xbeU, 0xd1U, 0x81U, 0xd1U, 0x82U, 0xd1U, 0x8cU, 0 }; 511562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 512562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Russian value.", (const char*)correctValue, element->Attribute( "value" ), true ); 513562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Russian value row.", 4, element->Row() ); 514562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Russian value column.", 5, element->Column() ); 515562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 516562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const unsigned char russianElementName[] = { 0xd0U, 0xa0U, 0xd1U, 0x83U, 517562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 0xd1U, 0x81U, 0xd1U, 0x81U, 518562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 0xd0U, 0xbaU, 0xd0U, 0xb8U, 519562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 0xd0U, 0xb9U, 0 }; 520562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char russianText[] = "<\xD0\xB8\xD0\xBC\xD0\xB5\xD0\xB5\xD1\x82>"; 521562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 522562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText* text = docH.FirstChildElement( "document" ).FirstChildElement( (const char*) russianElementName ).Child( 0 ).Text(); 523562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Browsing russian element name.", 524562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project russianText, 525562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text->Value(), 526562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true ); 527562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Russian element name row.", 7, text->Row() ); 528562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Russian element name column.", 47, text->Column() ); 529562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 530562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDeclaration* dec = docH.Child( 0 ).Node()->ToDeclaration(); 531562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Declaration column.", 1, dec->Column() ); 532562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Document column.", 1, doc.Column() ); 533562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 534562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Now try for a round trip. 535562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.SaveFile( "utf8testout.xml" ); 536562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 537562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Check the round trip. 538562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project char savedBuf[256]; 539562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project char verifyBuf[256]; 540562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project int okay = 1; 541562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 542562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project FILE* saved = fopen( "utf8testout.xml", "r" ); 543562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project FILE* verify = fopen( "utf8testverify.xml", "r" ); 544562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( saved && verify ) 545562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 546562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project while ( fgets( verifyBuf, 256, verify ) ) 547562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 548562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fgets( savedBuf, 256, saved ); 549562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( strcmp( verifyBuf, savedBuf ) ) 550562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 551562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project okay = 0; 552562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project break; 553562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 554562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 555562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fclose( saved ); 556562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fclose( verify ); 557562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 558562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "UTF-8: Verified multi-language round trip.", 1, okay ); 559562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 560562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // On most Western machines, this is an element that contains 561562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // the word "resume" with the correct accents, in a latin encoding. 562562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // It will be something else completely on non-wester machines, 563562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // which is why TinyXml is switching to UTF-8. 564562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char latin[] = "<element>r\x82sum\x82</element>"; 565562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 566562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument latinDoc; 567562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project latinDoc.Parse( latin, 0, TIXML_ENCODING_LEGACY ); 568562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 569562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = latinDoc.FirstChildElement()->FirstChild()->ToText(); 570562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Legacy encoding: Verify text element.", "r\x82sum\x82", text->Value() ); 571562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 572562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 573562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 574562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////// 575562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Copy and assignment 576562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////// 577562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("\n** Copy and Assignment **\n"); 578562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 579562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement element( "foo" ); 580562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project element.Parse( "<element name='value' />", 0, TIXML_ENCODING_UNKNOWN ); 581562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 582562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement elementCopy( element ); 583562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement elementAssign( "foo" ); 584562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project elementAssign.Parse( "<incorrect foo='bar'/>", 0, TIXML_ENCODING_UNKNOWN ); 585562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project elementAssign = element; 586562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 587562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: element copy #1.", "element", elementCopy.Value() ); 588562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: element copy #2.", "value", elementCopy.Attribute( "name" ) ); 589562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: element assign #1.", "element", elementAssign.Value() ); 590562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: element assign #2.", "value", elementAssign.Attribute( "name" ) ); 591562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: element assign #3.", 0, (int) elementAssign.Attribute( "foo" ) ); 592562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 593562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlComment comment; 594562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project comment.Parse( "<!--comment-->", 0, TIXML_ENCODING_UNKNOWN ); 595562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlComment commentCopy( comment ); 596562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlComment commentAssign; 597562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project commentAssign = commentCopy; 598562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: comment copy.", "comment", commentCopy.Value() ); 599562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: comment assign.", "comment", commentAssign.Value() ); 600562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 601562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlUnknown unknown; 602562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unknown.Parse( "<[unknown]>", 0, TIXML_ENCODING_UNKNOWN ); 603562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlUnknown unknownCopy( unknown ); 604562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlUnknown unknownAssign; 605562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unknownAssign.Parse( "incorrect", 0, TIXML_ENCODING_UNKNOWN ); 606562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project unknownAssign = unknownCopy; 607562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: unknown copy.", "[unknown]", unknownCopy.Value() ); 608562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: unknown assign.", "[unknown]", unknownAssign.Value() ); 609562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 610562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText text( "TextNode" ); 611562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText textCopy( text ); 612562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText textAssign( "incorrect" ); 613562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project textAssign = text; 614562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: text copy.", "TextNode", textCopy.Value() ); 615562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: text assign.", "TextNode", textAssign.Value() ); 616562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 617562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDeclaration dec; 618562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project dec.Parse( "<?xml version='1.0' encoding='UTF-8'?>", 0, TIXML_ENCODING_UNKNOWN ); 619562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDeclaration decCopy( dec ); 620562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDeclaration decAssign; 621562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project decAssign = dec; 622562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 623562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: declaration copy.", "UTF-8", decCopy.Encoding() ); 624562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: text assign.", "UTF-8", decAssign.Encoding() ); 625562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 626562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 627562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project elementCopy.InsertEndChild( textCopy ); 628562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.InsertEndChild( decAssign ); 629562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.InsertEndChild( elementCopy ); 630562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.InsertEndChild( unknownAssign ); 631562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 632562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument docCopy( doc ); 633562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument docAssign; 634562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project docAssign = docCopy; 635562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 636562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifdef TIXML_USE_STL 637562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project std::string original, copy, assign; 638562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project original << doc; 639562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project copy << docCopy; 640562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assign << docAssign; 641562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: document copy.", original.c_str(), copy.c_str(), true ); 642562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Copy/Assign: document assign.", original.c_str(), assign.c_str(), true ); 643562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 644562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 645562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 646562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 647562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 648562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#ifdef TIXML_USE_STL 649562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("\n** Parsing, no Condense Whitespace **\n"); 650562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace( false ); 651562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 652562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project istringstream parse1( "<start>This is \ntext</start>" ); 653562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement text1( "text" ); 654562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project parse1 >> text1; 655562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 656562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest ( "Condense white space OFF.", "This is \ntext", 657562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text1.FirstChild()->Value(), 658562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true ); 659562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 660562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace( true ); 661562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project#endif 662562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 663562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 664562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // GetText(); 665562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 666562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = "<foo>This is text</foo>"; 667562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 668562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 669562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const TiXmlElement* element = doc.RootElement(); 670562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 671562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "GetText() normal use.", "This is text", element->GetText() ); 672562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 673562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project str = "<foo><b>This is text</b></foo>"; 674562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 675562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 676562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project element = doc.RootElement(); 677562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 678562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "GetText() contained element.", element->GetText() == 0, true ); 679562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 680562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project str = "<foo>This is <b>text</b></foo>"; 681562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 682562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace( false ); 683562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 684562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace( true ); 685562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project element = doc.RootElement(); 686562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 687562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "GetText() partial.", "This is ", element->GetText() ); 688562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 689562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 690562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 691562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 692562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // CDATA 693562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 694562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = "<xmlElement>" 695562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<![CDATA[" 696562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "I am > the rules!\n" 697562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "...since I make symbolic puns" 698562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "]]>" 699562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</xmlElement>"; 700562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 701562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 702562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //doc.Print(); 703562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 704562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "CDATA parse.", doc.FirstChildElement()->FirstChild()->Value(), 705562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "I am > the rules!\n...since I make symbolic puns", 706562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true ); 707562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 708562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifdef TIXML_USE_STL 709562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //cout << doc << '\n'; 710562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 711562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 712562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 713562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project istringstream parse0( str ); 714562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project parse0 >> doc; 715562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //cout << doc << '\n'; 716562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 717562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "CDATA stream.", doc.FirstChildElement()->FirstChild()->Value(), 718562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "I am > the rules!\n...since I make symbolic puns", 719562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true ); 720562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 721562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 722562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc1 = doc; 723562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //doc.Print(); 724562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 725562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "CDATA copy.", doc1.FirstChildElement()->FirstChild()->Value(), 726562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "I am > the rules!\n...since I make symbolic puns", 727562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true ); 728562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 729562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 730562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 731562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project ////////////////////////////////////////////////////// 732562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("\n** Bug regression tests **\n"); 733562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 734562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // InsertBeforeChild and InsertAfterChild causes crash. 735562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 736562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement parent( "Parent" ); 737562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement childText0( "childText0" ); 738562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement childText1( "childText1" ); 739562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlNode* childNode0 = parent.InsertEndChild( childText0 ); 740562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlNode* childNode1 = parent.InsertBeforeChild( childNode0, childText1 ); 741562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 742562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Test InsertBeforeChild on empty node.", ( childNode1 == parent.FirstChild() ), true ); 743562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 744562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 745562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 746562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // InsertBeforeChild and InsertAfterChild causes crash. 747562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement parent( "Parent" ); 748562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement childText0( "childText0" ); 749562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement childText1( "childText1" ); 750562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlNode* childNode0 = parent.InsertEndChild( childText0 ); 751562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlNode* childNode1 = parent.InsertAfterChild( childNode0, childText1 ); 752562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 753562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Test InsertAfterChild on empty node. ", ( childNode1 == parent.LastChild() ), true ); 754562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 755562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 756562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Reports of missing constructors, irregular string problems. 757562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 758562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Missing constructor implementation. No test -- just compiles. 759562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText text( "Missing" ); 760562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 761562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifdef TIXML_USE_STL 762562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Missing implementation: 763562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 764562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project string name = "missing"; 765562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.LoadFile( name ); 766562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 767562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText textSTL( name ); 768562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #else 769562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // verifying some basic string functions: 770562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlString a; 771562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlString b( "Hello" ); 772562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlString c( "ooga" ); 773562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 774562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project c = " World!"; 775562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project a = b; 776562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project a += c; 777562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project a = a; 778562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 779562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Basic TiXmlString test. ", "Hello World!", a.c_str() ); 780562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 781562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 782562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 783562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Long filenames crashing STL version 784562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 785562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc( "midsummerNightsDreamWithAVeryLongFilenameToConfuseTheStringHandlingRoutines.xml" ); 786562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool loadOkay = doc.LoadFile(); 787562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project loadOkay = true; // get rid of compiler warning. 788562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Won't pass on non-dev systems. Just a "no crash" check. 789562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //XmlTest( "Long filename. ", true, loadOkay ); 790562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 791562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 792562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 793562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Entities not being written correctly. 794562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // From Lynn Allen 795562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 796562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* passages = 797562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<?xml version=\"1.0\" standalone=\"no\" ?>" 798562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<passages count=\"006\" formatversion=\"20020620\">" 799562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<psg context=\"Line 5 has "quotation marks" and 'apostrophe marks'." 800562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project " It also has <, >, and &, as well as a fake copyright ©.\"> </psg>" 801562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</passages>"; 802562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 803562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc( "passages.xml" ); 804562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( passages ); 805562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlElement* psg = doc.RootElement()->FirstChildElement(); 806562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* context = psg->Attribute( "context" ); 807562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* expected = "Line 5 has \"quotation marks\" and 'apostrophe marks'. It also has <, >, and &, as well as a fake copyright \xC2\xA9."; 808562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 809562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Entity transformation: read. ", expected, context, true ); 810562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 811562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project FILE* textfile = fopen( "textfile.txt", "w" ); 812562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( textfile ) 813562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 814562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project psg->Print( textfile, 0 ); 815562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fclose( textfile ); 816562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 817562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project textfile = fopen( "textfile.txt", "r" ); 818562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( textfile ); 819562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( textfile ) 820562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 821562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project char buf[ 1024 ]; 822562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fgets( buf, 1024, textfile ); 823562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Entity transformation: write. ", 824562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<psg context=\'Line 5 has "quotation marks" and 'apostrophe marks'." 825562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project " It also has <, >, and &, as well as a fake copyright \xC2\xA9.' />", 826562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project buf, 827562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project true ); 828562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 829562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fclose( textfile ); 830562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 831562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 832562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 833562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project FILE* textfile = fopen( "test5.xml", "w" ); 834562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( textfile ) 835562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 836562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fputs("<?xml version='1.0'?><a.elem xmi.version='2.0'/>", textfile); 837562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fclose(textfile); 838562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 839562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 840562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.LoadFile( "test5.xml" ); 841562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "dot in element attributes and names", doc.Error(), 0); 842562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 843562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 844562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 845562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 846562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project FILE* textfile = fopen( "test6.xml", "w" ); 847562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project if ( textfile ) 848562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 849562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fputs("<element><Name>1.1 Start easy ignore fin thickness
</Name></element>", textfile ); 850562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project fclose(textfile); 851562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 852562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 853562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project bool result = doc.LoadFile( "test6.xml" ); 854562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Entity with one digit.", result, true ); 855562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 856562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText* text = doc.FirstChildElement()->FirstChildElement()->FirstChild()->ToText(); 857562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Entity with one digit.", 858562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text->Value(), "1.1 Start easy ignore fin thickness\n" ); 859562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 860562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 861562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 862562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 863562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // DOCTYPE not preserved (950171) 864562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // 865562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype = 866562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<?xml version=\"1.0\" ?>" 867562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!DOCTYPE PLAY SYSTEM 'play.dtd'>" 868562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!ELEMENT title (#PCDATA)>" 869562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!ELEMENT books (title,authors)>" 870562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<element />"; 871562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 872562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 873562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype ); 874562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.SaveFile( "test7.xml" ); 875562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 876562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.LoadFile( "test7.xml" ); 877562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 878562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docH( &doc ); 879562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlUnknown* unknown = docH.Child( 1 ).Unknown(); 880562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Correct value of unknown.", "!DOCTYPE PLAY SYSTEM 'play.dtd'", unknown->Value() ); 881562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifdef TIXML_USE_STL 882562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlNode* node = docH.Child( 2 ).Node(); 883562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project std::string str; 884562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project str << (*node); 885562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Correct streaming of unknown.", "<!ELEMENT title (#PCDATA)>", str.c_str() ); 886562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 887562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 888562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 889562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 890562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // [ 791411 ] Formatting bug 891562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Comments do not stream out correctly. 892562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype = 893562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<!-- Somewhat<evil> -->"; 894562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 895562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype ); 896562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 897562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docH( &doc ); 898562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlComment* comment = docH.Child( 0 ).Node()->ToComment(); 899562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 900562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Comment formatting.", " Somewhat<evil> ", comment->Value() ); 901562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifdef TIXML_USE_STL 902562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project std::string str; 903562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project str << (*comment); 904562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Comment streaming.", "<!-- Somewhat<evil> -->", str.c_str() ); 905562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 906562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 907562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 908562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 909562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // [ 870502 ] White space issues 910562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 911562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlText* text; 912562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docH( &doc ); 913562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 914562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype0 = "<element> This has leading and trailing space </element>"; 915562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype1 = "<element>This has internal space</element>"; 916562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype2 = "<element> This has leading, trailing, and internal space </element>"; 917562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 918562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace( false ); 919562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 920562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype0 ); 921562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = docH.FirstChildElement( "element" ).Child( 0 ).Text(); 922562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "White space kept.", " This has leading and trailing space ", text->Value() ); 923562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 924562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 925562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype1 ); 926562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = docH.FirstChildElement( "element" ).Child( 0 ).Text(); 927562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "White space kept.", "This has internal space", text->Value() ); 928562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 929562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 930562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype2 ); 931562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = docH.FirstChildElement( "element" ).Child( 0 ).Text(); 932562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "White space kept.", " This has leading, trailing, and internal space ", text->Value() ); 933562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 934562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace( true ); 935562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 936562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype0 ); 937562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = docH.FirstChildElement( "element" ).Child( 0 ).Text(); 938562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "White space condensed.", "This has leading and trailing space", text->Value() ); 939562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 940562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 941562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype1 ); 942562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = docH.FirstChildElement( "element" ).Child( 0 ).Text(); 943562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "White space condensed.", "This has internal space", text->Value() ); 944562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 945562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 946562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype2 ); 947562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project text = docH.FirstChildElement( "element" ).Child( 0 ).Text(); 948562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "White space condensed.", "This has leading, trailing, and internal space", text->Value() ); 949562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 950562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 951562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 952562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Double attributes 953562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype = "<element attr='red' attr='blue' />"; 954562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 955562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 956562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype ); 957562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 958562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Parsing repeated attributes.", 0, (int)doc.Error() ); // not an error to tinyxml 959562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Parsing repeated attributes.", "blue", doc.FirstChildElement( "element" )->Attribute( "attr" ) ); 960562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 961562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 962562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 963562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Embedded null in stream. 964562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* doctype = "<element att\0r='red' attr='blue' />"; 965562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 966562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 967562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( doctype ); 968562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Embedded null throws error.", true, doc.Error() ); 969562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 970562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifdef TIXML_USE_STL 971562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project istringstream strm( doctype ); 972562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Clear(); 973562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.ClearError(); 974562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project strm >> doc; 975562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Embedded null throws error.", true, doc.Error() ); 976562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 977562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 978562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 979562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 980562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Legacy mode test. (This test may only pass on a western system) 981562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = 982562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" 983562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "<�>" 984562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "C�nt�nt�������" 985562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project "</�>"; 986562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 987562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 988562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 989562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 990562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project //doc.Print( stdout, 0 ); 991562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 992562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle docHandle( &doc ); 993562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle aHandle = docHandle.FirstChildElement( "�" ); 994562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlHandle tHandle = aHandle.Child( 0 ); 995562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( aHandle.Element() ); 996562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project assert( tHandle.Text() ); 997562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "ISO-8859-1 Parsing.", "C�nt�nt�������", tHandle.Text()->Value() ); 998562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 999562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1000562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 1001562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Empty documents should return TIXML_ERROR_PARSING_EMPTY, bug 1070717 1002562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char* str = " "; 1003562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 1004562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse( str ); 1005562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Empty document error TIXML_ERROR_DOCUMENT_EMPTY", TiXmlBase::TIXML_ERROR_DOCUMENT_EMPTY, doc.ErrorId() ); 1006562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1007562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #ifndef TIXML_USE_STL 1008562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 1009562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // String equality. [ 1006409 ] string operator==/!= no worky in all cases 1010562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlString temp; 1011562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Empty tinyxml string compare equal", ( temp == "" ), true ); 1012562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1013562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlString foo; 1014562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlString bar( "" ); 1015562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Empty tinyxml string compare equal", ( foo == bar ), true ); 1016562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1017562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1018562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 1019562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 1020562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Bug [ 1195696 ] from marlonism 1021562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlBase::SetCondenseWhiteSpace(false); 1022562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument xml; 1023562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project xml.Parse("<text><break/>This hangs</text>"); 1024562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Test safe error return.", xml.Error(), false ); 1025562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1026562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1027562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 1028562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Bug [ 1243992 ] - another infinite loop 1029562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument doc; 1030562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.SetCondenseWhiteSpace(false); 1031562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project doc.Parse("<p><pb></pb>test</p>"); 1032562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1033562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project { 1034562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project // Low entities 1035562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project TiXmlDocument xml; 1036562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project xml.Parse( "<test></test>" ); 1037562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project const char result[] = { 0x0e, 0 }; 1038562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project XmlTest( "Low entities.", xml.FirstChildElement()->GetText(), result ); 1039562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project xml.Print(); 1040562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project } 1041562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1042562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #if defined( WIN32 ) && defined( TUNE ) 1043562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project QueryPerformanceCounter( (LARGE_INTEGER*) (&end) ); 1044562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project QueryPerformanceFrequency( (LARGE_INTEGER*) (&freq) ); 1045562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf( "Time for run: %f\n", ( double )( end-start ) / (double) freq ); 1046562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project #endif 1047562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1048562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project printf ("\nPass %d, Fail %d\n", gPass, gFail); 1049562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project return gFail; 1050562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project} 1051562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1052562be06492c3ac43adf153f550abaede6bc18a44The Android Open Source Project 1053