textiteratortest.cpp

来自「C++ class libraries for network-centric,」· C++ 代码 · 共 259 行

CPP
259
字号
//// TextIteratorTest.cpp//// $Id: //poco/1.2/Foundation/testsuite/src/TextIteratorTest.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 "TextIteratorTest.h"#include "CppUnit/TestCaller.h"#include "CppUnit/TestSuite.h"#include "Poco/TextIterator.h"#include "Poco/Latin1Encoding.h"#include "Poco/UTF8Encoding.h"using Poco::TextIterator;using Poco::Latin1Encoding;using Poco::UTF8Encoding;TextIteratorTest::TextIteratorTest(const std::string& name): CppUnit::TestCase(name){}TextIteratorTest::~TextIteratorTest(){}void TextIteratorTest::testEmptyLatin1(){	Latin1Encoding encoding;	std::string text;	TextIterator it(text, encoding);	TextIterator end(text);		assert (it == end);}void TextIteratorTest::testOneLatin1(){	Latin1Encoding encoding;	std::string text("x");	TextIterator it(text, encoding);	TextIterator end(text);		assert (it != end);	assert (*it == 'x');	++it;	assert (it == end);}void TextIteratorTest::testLatin1(){	Latin1Encoding encoding;	std::string text("Latin1");	TextIterator it(text, encoding);	TextIterator end(text);		assert (it != end);	assert (*it++ == 'L');	assert (it != end);	assert (*it++ == 'a');	assert (it != end);	assert (*it++ == 't');	assert (it != end);	assert (*it++ == 'i');	assert (it != end);	assert (*it++ == 'n');	assert (it != end);	assert (*it++ == '1');	assert (it == end);		std::string empty;	it  = TextIterator(empty, encoding);	end = TextIterator(empty);	assert (it == end);}void TextIteratorTest::testEmptyUTF8(){	UTF8Encoding encoding;	std::string text;	TextIterator it(text, encoding);	TextIterator end(text);		assert (it == end);}void TextIteratorTest::testOneUTF8(){	UTF8Encoding encoding;		// 1 byte sequence	std::string text("x");	TextIterator it(text, encoding);	TextIterator end(text);		assert (it != end);	assert (*it == 'x');	++it;	assert (it == end);		unsigned char data[Poco::TextEncoding::MAX_SEQUENCE_LENGTH];		// 2 byte sequence	int n = encoding.convert(0xab, data, sizeof(data));	assert (n == 2);	text.assign((char*) data, n);	it  = TextIterator(text, encoding);	end = TextIterator(text);		assert (it != end);	assert (*it++ == 0xab);	assert (it == end);	// 3 byte sequence	n = encoding.convert(0xabcd, data, sizeof(data));	assert (n == 3);	text.assign((char*) data, n);	it  = TextIterator(text, encoding);	end = TextIterator(text);		assert (it != end);	assert (*it++ == 0xabcd);	assert (it == end);	// 4 byte sequence	n = encoding.convert(0xabcde, data, sizeof(data));	assert (n == 4);	text.assign((char*) data, n);	it  = TextIterator(text, encoding);	end = TextIterator(text);		assert (it != end);	assert (*it++ == 0xabcde);	assert (it == end);		// 5 byte sequence	n = encoding.convert(0xabcdef, data, sizeof(data));	assert (n == 5);	text.assign((char*) data, n);	it  = TextIterator(text, encoding);	end = TextIterator(text);		assert (it != end);	assert (*it++ == 0xabcdef);	assert (it == end);	// 6 byte sequence	n = encoding.convert(0xfabcdef, data, sizeof(data));	assert (n == 6);	text.assign((char*) data, n);	it  = TextIterator(text, encoding);	end = TextIterator(text);		assert (it != end);	assert (*it++ == 0xfabcdef);	assert (it == end);}void TextIteratorTest::testUTF8(){	UTF8Encoding encoding;	const unsigned char greek[] = {0x20, 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0x20, 0x00};	std::string text((const char*) greek);	TextIterator it(text, encoding);	TextIterator end(text);		assert (it != end);	assert (*it++ == 0x0020);	assert (it != end);	assert (*it++ == 0x03ba);	assert (it != end);	assert (*it++ == 0x1f79);	assert (it != end);	assert (*it++ == 0x03c3);	assert (it != end);	assert (*it++ == 0x03bc);	assert (it != end);	assert (*it++ == 0x03b5);	assert (it != end);	assert (*it++ == 0x0020);	assert (it == end);}void TextIteratorTest::testSwap(){	Latin1Encoding encoding;	std::string text("x");	TextIterator it1(text, encoding);	TextIterator it2(text, encoding);	TextIterator end(text);		assert (it1 == it2);	it2.swap(end);	assert (it1 != it2);	it2.swap(end);	assert (it1 == it2);}void TextIteratorTest::setUp(){}void TextIteratorTest::tearDown(){}CppUnit::Test* TextIteratorTest::suite(){	CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TextIteratorTest");	CppUnit_addTest(pSuite, TextIteratorTest, testEmptyLatin1);	CppUnit_addTest(pSuite, TextIteratorTest, testOneLatin1);	CppUnit_addTest(pSuite, TextIteratorTest, testLatin1);	CppUnit_addTest(pSuite, TextIteratorTest, testEmptyUTF8);	CppUnit_addTest(pSuite, TextIteratorTest, testOneUTF8);	CppUnit_addTest(pSuite, TextIteratorTest, testUTF8);	CppUnit_addTest(pSuite, TextIteratorTest, testSwap);	return pSuite;}

⌨️ 快捷键说明

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