diff options
| author | Mook <marky@activestate.com> | 2012-05-29 12:44:34 -0700 | 
|---|---|---|
| committer | Mook <marky@activestate.com> | 2012-05-29 12:44:34 -0700 | 
| commit | 7e9e5b1e059efa957d2d7e9fa6b364706f621711 (patch) | |
| tree | 24e9e113362f6a3f05f39e64ef9207f712b4e1a9 /test/unit/testCharClassify.cxx | |
| parent | 08d35504786635e06b870b2674da38c0e89521cd (diff) | |
| download | scintilla-mirror-7e9e5b1e059efa957d2d7e9fa6b364706f621711.tar.gz | |
add CharClassifier::GetCharsOfClass
add SCI_GETWORDCHARS(<unused>, stringresult chars) command to get word chars
add SCI_GETWHITESPACECHARS(<unused>, stringresult chars) to get whitespace chars
add SCI_GETPUNCTUATIONCHARS(<unused>, stringresult chars) to get punctutation
also add tests for {Set,Get}{Word,Whitespce,Punctuation}Chars, CharClassifier
Diffstat (limited to 'test/unit/testCharClassify.cxx')
| -rw-r--r-- | test/unit/testCharClassify.cxx | 110 | 
1 files changed, 110 insertions, 0 deletions
diff --git a/test/unit/testCharClassify.cxx b/test/unit/testCharClassify.cxx new file mode 100644 index 000000000..8ff98b302 --- /dev/null +++ b/test/unit/testCharClassify.cxx @@ -0,0 +1,110 @@ +// Unit Tests for Scintilla internal data structures + +#include <string.h> + +#include "Platform.h" + +#include "CharClassify.h" + +#include <gtest/gtest.h> + +// Test CharClassify. + +class CharClassifyTest : public::testing::Test { +protected: +	virtual void SetUp() { +		pcc = new CharClassify(); +		for (int ch = 0; ch < 256; ch++) { +			if (ch == '\r' || ch == '\n') +				charClass[ch] = CharClassify::ccNewLine; +			else if (ch < 0x20 || ch == ' ') +				charClass[ch] = CharClassify::ccSpace; +			else if (ch >= 0x80 || isalnum(ch) || ch == '_') +				charClass[ch] = CharClassify::ccWord; +			else +				charClass[ch] = CharClassify::ccPunctuation; +		} +	} + +	virtual void TearDown() { +		delete pcc; +		pcc = 0; +	} + +	CharClassify *pcc; +	CharClassify::cc charClass[256]; + +	static const char* GetClassName(CharClassify::cc charClass) { +		switch(charClass) { +			#define CASE(c) case CharClassify::c: return #c +			CASE(ccSpace); +			CASE(ccNewLine); +			CASE(ccWord); +			CASE(ccPunctuation); +			#undef CASE +			default: +				return "<unknown>"; +		} +	} +}; + +TEST_F(CharClassifyTest, Defaults) { +	for (int i = 0; i < 256; i++) { +		EXPECT_EQ(charClass[i], pcc->GetClass(i)) +			<< "Character " << i +			<< " should be class " << GetClassName(charClass[i]) +			<< ", but got " << GetClassName(pcc->GetClass(i)); +	} +} + +TEST_F(CharClassifyTest, Custom) { +	unsigned char buf[2] = {0, 0}; +	for (int i = 0; i < 256; i++) { +		CharClassify::cc thisClass = CharClassify::cc(i % 4); +		buf[0] = i; +		pcc->SetCharClasses(buf, thisClass); +		charClass[i] = thisClass; +	} +	for (int i = 0; i < 256; i++) { +		EXPECT_EQ(charClass[i], pcc->GetClass(i)) +			<< "Character " << i +			<< " should be class " << GetClassName(charClass[i]) +			<< ", but got " << GetClassName(pcc->GetClass(i)); +	} +} + +TEST_F(CharClassifyTest, CharsOfClass) { +	unsigned char buf[2] = {0, 0}; +	for (int i = 1; i < 256; i++) { +		CharClassify::cc thisClass = CharClassify::cc(i % 4); +		buf[0] = i; +		pcc->SetCharClasses(buf, thisClass); +		charClass[i] = thisClass; +	} +	for (int classVal = 0; classVal < 4; ++classVal) { +		CharClassify::cc thisClass = CharClassify::cc(classVal % 4); +		int size = pcc->GetCharsOfClass(thisClass, NULL); +		unsigned char* buffer = reinterpret_cast<unsigned char*>(malloc(size + 1)); +		ASSERT_TRUE(buffer); +		buffer[size] = '\0'; +		pcc->GetCharsOfClass(thisClass, buffer); +		for (int i = 1; i < 256; i++) { +			if (charClass[i] == thisClass) { +				EXPECT_TRUE(memchr(reinterpret_cast<char*>(buffer), i, size)) +					<< "Character " << i +					<< " should be class " << GetClassName(thisClass) +					<< ", but was not in GetCharsOfClass;" +					<< " it is reported to be " +					<< GetClassName(pcc->GetClass(i)); +			} else { +				EXPECT_FALSE(memchr(reinterpret_cast<char*>(buffer), i, size)) +					<< "Character " << i +					<< " should not be class " << GetClassName(thisClass) +					<< ", but was in GetCharsOfClass" +					<< " it is reported to be " +					<< GetClassName(pcc->GetClass(i)); +			} +		} +		free(buffer); +	} +}  | 
