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

📄 xmltest.cpp

📁 相信学习过XML的都不会陌生
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		istringstream parse0( str );		parse0 >> doc;		//cout << doc << '\n';		XmlTest( "CDATA stream.", doc.FirstChildElement()->FirstChild()->Value(), 								 "I am > the rules!\n...since I make symbolic puns",								 true );		#endif		TiXmlDocument doc1 = doc;		//doc.Print();		XmlTest( "CDATA copy.", doc1.FirstChildElement()->FirstChild()->Value(), 								 "I am > the rules!\n...since I make symbolic puns",								 true );	}	{		// [ 1482728 ] Wrong wide char parsing		char buf[256];		buf[255] = 0;		for( int i=0; i<255; ++i ) {			buf[i] = (char)((i>=32) ? i : 32);		}		TIXML_STRING str( "<xmlElement><![CDATA[" );		str += buf;		str += "]]></xmlElement>";		TiXmlDocument doc;		doc.Parse( str.c_str() );		TiXmlPrinter printer;		printer.SetStreamPrinting();		doc.Accept( &printer );		XmlTest( "CDATA with all bytes #1.", str.c_str(), printer.CStr(), true );		#ifdef TIXML_USE_STL		doc.Clear();		istringstream iss( printer.Str() );		iss >> doc;		std::string out;		out << doc;		XmlTest( "CDATA with all bytes #2.", out.c_str(), printer.CStr(), true );		#endif	}	{		// [ 1480107 ] Bug-fix for STL-streaming of CDATA that contains tags		// CDATA streaming had a couple of bugs, that this tests for.		const char* str =	"<xmlElement>"								"<![CDATA["									"<b>I am > the rules!</b>\n"									"...since I make symbolic puns"								"]]>"							"</xmlElement>";		TiXmlDocument doc;		doc.Parse( str );		doc.Print();		XmlTest( "CDATA parse. [ 1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), 								 "<b>I am > the rules!</b>\n...since I make symbolic puns",								 true );		#ifdef TIXML_USE_STL		doc.Clear();		istringstream parse0( str );		parse0 >> doc;		XmlTest( "CDATA stream. [ 1480107 ]", doc.FirstChildElement()->FirstChild()->Value(), 								 "<b>I am > the rules!</b>\n...since I make symbolic puns",								 true );		#endif		TiXmlDocument doc1 = doc;		//doc.Print();		XmlTest( "CDATA copy. [ 1480107 ]", doc1.FirstChildElement()->FirstChild()->Value(), 								 "<b>I am > the rules!</b>\n...since I make symbolic puns",								 true );	}	//////////////////////////////////////////////////////	// Visit()	//////////////////////////////////////////////////////	printf( "\n** Fuzzing... **\n" );	const int FUZZ_ITERATION = 300;	// The only goal is not to crash on bad input.	int len = (int) strlen( demoStart );	for( int i=0; i<FUZZ_ITERATION; ++i ) 	{		char* demoCopy = new char[ len+1 ];		strcpy( demoCopy, demoStart );		demoCopy[ i%len ] = (char)((i+1)*3);		demoCopy[ (i*7)%len ] = '>';		demoCopy[ (i*11)%len ] = '<';		TiXmlDocument xml;		xml.Parse( demoCopy );		delete [] demoCopy;	}	printf( "** Fuzzing Complete. **\n" );		//////////////////////////////////////////////////////	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			// verifying 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 + -