Index: runtime/vm/unicode_test.cc |
diff --git a/runtime/vm/unicode_test.cc b/runtime/vm/unicode_test.cc |
index 582a2a6f507095612468224483005b3f83345cec..6bb96a6aa7a3aef7f0bed9e21a1e0942aa21e6f7 100644 |
--- a/runtime/vm/unicode_test.cc |
+++ b/runtime/vm/unicode_test.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
@@ -840,8 +840,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.1.2 - U+DB7F = ed ad bf = "\xED\xAD\xBF" |
@@ -851,8 +851,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.1.3 - U+DB80 = ed ae 80 = "\xED\xAE\x80" |
@@ -862,8 +862,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.1.4 - U+DBFF = ed af bf = "\xED\xAF\xBF" |
@@ -873,8 +873,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.1.5 - U+DC00 = ed b0 80 = "\xED\xB0\x80" |
@@ -884,8 +884,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.1.6 - U+DF80 = ed be 80 = "\xED\xBE\x80" |
@@ -895,8 +895,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.1.7 - U+DFFF = ed bf bf = "\xED\xBF\xBF" |
@@ -906,8 +906,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2 Paired UTF-16 surrogates |
@@ -919,8 +919,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.2 - U+D800 U+DFFF = ed a0 80 ed bf bf = "\xED\xA0\x80\xED\xBF\xBF" |
@@ -930,8 +930,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.3 - U+DB7F U+DC00 = ed a0 80 ed bf bf = "\xED\xAD\xBF\xED\xB0\x80" |
@@ -941,8 +941,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.4 - U+DB7F U+DFFF = ed ad bf ed bf bf = "\xED\xAD\xBF\xED\xBF\xBF" |
@@ -952,8 +952,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.5 - U+DB80 U+DC00 = ed ae 80 ed b0 80 = "\xED\xAE\x80\xED\xB0\x80" |
@@ -963,8 +963,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.6 - U+DB80 U+DFFF = ed ae 80 ed bf bf = "\xED\xAE\x80\xED\xBF\xBF" |
@@ -974,8 +974,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.7 - U+DBFF U+DC00 = ed af bf ed b0 80 = "\xED\xAF\xBF\xED\xB0\x80" |
@@ -985,8 +985,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.2.8 - U+DBFF U+DFFF = ed af bf ed bf bf = "\xED\xAF\xBF\xED\xBF\xBF" |
@@ -996,8 +996,8 @@ TEST_CASE(Utf8Decode) { |
int32_t dst[ARRAY_SIZE(expected)]; |
memset(dst, 0, sizeof(dst)); |
bool is_valid = Utf8::DecodeCStringToUTF32(src, dst, ARRAY_SIZE(dst)); |
- EXPECT(!is_valid); |
- EXPECT(memcmp(expected, dst, sizeof(expected))); |
+ EXPECT(is_valid); |
+ EXPECT(!memcmp(expected, dst, sizeof(expected))); |
} |
// 5.3 - Other illegal code positions |
@@ -1025,4 +1025,41 @@ TEST_CASE(Utf8Decode) { |
} |
} |
+ |
+TEST_CASE(Utf16Iterator) { |
+ // Normal code units. |
+ { |
+ const int len = 4; |
+ const uint16_t src[] = { 32, 33, 255, 256 }; |
+ Utf16::CodePointIterator it(src, len); |
+ for (int i = 0; i < len; i++) { |
+ EXPECT(it.Next()); |
+ EXPECT_EQ(src[i], it.Current()); |
+ } |
+ EXPECT(!it.Next()); |
+ } |
+ |
+ // Surrogate pairs. |
+ { |
+ const uint16_t src[] = { 0xd800, 0xdc00, 0xd800, 0xdc01 }; |
+ Utf16::CodePointIterator it(src, 4); |
+ EXPECT(it.Next()); |
+ EXPECT_EQ(0x10000, it.Current()); |
+ EXPECT(it.Next()); |
+ EXPECT_EQ(0x10001, it.Current()); |
+ EXPECT(!it.Next()); |
+ } |
+ |
+ // Surrogate characters not in pairs. |
+ { |
+ const uint16_t src[] = { 0xdc00, 0xd800 }; |
+ Utf16::CodePointIterator it(src, 2); |
+ EXPECT(it.Next()); |
+ EXPECT_EQ(0xdc00, it.Current()); |
+ EXPECT(it.Next()); |
+ EXPECT_EQ(0xd800, it.Current()); |
+ EXPECT(!it.Next()); |
+ } |
+} |
+ |
} // namespace dart |