Index: base/i18n/icu_string_conversions_unittest.cc |
=================================================================== |
--- base/i18n/icu_string_conversions_unittest.cc (revision 31214) |
+++ base/i18n/icu_string_conversions_unittest.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -9,9 +9,9 @@ |
#include <sstream> |
#include "base/basictypes.h" |
+#include "base/i18n/icu_string_conversions.h" |
#include "base/logging.h" |
#include "base/utf_string_conversions.h" |
-#include "base/i18n/icu_string_conversions.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace base { |
@@ -39,7 +39,7 @@ |
#endif |
} |
-static const wchar_t* const kConvertRoundtripCases[] = { |
+const wchar_t* const kConvertRoundtripCases[] = { |
L"Google Video", |
// "网页 图片 资讯更多 »" |
L"\x7f51\x9875\x0020\x56fe\x7247\x0020\x8d44\x8baf\x66f4\x591a\x0020\x00bb", |
@@ -68,7 +68,7 @@ |
} // namespace |
-TEST(StringUtilTest, ConvertCodepageUTF8) { |
+TEST(ICUStringConversionsTest, ConvertCodepageUTF8) { |
// Make sure WideToCodepage works like WideToUTF8. |
for (size_t i = 0; i < arraysize(kConvertRoundtripCases); ++i) { |
std::string expected(WideToUTF8(kConvertRoundtripCases[i])); |
@@ -156,7 +156,7 @@ |
true, |
#if defined(WCHAR_T_IS_UTF16) |
L"\xD840\xDC00\x4E00", |
-#else |
+#elif defined(WCHAR_T_IS_UTF32) |
L"\x20000\x4E00", |
#endif |
L"\xD840\xDC00\x4E00"}, |
@@ -234,7 +234,7 @@ |
NULL}, |
}; |
-TEST(StringUtilTest, ConvertBetweenCodepageAndWide) { |
+TEST(ICUStringConversionsTest, ConvertBetweenCodepageAndWide) { |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kConvertCodepageCases); ++i) { |
std::wstring wide; |
bool success = CodepageToWide(kConvertCodepageCases[i].encoded, |
@@ -296,7 +296,7 @@ |
OnStringConversionError::SKIP, &encoded)); |
} |
-TEST(StringUtilTest, ConvertBetweenCodepageAndUTF16) { |
+TEST(ICUStringConversionsTest, ConvertBetweenCodepageAndUTF16) { |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kConvertCodepageCases); ++i) { |
string16 utf16; |
bool success = CodepageToUTF16(kConvertCodepageCases[i].encoded, |
@@ -325,4 +325,45 @@ |
} |
} |
+static const struct { |
+ const char* codepage_name; |
+ const char* encoded; |
+ size_t input_offset; |
+ size_t u16_output_offset; |
+ size_t wide_output_offset; |
+} kAdjustOffsetCases[] = { |
+ {"gb2312", "", 0, string16::npos, std::wstring::npos}, |
+ {"gb2312", "\xC4\xE3\xBA\xC3", 0, 0, 0}, |
+ {"gb2312", "\xC4\xE3\xBA\xC3", 2, 1, 1}, |
+ {"gb2312", "\xC4\xE3\xBA\xC3", 4, string16::npos, std::wstring::npos}, |
+ {"gb2312", "\xC4\xE3\xBA\xC3", 1, string16::npos, std::wstring::npos}, |
+ {"gb2312", "\xC4\xE3\xBA\xC3", std::string::npos, string16::npos, |
+ std::wstring::npos}, |
+ {"gb18030", "\x95\x32\x82\x36\xD2\xBB", 2, string16::npos, |
+ std::wstring::npos}, |
+ {"gb18030", "\x95\x32\x82\x36\xD2\xBB", 4, 2, 1}, |
+}; |
+ |
+TEST(ICUStringConversionsTest, AdjustOffset) { |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kAdjustOffsetCases); ++i) { |
+ string16 utf16; |
+ size_t offset = kAdjustOffsetCases[i].input_offset; |
+ EXPECT_TRUE(CodepageToUTF16AndAdjustOffset(kAdjustOffsetCases[i].encoded, |
+ kAdjustOffsetCases[i].codepage_name, |
+ OnStringConversionError::FAIL, &utf16, &offset)); |
+ EXPECT_EQ(kAdjustOffsetCases[i].u16_output_offset, offset); |
+ |
+ std::wstring wide; |
+ offset = kAdjustOffsetCases[i].input_offset; |
+ CodepageToWideAndAdjustOffset(kAdjustOffsetCases[i].encoded, |
+ kAdjustOffsetCases[i].codepage_name, |
+ OnStringConversionError::FAIL, &wide, &offset); |
+#if defined(WCHAR_T_IS_UTF16) |
+ EXPECT_EQ(kAdjustOffsetCases[i].u16_output_offset, offset); |
+#elif defined(WCHAR_T_IS_UTF32) |
+ EXPECT_EQ(kAdjustOffsetCases[i].wide_output_offset, offset); |
+#endif |
+ } |
+} |
+ |
} // namespace base |