| 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
|
|
|