aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/unit/testCharClassify.cxx
diff options
context:
space:
mode:
authorMook <marky@activestate.com>2012-05-29 12:44:34 -0700
committerMook <marky@activestate.com>2012-05-29 12:44:34 -0700
commit7e9e5b1e059efa957d2d7e9fa6b364706f621711 (patch)
tree24e9e113362f6a3f05f39e64ef9207f712b4e1a9 /test/unit/testCharClassify.cxx
parent08d35504786635e06b870b2674da38c0e89521cd (diff)
downloadscintilla-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.cxx110
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);
+ }
+}