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

📄 messageheadertest.cpp

📁 C++ class libraries for network-centric, portable applications, integrated perfectly with the C++ St
💻 CPP
字号:
//// MessageHeaderTest.cpp//// $Id: //poco/1.2/Net/testsuite/src/MessageHeaderTest.cpp#1 $//// Copyright (c) 2005-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 "MessageHeaderTest.h"#include "CppUnit/TestCaller.h"#include "CppUnit/TestSuite.h"#include "Poco/Net/MessageHeader.h"#include "Poco/Net/NetException.h"#include <sstream>using Poco::Net::MessageHeader;using Poco::Net::NameValueCollection;using Poco::Net::MessageException;MessageHeaderTest::MessageHeaderTest(const std::string& name): CppUnit::TestCase(name){}MessageHeaderTest::~MessageHeaderTest(){}void MessageHeaderTest::testWrite(){	MessageHeader mh;	mh.set("name1", "value1");	mh.set("name2", "value2");	mh.set("name3", "value3");		std::ostringstream ostr;	mh.write(ostr);	std::string s = ostr.str();	assert (s == "name1: value1\r\nname2: value2\r\nname3: value3\r\n");}void MessageHeaderTest::testRead1(){	std::string s("name1: value1\r\nname2: value2\r\nname3: value3\r\n");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 3);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value2");	assert (mh["name3"] == "value3");}void MessageHeaderTest::testRead2(){	std::string s("name1: value1\nname2: value2\nname3: value3\n");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 3);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value2");	assert (mh["name3"] == "value3");}void MessageHeaderTest::testRead3(){	std::string s("name1: value1\r\n");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 1);	assert (mh["name1"] == "value1");}void MessageHeaderTest::testRead4(){	std::string s("name1: value1\r\nname2: value2\r\n\r\nsomedata");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 2);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value2");	int ch = istr.get();	assert (ch == '\r');	ch = istr.get();	assert (ch == '\n');	ch = istr.get();	assert (ch == 's');}void MessageHeaderTest::testReadFolding1(){	std::string s("name1: value1\r\nname2: value21\r\n value22\r\nname3: value3\r\n");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 3);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value21 value22");	assert (mh["name3"] == "value3");}void MessageHeaderTest::testReadFolding2(){	std::string s("name1: value1\nname2: value21\n\tvalue22\nname3: value3\n");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 3);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value21\tvalue22");	assert (mh["name3"] == "value3");}void MessageHeaderTest::testReadFolding3(){	std::string s("name1: value1\r\nname2: value21\r\n value22\r\n");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 2);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value21 value22");}void MessageHeaderTest::testReadFolding4(){	std::string s("name1: value1\r\nname2: value21\r\n value22\r\n value23");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 2);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value21 value22 value23");}void MessageHeaderTest::testReadFolding5(){	std::string s("name1: value1\r\nname2: value21\r\n value22\r\n value23\r\nname3: value3");	std::istringstream istr(s);	MessageHeader mh;	mh.read(istr);	assert (mh.size() == 3);	assert (mh["name1"] == "value1");	assert (mh["name2"] == "value21 value22 value23");	assert (mh["name3"] == "value3");}void MessageHeaderTest::testReadInvalid1(){	std::string s("name1: value1\r\nname2: value21\r\n value22\r\n value23\r\n");	s.append(300, 'x');	std::istringstream istr(s);	MessageHeader mh;	try	{		mh.read(istr);		fail("malformed message - must throw");	}	catch (MessageException&)	{	}}void MessageHeaderTest::testReadInvalid2(){	std::string s("name1: value1\r\nname2: ");	s.append(8000, 'x');	std::istringstream istr(s);	MessageHeader mh;	try	{		mh.read(istr);		fail("malformed message - must throw");	}	catch (MessageException&)	{	}}void MessageHeaderTest::testSplitElements(){	std::string s;	std::vector<std::string> v;	MessageHeader::splitElements(s, v);	assert (v.empty());		s = "foo";	MessageHeader::splitElements(s, v);	assert (v.size() == 1);	assert (v[0] == "foo");		s = "  foo ";	MessageHeader::splitElements(s, v);	assert (v.size() == 1);	assert (v[0] == "foo");	s = "foo,bar";	MessageHeader::splitElements(s, v);	assert (v.size() == 2);	assert (v[0] == "foo");	assert (v[1] == "bar");		s = "foo,,bar";	MessageHeader::splitElements(s, v);	assert (v.size() == 2);	assert (v[0] == "foo");	assert (v[1] == "bar");	MessageHeader::splitElements(s, v, false);	assert (v.size() == 3);	assert (v[0] == "foo");	assert (v[1] == "");	assert (v[2] == "bar");	s = "foo;param=\"a,b\",bar;param=\"c,d\"";	MessageHeader::splitElements(s, v);	assert (v.size() == 2);	assert (v[0] == "foo;param=\"a,b\"");	assert (v[1] == "bar;param=\"c,d\"");	s = "foo; param=\"a,b\",  bar; param=\"c,d\"";	MessageHeader::splitElements(s, v);	assert (v.size() == 2);	assert (v[0] == "foo; param=\"a,b\"");	assert (v[1] == "bar; param=\"c,d\"");		s = "foo, bar, f00, baz";	MessageHeader::splitElements(s, v);	assert (v.size() == 4);	assert (v[0] == "foo");	assert (v[1] == "bar");	assert (v[2] == "f00");	assert (v[3] == "baz");		s = "a,b,c";	MessageHeader::splitElements(s, v);	assert (v.size() == 3);	assert (v[0] == "a");	assert (v[1] == "b");	assert (v[2] == "c");		s = "a=\"value=\\\\\\\"foo, bar\\\\\\\"\",b=foo";	MessageHeader::splitElements(s, v);	assert (v.size() == 2);	assert (v[0] == "a=\"value=\\\"foo, bar\\\"\"");	assert (v[1] == "b=foo");		s = "a=\\\",b=\\\"";	MessageHeader::splitElements(s, v);	assert (v.size() == 2);	assert (v[0] == "a=\"");	assert (v[1] == "b=\"");	}void MessageHeaderTest::testSplitParameters(){	std::string s;	std::string v;	NameValueCollection p;		MessageHeader::splitParameters(s, v, p);	assert (v.empty());	assert (p.empty());		s = "multipart/related";	MessageHeader::splitParameters(s, v, p);	assert (v == "multipart/related");	assert (p.empty());		s = "multipart/related; boundary=MIME_boundary_01234567";	MessageHeader::splitParameters(s, v, p);	assert (v == "multipart/related");	assert (p.size() == 1);	assert (p["boundary"] == "MIME_boundary_01234567");		s = "multipart/related; boundary=\"MIME_boundary_76543210\"";	MessageHeader::splitParameters(s, v, p);	assert (v == "multipart/related");	assert (p.size() == 1);	assert (p["boundary"] == "MIME_boundary_76543210");		s = "text/plain; charset=us-ascii";	MessageHeader::splitParameters(s, v, p);	assert (v == "text/plain");	assert (p.size() == 1);	assert (p["charset"] == "us-ascii");		s = "value; p1=foo; p2=bar";	MessageHeader::splitParameters(s, v, p);	assert (v == "value");	assert (p.size() == 2);	assert (p["p1"] == "foo");	assert (p["p2"] == "bar");		s = "value; p1=\"foo; bar\"";	MessageHeader::splitParameters(s, v, p);	assert (v == "value");	assert (p.size() == 1);	assert (p["p1"] == "foo; bar");		s = "value ; p1=foo ; p2=bar ";	MessageHeader::splitParameters(s, v, p);	assert (v == "value");	assert (p.size() == 2);	assert (p["p1"] == "foo");	assert (p["p2"] == "bar");}void MessageHeaderTest::setUp(){}void MessageHeaderTest::tearDown(){}CppUnit::Test* MessageHeaderTest::suite(){	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("MessageHeaderTest");	CppUnit_addTest(pSuite, MessageHeaderTest, testWrite);	CppUnit_addTest(pSuite, MessageHeaderTest, testRead1);	CppUnit_addTest(pSuite, MessageHeaderTest, testRead2);	CppUnit_addTest(pSuite, MessageHeaderTest, testRead3);	CppUnit_addTest(pSuite, MessageHeaderTest, testRead4);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding1);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding2);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding3);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding4);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadFolding5);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadInvalid1);	CppUnit_addTest(pSuite, MessageHeaderTest, testReadInvalid2);	CppUnit_addTest(pSuite, MessageHeaderTest, testSplitElements);	CppUnit_addTest(pSuite, MessageHeaderTest, testSplitParameters);	return pSuite;}

⌨️ 快捷键说明

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