summaryrefslogtreecommitdiffstats
path: root/base/utf_offset_string_conversions_unittest.cc
diff options
context:
space:
mode:
authorkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-08 02:18:10 +0000
committerkinaba@chromium.org <kinaba@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-08 02:18:10 +0000
commitcbf35e1779dccff9941ad90c8e572d4c41fa7799 (patch)
tree5f9129d973c8bbaaf97864af0f8408fea74c2061 /base/utf_offset_string_conversions_unittest.cc
parente4e7288fbbda34ea9219b0fdb157c5a67762710b (diff)
downloadchromium_src-cbf35e1779dccff9941ad90c8e572d4c41fa7799.zip
chromium_src-cbf35e1779dccff9941ad90c8e572d4c41fa7799.tar.gz
chromium_src-cbf35e1779dccff9941ad90c8e572d4c41fa7799.tar.bz2
Add UTF16ToUTF8AndAdjustOffset() to base/.
Currently, only UTF8ToUTF16 version is implemented. The converse version will be required for an upcoming patch for supporting input methods in PPAPI (crbug.com/59425), where WebKit strings (UTF16) with segmentation information must be converted to PPAPI strings (UTF8). BUG= TEST=base_unittests Review URL: http://codereview.chromium.org/7828092 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100079 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/utf_offset_string_conversions_unittest.cc')
-rw-r--r--base/utf_offset_string_conversions_unittest.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/base/utf_offset_string_conversions_unittest.cc b/base/utf_offset_string_conversions_unittest.cc
index 1a56f9d..ff03a75 100644
--- a/base/utf_offset_string_conversions_unittest.cc
+++ b/base/utf_offset_string_conversions_unittest.cc
@@ -36,6 +36,30 @@ TEST(UTFOffsetStringConversionsTest, AdjustOffset) {
UTF8ToUTF16AndAdjustOffset(utf8_to_utf16_cases[i].utf8, &offset);
EXPECT_EQ(utf8_to_utf16_cases[i].output_offset, offset);
}
+
+ struct UTF16ToUTF8Case {
+ char16 utf16[10];
+ size_t input_offset;
+ size_t output_offset;
+ } utf16_to_utf8_cases[] = {
+ {{}, 0, kNpos},
+ // Converted to 3-byte utf-8 sequences
+ {{0x5909, 0x63DB}, 2, kNpos},
+ {{0x5909, 0x63DB}, 1, 3},
+ // Converted to 2-byte utf-8 sequences
+ {{'A', 0x00bc, 0x00be, 'z'}, 1, 1},
+ {{'A', 0x00bc, 0x00be, 'z'}, 2, 3},
+ {{'A', 0x00bc, 0x00be, 'z'}, 3, 5},
+ // Surrogate pair
+ {{'A', 0xd800, 0xdf00, 'z'}, 1, 1},
+ {{'A', 0xd800, 0xdf00, 'z'}, 2, kNpos},
+ {{'A', 0xd800, 0xdf00, 'z'}, 3, 5},
+ };
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(utf16_to_utf8_cases); ++i) {
+ size_t offset = utf16_to_utf8_cases[i].input_offset;
+ UTF16ToUTF8AndAdjustOffset(utf16_to_utf8_cases[i].utf16, &offset);
+ EXPECT_EQ(utf16_to_utf8_cases[i].output_offset, offset);
+ }
}
TEST(UTFOffsetStringConversionsTest, LimitOffsets) {