⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmltest.cpp

📁 linux下的小型xml开发软件,TinyXml is a simple, small, C++ XML parser that can be easily
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		result = ele->QueryIntAttribute( "attr2", &iVal );		XmlTest( "Query attribute: not a number", result, TIXML_WRONG_TYPE );		result = ele->QueryIntAttribute( "bar", &iVal );		XmlTest( "Query attribute: does not exist", result, TIXML_NO_ATTRIBUTE );	}#ifdef TIXML_USE_STL	{		//////////////////////////////////////////////////////		cout << "\n** Streaming. **\n";		// Round trip check: stream in, then stream back out to verify. The stream		// out has already been checked, above. We use the output		istringstream inputStringStream( outputStream.str() );		TiXmlDocument document0;		inputStringStream >> document0;		ostringstream outputStream0( ostringstream::out );		outputStream0 << document0;		XmlTest( "Stream round trip correct.",	string( demoEnd ).c_str(), 												outputStream0.str().c_str(), true );		std::string str;		str << document0;		XmlTest( "String printing correct.", string( demoEnd ).c_str(), 											 str.c_str(), true );	}#endif	// --------------------------------------------------------	// UTF-8 testing. It is important to test:	//	1. Making sure name, value, and text read correctly	//	2. Row, Col functionality	//	3. Correct output	// --------------------------------------------------------	printf ("\n** UTF-8 **\n");	{		TiXmlDocument doc( "utf8test.xml" );		doc.LoadFile();		TiXmlHandle docH( &doc );		// Get the attribute "value" from the "Russian" element and check it.		TiXmlElement* element = docH.FirstChildElement( "document" ).FirstChildElement( "Russian" ).Element();		const char correctValue[] = {	(char)0xd1, (char)0x86, (char)0xd0, (char)0xb5, (char)0xd0, (char)0xbd, (char)0xd0, (char)0xbd, 										(char)0xd0, (char)0xbe, (char)0xd1, (char)0x81, (char)0xd1, (char)0x82, (char)0xd1, (char)0x8c, 0 };		XmlTest( "UTF-8: Russian value.", correctValue, element->Attribute( "value" ), true );		XmlTest( "UTF-8: Russian value row.", 4, element->Row() );		XmlTest( "UTF-8: Russian value column.", 5, element->Column() );		const char russianElementName[] = {	(char)0xd0, (char)0xa0, (char)0xd1, (char)0x83,											(char)0xd1, (char)0x81, (char)0xd1, (char)0x81,											(char)0xd0, (char)0xba, (char)0xd0, (char)0xb8,											(char)0xd0, (char)0xb9, 0 };		const char russianText[] = "<\xD0\xB8\xD0\xBC\xD0\xB5\xD0\xB5\xD1\x82>";		TiXmlText* text = docH.FirstChildElement( "document" ).FirstChildElement( russianElementName ).Child( 0 ).Text();		XmlTest( "UTF-8: Browsing russian element name.",				 russianText,				 text->Value(),				 true );		XmlTest( "UTF-8: Russian element name row.", 7, text->Row() );		XmlTest( "UTF-8: Russian element name column.", 47, text->Column() );		TiXmlDeclaration* dec = docH.Child( 0 ).Node()->ToDeclaration();		XmlTest( "UTF-8: Declaration column.", 1, dec->Column() );		XmlTest( "UTF-8: Document column.", 1, doc.Column() );		// Now try for a round trip.		doc.SaveFile( "utf8testout.xml" );		// Check the round trip.		char savedBuf[256];		char verifyBuf[256];		int okay = 1;		FILE* saved  = fopen( "utf8testout.xml", "r" );		FILE* verify = fopen( "utf8testverify.xml", "r" );		if ( saved && verify )		{			while ( fgets( verifyBuf, 256, verify ) )			{				fgets( savedBuf, 256, saved );				if ( strcmp( verifyBuf, savedBuf ) )				{					okay = 0;					break;				}			}			fclose( saved );			fclose( verify );		}		XmlTest( "UTF-8: Verified multi-language round trip.", 1, okay );		// On most Western machines, this is an element that contains		// the word "resume" with the correct accents, in a latin encoding.		// It will be something else comletely on non-wester machines,		// which is why TinyXml is switching to UTF-8.		const char latin[] = "<element>r\x82sum\x82</element>";		TiXmlDocument latinDoc;		latinDoc.Parse( latin, 0, TIXML_ENCODING_LEGACY );		text = latinDoc.FirstChildElement()->FirstChild()->ToText();		XmlTest( "Legacy encoding: Verify text element.", "r\x82sum\x82", text->Value() );	}		//////////////////////	// Copy and assignment	//////////////////////	printf ("\n** Copy and Assignment **\n");	{		TiXmlElement element( "foo" );		element.Parse( "<element name='value' />", 0, TIXML_ENCODING_UNKNOWN );		TiXmlElement elementCopy( element );		TiXmlElement elementAssign( "foo" );		elementAssign.Parse( "<incorrect foo='bar'/>", 0, TIXML_ENCODING_UNKNOWN );		elementAssign = element;		XmlTest( "Copy/Assign: element copy #1.", "element", elementCopy.Value() );		XmlTest( "Copy/Assign: element copy #2.", "value", elementCopy.Attribute( "name" ) );		XmlTest( "Copy/Assign: element assign #1.", "element", elementAssign.Value() );		XmlTest( "Copy/Assign: element assign #2.", "value", elementAssign.Attribute( "name" ) );		XmlTest( "Copy/Assign: element assign #3.", 0, (int) elementAssign.Attribute( "foo" ) );		TiXmlComment comment;		comment.Parse( "<!--comment-->", 0, TIXML_ENCODING_UNKNOWN );		TiXmlComment commentCopy( comment );		TiXmlComment commentAssign;		commentAssign = commentCopy;		XmlTest( "Copy/Assign: comment copy.", "comment", commentCopy.Value() );		XmlTest( "Copy/Assign: comment assign.", "comment", commentAssign.Value() );		TiXmlUnknown unknown;		unknown.Parse( "<[unknown]>", 0, TIXML_ENCODING_UNKNOWN );		TiXmlUnknown unknownCopy( unknown );		TiXmlUnknown unknownAssign;		unknownAssign.Parse( "incorrect", 0, TIXML_ENCODING_UNKNOWN );		unknownAssign = unknownCopy;		XmlTest( "Copy/Assign: unknown copy.", "[unknown]", unknownCopy.Value() );		XmlTest( "Copy/Assign: unknown assign.", "[unknown]", unknownAssign.Value() );				TiXmlText text( "TextNode" );		TiXmlText textCopy( text );		TiXmlText textAssign( "incorrect" );		textAssign = text;		XmlTest( "Copy/Assign: text copy.", "TextNode", textCopy.Value() );		XmlTest( "Copy/Assign: text assign.", "TextNode", textAssign.Value() );		TiXmlDeclaration dec;		dec.Parse( "<?xml version='1.0' encoding='UTF-8'?>", 0, TIXML_ENCODING_UNKNOWN );		TiXmlDeclaration decCopy( dec );		TiXmlDeclaration decAssign;		decAssign = dec;		XmlTest( "Copy/Assign: declaration copy.", "UTF-8", decCopy.Encoding() );		XmlTest( "Copy/Assign: text assign.", "UTF-8", decAssign.Encoding() );		TiXmlDocument doc;		elementCopy.InsertEndChild( textCopy );		doc.InsertEndChild( decAssign );		doc.InsertEndChild( elementCopy );		doc.InsertEndChild( unknownAssign );		TiXmlDocument docCopy( doc );		TiXmlDocument docAssign;		docAssign = docCopy;		#ifdef TIXML_USE_STL		std::string original, copy, assign;		original << doc;		copy << docCopy;		assign << docAssign;		XmlTest( "Copy/Assign: document copy.", original.c_str(), copy.c_str(), true );		XmlTest( "Copy/Assign: document assign.", original.c_str(), assign.c_str(), true );		#endif	}		//////////////////////////////////////////////////////#ifdef TIXML_USE_STL	printf ("\n** Parsing, no Condense Whitespace **\n");	TiXmlBase::SetCondenseWhiteSpace( false );	istringstream parse1( "<start>This  is    \ntext</start>" );	TiXmlElement text1( "text" );	parse1 >> text1;	XmlTest ( "Condense white space OFF.", "This  is    \ntext",				text1.FirstChild()->Value(),				true );	TiXmlBase::SetCondenseWhiteSpace( true );#endif	//////////////////////////////////////////////////////	printf ("\n** Bug regression tests **\n");	// InsertBeforeChild and InsertAfterChild causes crash.	{		TiXmlElement parent( "Parent" );		TiXmlElement childText0( "childText0" );		TiXmlElement childText1( "childText1" );		TiXmlNode* childNode0 = parent.InsertEndChild( childText0 );		TiXmlNode* childNode1 = parent.InsertBeforeChild( childNode0, childText1 );		XmlTest( "Test InsertBeforeChild on empty node.", ( childNode1 == parent.FirstChild() ), true );	}	{		// InsertBeforeChild and InsertAfterChild causes crash.		TiXmlElement parent( "Parent" );		TiXmlElement childText0( "childText0" );		TiXmlElement childText1( "childText1" );		TiXmlNode* childNode0 = parent.InsertEndChild( childText0 );		TiXmlNode* childNode1 = parent.InsertAfterChild( childNode0, childText1 );		XmlTest( "Test InsertAfterChild on empty node. ", ( childNode1 == parent.LastChild() ), true );	}	// Reports of missing constructors, irregular string problems.	{		// Missing constructor implementation. No test -- just compiles.		TiXmlText text( "Missing" );		#ifdef TIXML_USE_STL			// Missing implementation:			TiXmlDocument doc;			string name = "missing";			doc.LoadFile( name );			TiXmlText textSTL( name );		#else			// verifing some basic string functions:			TiXmlString a;			TiXmlString b = "Hello";			TiXmlString c = "ooga";			c = " World!";			a = b;			a += c;			a = a;			XmlTest( "Basic TiXmlString test. ", "Hello World!", a.c_str() );		#endif 	}	// Long filenames crashing STL version	{		TiXmlDocument doc( "midsummerNightsDreamWithAVeryLongFilenameToConfuseTheStringHandlingRoutines.xml" );		bool loadOkay = doc.LoadFile();		loadOkay = true;	// get rid of compiler warning.		// Won't pass on non-dev systems. Just a "no crash" check.		//XmlTest( "Long filename. ", true, loadOkay );	}	{		// Entities not being written correctly.		// From Lynn Allen		const char* passages =			"<?xml version=\"1.0\" standalone=\"no\" ?>"			"<passages count=\"006\" formatversion=\"20020620\">"				"<psg context=\"Line 5 has &quot;quotation marks&quot; and &apos;apostrophe marks&apos;."				" It also has &lt;, &gt;, and &amp;, as well as a fake copyright &#xA9;.\"> </psg>"			"</passages>";		TiXmlDocument doc( "passages.xml" );		doc.Parse( passages );		TiXmlElement* psg = doc.RootElement()->FirstChildElement();		const char* context = psg->Attribute( "context" );		const char* expected = "Line 5 has \"quotation marks\" and 'apostrophe marks'. It also has <, >, and &, as well as a fake copyright \xC2\xA9.";		XmlTest( "Entity transformation: read. ", expected, context, true );		FILE* textfile = fopen( "textfile.txt", "w" );		if ( textfile )		{			psg->Print( textfile, 0 );			fclose( textfile );		}		textfile = fopen( "textfile.txt", "r" );		assert( textfile );		if ( textfile )		{			char buf[ 1024 ];			fgets( buf, 1024, textfile );			XmlTest( "Entity transformation: write. ",					 "<psg context=\'Line 5 has &quot;quotation marks&quot; and &apos;apostrophe marks&apos;."					 " It also has &lt;, &gt;, and &amp;, as well as a fake copyright \xC2\xA9.' />",					 buf,					 true );		}		fclose( textfile );	}    {		FILE* textfile = fopen( "test5.xml", "w" );		if ( textfile )		{            fputs("<?xml version='1.0'?><a.elem xmi.version='2.0'/>", textfile);            fclose(textfile);			TiXmlDocument doc;            doc.LoadFile( "test5.xml" );            XmlTest( "dot in element attributes and names", doc.Error(), 0);		}    }	{		FILE* textfile = fopen( "test6.xml", "w" );		if ( textfile )		{            fputs("<element><Name>1.1 Start easy ignore fin thickness&#xA;</Name></element>", textfile );            fclose(textfile);            TiXmlDocument doc;            bool result = doc.LoadFile( "test6.xml" );            XmlTest( "Entity with one digit.", result, true );			TiXmlText* text = doc.FirstChildElement()->FirstChildElement()->FirstChild()->ToText();			XmlTest( "Entity with one digit.",						text->Value(), "1.1 Start easy ignore fin thickness\n" );		}    }	{		// DOCTYPE not preserved (950171)		// 		const char* doctype =			"<?xml version=\"1.0\" ?>"			"<!DOCTYPE PLAY SYSTEM 'play.dtd'>"			"<!ELEMENT title (#PCDATA)>"			"<!ELEMENT books (title,authors)>"			"<element />";		TiXmlDocument doc;		doc.Parse( doctype );		doc.SaveFile( "test7.xml" );		doc.Clear();		doc.LoadFile( "test7.xml" );				TiXmlHandle docH( &doc );		TiXmlUnknown* unknown = docH.Child( 1 ).Unknown();		XmlTest( "Correct value of unknown.", "!DOCTYPE PLAY SYSTEM 'play.dtd'", unknown->Value() );		#ifdef TIXML_USE_STL		TiXmlNode* node = docH.Child( 2 ).Node();		std::string str;		str << (*node);		XmlTest( "Correct streaming of unknown.", "<!ELEMENT title (#PCDATA)>", str.c_str() );		#endif	}	{		// [ 791411 ] Formatting bug		// Comments do not stream out correctly.		const char* doctype = 			"<!-- Somewhat<evil> -->";		TiXmlDocument doc;		doc.Parse( doctype );		TiXmlHandle docH( &doc );		TiXmlComment* comment = docH.Child( 0 ).Node()->ToComment();		XmlTest( "Comment formatting.", " Somewhat<evil> ", comment->Value() );		#ifdef TIXML_USE_STL		std::string str;		str << (*comment);		XmlTest( "Comment streaming.", "<!-- Somewhat<evil> -->", str.c_str() );		#endif	}	{		// [ 870502 ] White space issues		TiXmlDocument doc;		TiXmlText* text;		TiXmlHandle docH( &doc );			const char* doctype0 = "<element> This has leading and trailing space </element>";		const char* doctype1 = "<element>This has  internal space</element>";		const char* doctype2 = "<element> This has leading, trailing, and  internal space </element>";		TiXmlBase::SetCondenseWhiteSpace( false );		doc.Clear();		doc.Parse( doctype0 );		text = docH.FirstChildElement( "element" ).Child( 0 ).Text();		XmlTest( "White space kept.", " This has leading and trailing space ", text->Value() );		doc.Clear();		doc.Parse( doctype1 );		text = docH.FirstChildElement( "element" ).Child( 0 ).Text();		XmlTest( "White space kept.", "This has  internal space", text->Value() );		doc.Clear();		doc.Parse( doctype2 );		text = docH.FirstChildElement( "element" ).Child( 0 ).Text();		XmlTest( "White space kept.", " This has leading, trailing, and  internal space ", text->Value() );		TiXmlBase::SetCondenseWhiteSpace( true );		doc.Clear();		doc.Parse( doctype0 );		text = docH.FirstChildElement( "element" ).Child( 0 ).Text();		XmlTest( "White space condensed.", "This has leading and trailing space", text->Value() );		doc.Clear();		doc.Parse( doctype1 );		text = docH.FirstChildElement( "element" ).Child( 0 ).Text();		XmlTest( "White space condensed.", "This has internal space", text->Value() );		doc.Clear();		doc.Parse( doctype2 );		text = docH.FirstChildElement( "element" ).Child( 0 ).Text();		XmlTest( "White space condensed.", "This has leading, trailing, and internal space", text->Value() );	}	{		// Double attributes		const char* doctype = "<element attr='red' attr='blue' />";		TiXmlDocument doc;		doc.Parse( doctype );				XmlTest( "Parsing repeated attributes.", 0, (int)doc.Error() );	// not an  error to tinyxml		XmlTest( "Parsing repeated attributes.", "blue", doc.FirstChildElement( "element" )->Attribute( "attr" ) );	}	{		// Embedded null in stream.		const char* doctype = "<element att\0r='red' attr='blue' />";		TiXmlDocument doc;		doc.Parse( doctype );		XmlTest( "Embedded null throws error.", true, doc.Error() );		#ifdef TIXML_USE_STL		istringstream strm( doctype );		doc.Clear();		doc.ClearError();		strm >> doc;		XmlTest( "Embedded null throws error.", true, doc.Error() );		#endif	}    {            // Legacy mode test. (This test may only pass on a western system)            const char* str =                        "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"                        "<

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -