Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Unified Diff: runtime/vm/unicode_test.cc

Issue 1309373005: Allow individual unicode surrogate strings (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Also fix unicode tests Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/unicode.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/unicode_test.cc
diff --git a/runtime/vm/unicode_test.cc b/runtime/vm/unicode_test.cc
index 582a2a6f507095612468224483005b3f83345cec..36fdf8509f565285086b7e162aa4f0f6f2efe5f1 100644
--- a/runtime/vm/unicode_test.cc
+++ b/runtime/vm/unicode_test.cc
@@ -832,6 +832,8 @@ TEST_CASE(Utf8Decode) {
}
// 5.1 - Single UTF-16 surrogates
+ // UTF-8 suggests single surrogates are invalid, but both JS and
+ // Dart allow them and make use of them.
// 5.1.1 - U+D800 = ed a0 80 = "\xED\xA0\x80"
{
@@ -840,8 +842,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 +853,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 +864,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 +875,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 +886,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 +897,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,11 +908,16 @@ 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
+ // Also not a valid string, but accepted in Dart, even if it doesn't make
+ // sense. e.g.
+ // var s = new String.fromCharCodes([0xd800, 0xDC00]);
+ // print(s.runes); // (65536) (0x10000)
+ // print(s.codeUnits); // [55296, 56320]
// 5.2.1 - U+D800 U+DC00 = ed a0 80 ed b0 80 = "\xED\xA0\x80\xED\xB0\x80"
{
@@ -919,8 +926,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 +937,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 +948,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 +959,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 +970,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 +981,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 +992,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 +1003,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
« no previous file with comments | « runtime/vm/unicode.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698