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

📄 saxparsertest.cpp

📁 C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ St
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//// SAXParserTest.cpp//// $Id: //poco/1.2/XML/testsuite/src/SAXParserTest.cpp#1 $//// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.// and Contributors.//// Permission is hereby granted, free of charge, to any person or organization// obtaining a copy of the software and accompanying documentation covered by// this license (the "Software") to use, reproduce, display, distribute,// execute, and transmit the Software, and to prepare derivative works of the// Software, and to permit third-parties to whom the Software is furnished to// do so, all subject to the following:// // The copyright notices in the Software and this entire statement, including// the above license grant, this restriction and the following disclaimer,// must be included in all copies of the Software, in whole or in part, and// all derivative works of the Software, unless such copies or derivative// works are solely in the form of machine-executable object code generated by// a source language processor.// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER// DEALINGS IN THE SOFTWARE.//#include "SAXParserTest.h"#include "CppUnit/TestCaller.h"#include "CppUnit/TestSuite.h"#include "Poco/SAX/SAXParser.h"#include "Poco/SAX/InputSource.h"#include "Poco/SAX/EntityResolver.h"#include "Poco/SAX/SAXException.h"#include "Poco/SAX/WhitespaceFilter.h"#include "Poco/XML/XMLWriter.h"#include "Poco/Latin9Encoding.h"#include <sstream>#include <fstream>using Poco::XML::SAXParser;using Poco::XML::XMLWriter;using Poco::XML::XMLReader;using Poco::XML::InputSource;using Poco::XML::EntityResolver;using Poco::XML::XMLString;using Poco::XML::SAXParseException;using Poco::XML::WhitespaceFilter;class TestEntityResolver: public EntityResolver{public:	InputSource* resolveEntity(const XMLString* publicId, const XMLString& systemId)	{		if (systemId == "include.xml")		{			std::istringstream* istr = new std::istringstream(SAXParserTest::INCLUDE);			InputSource* pIS = new InputSource(*istr);			pIS->setSystemId(systemId);			return pIS;		}		else if (systemId == "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent")		{			std::istringstream* istr = new std::istringstream(SAXParserTest::XHTML_LATIN1_ENTITIES);			InputSource* pIS = new InputSource(*istr);			pIS->setSystemId(systemId);			return pIS;		}		return 0;	}		void releaseInputSource(InputSource* pSource)	{		delete pSource->getByteStream();		delete pSource;	}};SAXParserTest::SAXParserTest(const std::string& name): CppUnit::TestCase(name){}SAXParserTest::~SAXParserTest(){}void SAXParserTest::testSimple1(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, SIMPLE1);	assert (xml == "<foo/>");}void SAXParserTest::testSimple2(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, SIMPLE2);	assert (xml == "<foo/>");}void SAXParserTest::testAttributes(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, ATTRIBUTES);	assert (xml == ATTRIBUTES);}void SAXParserTest::testCDATA(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, CDATA);	assert (xml == CDATA);}void SAXParserTest::testComment(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, COMMENT);	assert (xml == COMMENT);}void SAXParserTest::testPI(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, PROCESSING_INSTRUCTION);	assert (xml == PROCESSING_INSTRUCTION);}void SAXParserTest::testDTD(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, DTD);	assert (xml == "<!DOCTYPE test SYSTEM \"test.dtd\"><foo/>");}void SAXParserTest::testInternalEntity(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, INTERNAL_ENTITY);	assert (xml ==	"<!DOCTYPE sample><root>\n\t<company>Applied Informatics</company>\n</root>");}void SAXParserTest::testNotation(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, NOTATION);	assert (xml == "<!DOCTYPE test [<!NOTATION mov SYSTEM \"quicktime\">"	               "<!NOTATION xml PUBLIC \"-//W3C//NOTATION XML 1.0//EN\">]>"	               "<foo/>");}void SAXParserTest::testExternalUnparsed(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, EXTERNAL_UNPARSED);	assert (xml == "<!DOCTYPE test [<!NOTATION mov SYSTEM \"quicktime\">"	               "<!ENTITY movie SYSTEM \"movie.mov\" NDATA mov>]>"	               "<sample/>");}void SAXParserTest::testExternalParsed(){	SAXParser parser;	TestEntityResolver resolver;	parser.setEntityResolver(&resolver);	parser.setFeature(XMLReader::FEATURE_EXTERNAL_GENERAL_ENTITIES, true);	std::string xml = parse(parser, XMLWriter::CANONICAL, EXTERNAL_PARSED);	assert (xml == "<!DOCTYPE test><sample>\n\t<elem>\n\tAn external entity.\n</elem>\n\n</sample>");}void SAXParserTest::testDefaultNamespace(){	SAXParser parser;	std::string xml = parse(parser, XMLWriter::CANONICAL, DEFAULT_NAMESPACE);	assert (xml ==	DEFAULT_NAMESPACE);}void SAXParserTest::testNamespaces(){	SAXParser parser;	parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);	parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, true);	std::string xml = parse(parser, XMLWriter::CANONICAL, NAMESPACES);	assert (xml == NAMESPACES);}void SAXParserTest::testNamespacesNoPrefixes(){	SAXParser parser;	parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);	parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, false);	std::string xml = parse(parser, XMLWriter::CANONICAL, NAMESPACES);	assert (xml == NAMESPACES);}void SAXParserTest::testNoNamespaces(){	SAXParser parser;	parser.setFeature(XMLReader::FEATURE_NAMESPACES, false);	std::string xml = parse(parser, XMLWriter::CANONICAL, NAMESPACES);	assert (xml == NAMESPACES);}void SAXParserTest::testUndeclaredNamespace(){	SAXParser parser;	parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);	parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, true);	try	{		std::string xml = parse(parser, XMLWriter::CANONICAL, UNDECLARED_NAMESPACE);		fail("undeclared namespace - must throw exception");	}	catch (SAXParseException&)	{	}}void SAXParserTest::testUndeclaredNamespaceNoPrefixes(){	SAXParser parser;	parser.setFeature(XMLReader::FEATURE_NAMESPACES, true);	parser.setFeature(XMLReader::FEATURE_NAMESPACE_PREFIXES, false);	try	{		std::string xml = parse(parser, XMLWriter::CANONICAL, UNDECLARED_NAMESPACE);		fail("undeclared namespace - must throw exception");	}	catch (SAXParseException&)	{	}}void SAXParserTest::testUndeclaredNoNamespace(){	SAXParser parser;	parser.setFeature(XMLReader::FEATURE_NAMESPACES, false);	std::string xml = parse(parser, XMLWriter::CANONICAL, UNDECLARED_NAMESPACE);	assert (xml == UNDECLARED_NAMESPACE);}void SAXParserTest::testRSS(){	SAXParser parser;	WhitespaceFilter filter(&parser);	TestEntityResolver resolver;	filter.setEntityResolver(&resolver);	parser.setFeature(XMLReader::FEATURE_EXTERNAL_GENERAL_ENTITIES, true);	parser.setFeature(XMLReader::FEATURE_EXTERNAL_PARAMETER_ENTITIES, true);		std::istringstream istr(RSS);	std::ofstream ostr("rss.xml", std::ios::binary);	XMLWriter writer(ostr, XMLWriter::CANONICAL | XMLWriter::PRETTY_PRINT);	filter.setContentHandler(&writer);	filter.setDTDHandler(&writer);	filter.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));	InputSource source(istr);	filter.parse(&source);}void SAXParserTest::testEncoding(){	SAXParser parser;	Poco::Latin9Encoding encoding;	parser.addEncoding("ISO-8859-15", &encoding); 		std::istringstream istr(ENCODING);	std::ostringstream ostr;	XMLWriter writer(ostr, XMLWriter::WRITE_XML_DECLARATION, "ISO-8859-15", encoding);	parser.setContentHandler(&writer);	parser.setDTDHandler(&writer);	parser.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));	InputSource source(istr);	parser.parse(&source);		std::string xml = ostr.str();	assert (xml == ENCODING);}void SAXParserTest::setUp(){}void SAXParserTest::tearDown(){}std::string SAXParserTest::parse(XMLReader& reader, int options, const std::string& data){	std::istringstream istr(data);	std::ostringstream ostr;	XMLWriter writer(ostr, options);	reader.setContentHandler(&writer);	reader.setDTDHandler(&writer);	reader.setProperty(XMLReader::PROPERTY_LEXICAL_HANDLER, static_cast<Poco::XML::LexicalHandler*>(&writer));	InputSource source(istr);	reader.parse(&source);	return ostr.str();}CppUnit::Test* SAXParserTest::suite(){

⌨️ 快捷键说明

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