From dc5f76d806dd9299630ba2d05447e49f34be034d Mon Sep 17 00:00:00 2001 From: "reed@google.com" Date: Wed, 14 Mar 2012 20:05:35 +0000 Subject: unittest for kUTF32_TextEncoding git-svn-id: http://skia.googlecode.com/svn/trunk@3390 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tests/UnicodeTest.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'tests/UnicodeTest.cpp') diff --git a/tests/UnicodeTest.cpp b/tests/UnicodeTest.cpp index 602ff81431..04fee49608 100644 --- a/tests/UnicodeTest.cpp +++ b/tests/UnicodeTest.cpp @@ -6,6 +6,7 @@ * found in the LICENSE file. */ #include "Test.h" +#include "SkPaint.h" #include "SkUtils.h" // Unicode Variation Selector ranges: inclusive @@ -37,8 +38,48 @@ static void test_uvs(skiatest::Reporter* reporter) { } } +// 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) { + const char text8[] = "ABCDEFGabcdefg0123456789"; + uint16_t text16[sizeof(text8)]; + int32_t text32[sizeof(text8)]; + size_t len8 = strlen(text8); + size_t len16 = len8 * 2; + size_t len32 = len8 * 4; + + // expand our 8bit chars to 16 and 32 + for (size_t i = 0; i < len8; ++i) { + text32[i] = text16[i] = text8[i]; + } + + uint16_t glyphs8[sizeof(text8)]; + uint16_t glyphs16[sizeof(text8)]; + uint16_t glyphs32[sizeof(text8)]; + + SkPaint paint; + + paint.setTextEncoding(SkPaint::kUTF8_TextEncoding); + int count8 = paint.textToGlyphs(text8, len8, glyphs8); + + paint.setTextEncoding(SkPaint::kUTF16_TextEncoding); + int count16 = paint.textToGlyphs(text16, len16, glyphs16); + + paint.setTextEncoding(SkPaint::kUTF32_TextEncoding); + int count32 = paint.textToGlyphs(text32, len32, glyphs32); + + REPORTER_ASSERT(reporter, len8 == count8); + REPORTER_ASSERT(reporter, len8 == count16); + REPORTER_ASSERT(reporter, len8 == count32); + + REPORTER_ASSERT(reporter, !memcmp(glyphs8, glyphs16, count8 * sizeof(uint16_t))); + REPORTER_ASSERT(reporter, !memcmp(glyphs8, glyphs32, count8 * sizeof(uint16_t))); +} + static void TestUnicode(skiatest::Reporter* reporter) { test_uvs(reporter); + test_textencodings(reporter); } #include "TestClassDef.h" -- cgit v1.2.3