Chromium Code Reviews| Index: runtime/vm/dart_api_impl_test.cc |
| diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc |
| index ecc1df1ecd978bb81f3f82ded36f1f1e21b030ce..03030e95106697546e0b0ef6f6dea0623c185f74 100644 |
| --- a/runtime/vm/dart_api_impl_test.cc |
| +++ b/runtime/vm/dart_api_impl_test.cc |
| @@ -550,6 +550,20 @@ TEST_CASE(IsString) { |
| } |
| +static void CheckToUTF8(Dart_Handle str, |
| + intptr_t expected_len, |
| + uint8_t* expected_utf8, |
| + intptr_t expected_utf8_len) { |
| + intptr_t len; |
| + EXPECT_VALID(Dart_StringLength(str, &len)); |
| + EXPECT_EQ(expected_len, len); |
| + uint8_t* utf8_out; |
| + EXPECT_VALID(Dart_StringToUTF8(str, &utf8_out, &len)); |
| + EXPECT_EQ(expected_utf8_len, len); |
| + EXPECT(!memcmp(expected_utf8, utf8_out, expected_utf8_len)); |
| +} |
| + |
| + |
| TEST_CASE(NewString) { |
| const char* ascii = "string"; |
| Dart_Handle ascii_str = NewString(ascii); |
| @@ -560,15 +574,74 @@ TEST_CASE(NewString) { |
| Dart_Handle null_str = NewString(null); |
| EXPECT(Dart_IsError(null_str)); |
| - uint8_t data[] = { 0xE4, 0xBA, 0x8c }; // U+4E8C. |
| - Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| - EXPECT_VALID(utf8_str); |
| - EXPECT(Dart_IsString(utf8_str)); |
| + { |
| + uint8_t data[] = { 0xE4, 0xBA, 0x8c }; // U+4E8C. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + CheckToUTF8(utf8_str, 1, data, sizeof(data)); |
| + } |
| + |
| + { |
| + uint8_t data[] = { 0xE4, 0xBA, 0x8c }; // U+4E8C. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + CheckToUTF8(utf8_str, 1, data, sizeof(data)); |
| + } |
|
siva
2012/11/28 18:22:46
This test and the one above seem to test identical
Søren Gjesse
2012/11/29 09:06:14
This is all reverted.
|
| + |
| + { |
| + uint8_t data[] = {0xf0, 0x90, 0x80, 0x80, // U+10000. |
| + 0xf0, 0x9f, 0x98, 0x81, // U+1F601. |
| + 0xf0, 0x9f, 0x98, 0xb7, // U+1F637. |
| + 0xf0, 0xa0, 0x80, 0x80}; // U+20000. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + CheckToUTF8(utf8_str, 8, data, sizeof(data)); |
| + } |
| + |
| + { |
| + uint8_t data[] = {0xed, 0xa0, 0x80}; // U+D800. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + CheckToUTF8(utf8_str, 1, data, sizeof(data)); |
| + } |
| + |
| + { |
| + uint8_t data[] = {0xed, 0xb0, 0x80}; // U+DC00. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + CheckToUTF8(utf8_str, 1, data, sizeof(data)); |
| + } |
| + |
| + { |
| + uint8_t data[] = {0xed, 0xa0, 0x80, // U+D800. |
| + 0xed, 0xb0, 0x80}; // U+DC00. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + uint8_t expected_out[] = {0xf0, 0x90, 0x80, 0x80}; // U+10000. |
| + CheckToUTF8(utf8_str, 2, expected_out, sizeof(expected_out)); |
| + } |
| - uint8_t invalid[] = { 0xE4, 0xBA }; // underflow. |
| - Dart_Handle invalid_str = Dart_NewStringFromUTF8(invalid, |
| - ARRAY_SIZE(invalid)); |
| - EXPECT(Dart_IsError(invalid_str)); |
| + { |
| + uint8_t data[] = {0xed, 0xb0, 0x80, // U+DC00. |
| + 0xed, 0xa0, 0x80}; // U+D800. |
| + Dart_Handle utf8_str = Dart_NewStringFromUTF8(data, ARRAY_SIZE(data)); |
| + EXPECT_VALID(utf8_str); |
| + EXPECT(Dart_IsString(utf8_str)); |
| + CheckToUTF8(utf8_str, 2, data, sizeof(data)); |
| + } |
| + |
| + { |
| + uint8_t invalid[] = { 0xE4, 0xBA }; // underflow. |
| + Dart_Handle invalid_str = Dart_NewStringFromUTF8(invalid, |
| + ARRAY_SIZE(invalid)); |
| + EXPECT(Dart_IsError(invalid_str)); |
| + } |
| } |