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

Unified Diff: runtime/vm/object_test.cc

Issue 542363003: Don't double-escape in strings in the VM Service, and don't use \u0000 to determine the string lengt (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: build Created 6 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/object.cc ('k') | runtime/vm/report_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object_test.cc
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index b85cb60e68c2d1b8b998537e35c8960527eebd3a..5bfb83a24225efc2bc787e2242f463387a964235 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -4111,71 +4111,66 @@ TEST_CASE(SpecialClassesHaveEmptyArrays) {
}
-TEST_CASE(ToUserCString) {
+TEST_CASE(ToCStringTruncated) {
const char* kScriptChars =
- "var simple = 'simple';\n"
- "var escapes = 'stuff\\n\\r\\f\\b\\t\\v\\'\"\\$stuff';\n"
- "var uescapes = 'stuff\\u0001\\u0002stuff';\n"
- "var toolong = "
- "'01234567890123456789012345678901234567890123456789howdy';\n"
- "var toolong2 = "
- "'0123456789012345678901234567890123\\t567890123456789howdy';\n"
- "var toolong3 = "
- "'012345678901234567890123456789\\u0001567890123456789howdy';\n";
+ "var ascii = 'Hello, World!';\n"
+ "var unicode = '\\u00CE\\u00F1\\u0163\\u00E9r\\u00F1\\u00E5\\u0163"
+ "\\u00EE\\u00F6\\u00F1\\u00E5\\u013C\\u00EE\\u017E\\u00E5\\u0163"
+ "\\u00EE\\u1EDD\\u00F1';\n"
+ "var surrogates ='\\u{1D11E}\\u{1D11E}\\u{1D11E}\\u{1D11E}"\
+ "\\u{1D11E}';\n";
+
Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
EXPECT_VALID(lib);
String& obj = String::Handle();
Dart_Handle result;
+ bool did_truncate;
+ intptr_t length;
- // Simple string.
- result = Dart_GetField(lib, NewString("simple"));
- EXPECT_VALID(result);
- obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"simple\"", obj.ToUserCString(40));
-
- // Escaped chars.
- result = Dart_GetField(lib, NewString("escapes"));
- EXPECT_VALID(result);
- obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"stuff\\n\\r\\f\\b\\t\\v'\\\"\\$stuff\"",
- obj.ToUserCString(40));
-
- // U-escaped chars.
- result = Dart_GetField(lib, NewString("uescapes"));
- EXPECT_VALID(result);
- obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"stuff\\u0001\\u0002stuff\"", obj.ToUserCString(40));
-
- // Truncation.
- result = Dart_GetField(lib, NewString("toolong"));
- EXPECT_VALID(result);
- obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"01234567890123456789012345678901234\"...",
- obj.ToUserCString(40));
-
- // Truncation, shorter.
- result = Dart_GetField(lib, NewString("toolong"));
+ result = Dart_GetField(lib, NewString("ascii"));
EXPECT_VALID(result);
obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"01234\"...", obj.ToUserCString(10));
-
- // Truncation, limit is in escape.
- result = Dart_GetField(lib, NewString("toolong2"));
+ EXPECT_STREQ("Hello, World!",
+ obj.ToCStringTruncated(100, &did_truncate, &length));
+ EXPECT(!did_truncate);
+ EXPECT_EQ(13, length);
+ EXPECT_STREQ("Hel", obj.ToCStringTruncated(3, &did_truncate, &length));
+ EXPECT(did_truncate);
+ EXPECT_EQ(3, length);
+
+ result = Dart_GetField(lib, NewString("unicode"));
EXPECT_VALID(result);
obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"0123456789012345678901234567890123\"...",
- obj.ToUserCString(40));
-
- // Truncation, limit is in u-escape
- result = Dart_GetField(lib, NewString("toolong3"));
+ EXPECT_STREQ("\u00CE\u00F1\u0163\u00E9r\u00F1\u00E5\u0163"
+ "\u00EE\u00F6\u00F1\u00E5\u013C\u00EE\u017E\u00E5\u0163"
+ "\u00EE\u1EDD\u00F1",
+ obj.ToCStringTruncated(100, &did_truncate, &length));
+ EXPECT(!did_truncate);
+ EXPECT_EQ(40, length);
+ EXPECT_STREQ("\u00CE\u00F1\u0163",
+ obj.ToCStringTruncated(3, &did_truncate, &length));
+ EXPECT(did_truncate);
+ EXPECT_EQ(6, length);
+
+ result = Dart_GetField(lib, NewString("surrogates"));
EXPECT_VALID(result);
obj ^= Api::UnwrapHandle(result);
- EXPECT_STREQ("\"012345678901234567890123456789\"...",
- obj.ToUserCString(40));
+ EXPECT_STREQ("\U0001D11E\U0001D11E\U0001D11E\U0001D11E\U0001D11E",
+ obj.ToCStringTruncated(100, &did_truncate, &length));
+ EXPECT(!did_truncate);
+ EXPECT_EQ(20, length);
+ EXPECT_STREQ("\U0001D11E",
+ obj.ToCStringTruncated(3, &did_truncate, &length));
+ EXPECT(did_truncate);
+ EXPECT_EQ(4, length); // 3 code units would be in the middle of a surrogate
+ // pair, so it gets rounded down 2 code units.
+ EXPECT_STREQ("\U0001D11E\U0001D11E",
+ obj.ToCStringTruncated(4, &did_truncate, &length));
+ EXPECT(did_truncate);
+ EXPECT_EQ(8, length);
}
-
class ObjectAccumulator : public ObjectVisitor {
public:
explicit ObjectAccumulator(GrowableArray<Object*>* objects)
@@ -4372,7 +4367,7 @@ TEST_CASE(PrintJSONPrimitives) {
"{\"type\":\"@String\","
"\"class\":{\"type\":\"@Class\",\"id\":\"\","
"\"name\":\"_OneByteString\",\"_vmName\":\"\"},"
- "\"id\":\"\",\"valueAsString\":\"\\\"dw\\\"\"}",
+ "\"id\":\"\",\"valueAsString\":\"dw\"}",
buffer);
}
// Array reference
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/report_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698