aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/PaintTest.cpp4
-rw-r--r--tests/UnicodeTest.cpp36
-rw-r--r--tests/UtilsTest.cpp152
3 files changed, 93 insertions, 99 deletions
diff --git a/tests/PaintTest.cpp b/tests/PaintTest.cpp
index 647f8e2f23..0bf6df64de 100644
--- a/tests/PaintTest.cpp
+++ b/tests/PaintTest.cpp
@@ -23,7 +23,7 @@
static size_t uni_to_utf8(const SkUnichar src[], void* dst, int count) {
char* u8 = (char*)dst;
for (int i = 0; i < count; ++i) {
- int n = SkToInt(SkUTF8_FromUnichar(src[i], u8));
+ int n = SkToInt(SkUTF::ToUTF8(src[i], u8));
u8 += n;
}
return u8 - (char*)dst;
@@ -32,7 +32,7 @@ static size_t uni_to_utf8(const SkUnichar src[], void* dst, int count) {
static size_t uni_to_utf16(const SkUnichar src[], void* dst, int count) {
uint16_t* u16 = (uint16_t*)dst;
for (int i = 0; i < count; ++i) {
- int n = SkToInt(SkUTF16_FromUnichar(src[i], u16));
+ int n = SkToInt(SkUTF::ToUTF16(src[i], u16));
u16 += n;
}
return (char*)u16 - (char*)dst;
diff --git a/tests/UnicodeTest.cpp b/tests/UnicodeTest.cpp
index 5ed92d4b34..5dbcf08547 100644
--- a/tests/UnicodeTest.cpp
+++ b/tests/UnicodeTest.cpp
@@ -9,39 +9,10 @@
#include "SkUtils.h"
#include "Test.h"
-// Unicode Variation Selector ranges: inclusive
-#define UVS_MIN0 0x180B
-#define UVS_MAX0 0x180D
-#define UVS_MIN1 0xFE00
-#define UVS_MAX1 0xFE0F
-#define UVS_MIN2 0xE0100
-#define UVS_MAX2 0xE01EF
-
-static bool isUVS(SkUnichar uni) {
- return (uni >= UVS_MIN0 && uni <= UVS_MAX0) ||
- (uni >= UVS_MIN1 && uni <= UVS_MAX1) ||
- (uni >= UVS_MIN2 && uni <= UVS_MAX2);
-}
-
-static void test_uvs(skiatest::Reporter* reporter) {
- // [min, max], [min, max] ... inclusive
- static const SkUnichar gRanges[] = {
- UVS_MIN0, UVS_MAX0, UVS_MIN1, UVS_MAX1, UVS_MIN2, UVS_MAX2
- };
-
- for (size_t i = 0; i < SK_ARRAY_COUNT(gRanges); i += 2) {
- for (SkUnichar uni = gRanges[i] - 8; uni <= gRanges[i+1] + 8; ++uni) {
- bool uvs0 = isUVS(uni);
- bool uvs1 = SkUnichar_IsVariationSelector(uni);
- REPORTER_ASSERT(reporter, uvs0 == uvs1);
- }
- }
-}
-
// Simple test to ensure that when we call textToGlyphs, we get the same
// result (for the same text) when using UTF8, UTF16, UTF32.
// TODO: make the text more complex (i.e. incorporate chars>7bits)
-static void test_textencodings(skiatest::Reporter* reporter) {
+DEF_TEST(Unicode_textencodings, reporter) {
const char text8[] = "ABCDEFGabcdefg0123456789";
uint16_t text16[sizeof(text8)];
int32_t text32[sizeof(text8)];
@@ -76,8 +47,3 @@ static void test_textencodings(skiatest::Reporter* reporter) {
REPORTER_ASSERT(reporter, !memcmp(glyphs8, glyphs16, count8 * sizeof(uint16_t)));
REPORTER_ASSERT(reporter, !memcmp(glyphs8, glyphs32, count8 * sizeof(uint16_t)));
}
-
-DEF_TEST(Unicode, reporter) {
- test_uvs(reporter);
- test_textencodings(reporter);
-}
diff --git a/tests/UtilsTest.cpp b/tests/UtilsTest.cpp
index 6f8ec914bc..d621a8b12e 100644
--- a/tests/UtilsTest.cpp
+++ b/tests/UtilsTest.cpp
@@ -165,20 +165,19 @@ static void test_search(skiatest::Reporter* reporter) {
}
static void test_utf16(skiatest::Reporter* reporter) {
+ // Test non-basic-multilingual-plane unicode.
static const SkUnichar gUni[] = {
0x10000, 0x18080, 0x20202, 0xFFFFF, 0x101234
};
-
- uint16_t buf[2];
-
- for (size_t i = 0; i < SK_ARRAY_COUNT(gUni); i++) {
- size_t count = SkUTF16_FromUnichar(gUni[i], buf);
+ for (SkUnichar uni : gUni) {
+ uint16_t buf[2];
+ size_t count = SkUTF::ToUTF16(uni, buf);
REPORTER_ASSERT(reporter, count == 2);
- size_t count2 = SkUTF16_CountUnichars(buf, 2 * sizeof(uint16_t));
+ size_t count2 = SkUTF::CountUTF16(buf, sizeof(buf));
REPORTER_ASSERT(reporter, count2 == 1);
const uint16_t* ptr = buf;
- SkUnichar c = SkUTF16_NextUnichar(&ptr, buf + SK_ARRAY_COUNT(buf));
- REPORTER_ASSERT(reporter, c == gUni[i]);
+ SkUnichar c = SkUTF::NextUTF16(&ptr, buf + SK_ARRAY_COUNT(buf));
+ REPORTER_ASSERT(reporter, c == uni);
REPORTER_ASSERT(reporter, ptr - buf == 2);
}
}
@@ -204,8 +203,8 @@ DEF_TEST(Utils, reporter) {
for (size_t i = 0; i < SK_ARRAY_COUNT(gTest); i++) {
const char* p = gTest[i].fUtf8;
const char* stop = p + strlen(p);
- int n = SkUTF8_CountUnichars(p, strlen(p));
- SkUnichar u1 = SkUTF8_NextUnichar(&p, stop);
+ int n = SkUTF::CountUTF8(p, strlen(p));
+ SkUnichar u1 = SkUTF::NextUTF8(&p, stop);
REPORTER_ASSERT(reporter, n == 1);
REPORTER_ASSERT(reporter, u1 == gTest[i].fUni);
@@ -220,62 +219,91 @@ DEF_TEST(Utils, reporter) {
}
#define ASCII_BYTE "X"
-#define CONTINUATION_BYTE "\x80"
-#define LEADING_TWO_BYTE "\xC4"
-#define LEADING_THREE_BYTE "\xE0"
+#define CONTINUATION_BYTE "\xA1"
+#define LEADING_TWO_BYTE "\xC2"
+#define LEADING_THREE_BYTE "\xE1"
#define LEADING_FOUR_BYTE "\xF0"
#define INVALID_BYTE "\xFC"
-static bool valid_utf8(const char* p, size_t l) {
- return SkUTF8_CountUnichars(p, l) >= 0;
-}
-DEF_TEST(Utils_UTF8_ValidLength, r) {
- const char* goodTestcases[] = {
- "",
- ASCII_BYTE,
- ASCII_BYTE ASCII_BYTE,
- LEADING_TWO_BYTE CONTINUATION_BYTE,
- ASCII_BYTE LEADING_TWO_BYTE CONTINUATION_BYTE,
- ASCII_BYTE ASCII_BYTE LEADING_TWO_BYTE CONTINUATION_BYTE,
- LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE ASCII_BYTE LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- LEADING_FOUR_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE LEADING_FOUR_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE ASCII_BYTE LEADING_FOUR_BYTE CONTINUATION_BYTE CONTINUATION_BYTE
- CONTINUATION_BYTE,
+DEF_TEST(SkUTF_CountUTF8, r) {
+ struct {
+ int expectedCount;
+ const char* utf8String;
+ } testCases[] = {
+ { 0, "" },
+ { 1, ASCII_BYTE },
+ { 2, ASCII_BYTE ASCII_BYTE },
+ { 1, LEADING_TWO_BYTE CONTINUATION_BYTE },
+ { 2, ASCII_BYTE LEADING_TWO_BYTE CONTINUATION_BYTE },
+ { 3, ASCII_BYTE ASCII_BYTE LEADING_TWO_BYTE CONTINUATION_BYTE },
+ { 1, LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { 2, ASCII_BYTE LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { 3, ASCII_BYTE ASCII_BYTE LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { 1, LEADING_FOUR_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { 2, ASCII_BYTE LEADING_FOUR_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { 3, ASCII_BYTE ASCII_BYTE LEADING_FOUR_BYTE CONTINUATION_BYTE CONTINUATION_BYTE
+ CONTINUATION_BYTE },
+ { -1, INVALID_BYTE },
+ { -1, INVALID_BYTE CONTINUATION_BYTE },
+ { -1, INVALID_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { -1, INVALID_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { -1, LEADING_TWO_BYTE },
+ { -1, CONTINUATION_BYTE },
+ { -1, CONTINUATION_BYTE CONTINUATION_BYTE },
+ { -1, LEADING_THREE_BYTE CONTINUATION_BYTE },
+ { -1, CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { -1, LEADING_FOUR_BYTE CONTINUATION_BYTE },
+ { -1, CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
};
- for (const char* testcase : goodTestcases) {
- REPORTER_ASSERT(r, valid_utf8(testcase, strlen(testcase)));
+ for (auto testCase : testCases) {
+ const char* str = testCase.utf8String;
+ REPORTER_ASSERT(r, testCase.expectedCount == SkUTF::CountUTF8(str, strlen(str)));
}
- const char* badTestcases[] = {
- INVALID_BYTE,
- INVALID_BYTE CONTINUATION_BYTE,
- INVALID_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- INVALID_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- LEADING_TWO_BYTE,
- CONTINUATION_BYTE,
- CONTINUATION_BYTE CONTINUATION_BYTE,
- LEADING_THREE_BYTE CONTINUATION_BYTE,
- CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- LEADING_FOUR_BYTE CONTINUATION_BYTE,
- CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
-
- ASCII_BYTE INVALID_BYTE,
- ASCII_BYTE INVALID_BYTE CONTINUATION_BYTE,
- ASCII_BYTE INVALID_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE INVALID_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE LEADING_TWO_BYTE,
- ASCII_BYTE CONTINUATION_BYTE,
- ASCII_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE LEADING_THREE_BYTE CONTINUATION_BYTE,
- ASCII_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
- ASCII_BYTE LEADING_FOUR_BYTE CONTINUATION_BYTE,
- ASCII_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE CONTINUATION_BYTE,
-
- // LEADING_FOUR_BYTE LEADING_TWO_BYTE CONTINUATION_BYTE,
+}
+
+DEF_TEST(SkUTF_NextUTF8_ToUTF8, r) {
+ struct {
+ SkUnichar expected;
+ const char* utf8String;
+ } testCases[] = {
+ { -1, INVALID_BYTE },
+ { -1, "" },
+ { 0x0058, ASCII_BYTE },
+ { 0x00A1, LEADING_TWO_BYTE CONTINUATION_BYTE },
+ { 0x1861, LEADING_THREE_BYTE CONTINUATION_BYTE CONTINUATION_BYTE },
+ { 0x010330, LEADING_FOUR_BYTE "\x90\x8C\xB0" },
};
- for (const char* testcase : badTestcases) {
- REPORTER_ASSERT(r, !valid_utf8(testcase, strlen(testcase)));
+ for (auto testCase : testCases) {
+ const char* str = testCase.utf8String;
+ SkUnichar uni = SkUTF::NextUTF8(&str, str + strlen(str));
+ REPORTER_ASSERT(r, str == testCase.utf8String + strlen(testCase.utf8String));
+ REPORTER_ASSERT(r, uni == testCase.expected);
+ char buff[5] = {0, 0, 0, 0, 0};
+ size_t len = SkUTF::ToUTF8(uni, buff);
+ if (buff[len] != 0) {
+ ERRORF(r, "unexpected write");
+ continue;
+ }
+ if (uni == -1) {
+ REPORTER_ASSERT(r, len == 0);
+ continue;
+ }
+ if (len == 0) {
+ ERRORF(r, "unexpected failure.");
+ continue;
+ }
+ if (len > 4) {
+ ERRORF(r, "wrote too much");
+ continue;
+ }
+ str = testCase.utf8String;
+ REPORTER_ASSERT(r, len == strlen(buff));
+ REPORTER_ASSERT(r, len == strlen(str));
+ REPORTER_ASSERT(r, 0 == strcmp(str, buff));
}
-
}
+#undef ASCII_BYTE
+#undef CONTINUATION_BYTE
+#undef LEADING_TWO_BYTE
+#undef LEADING_THREE_BYTE
+#undef LEADING_FOUR_BYTE
+#undef INVALID_BYTE