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

Unified Diff: runtime/vm/object_test.cc

Issue 25344002: Fix crashing bug due to the fact that external one byte strings cannot be escaped (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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
« runtime/vm/object.cc ('K') | « runtime/vm/object.cc ('k') | no next file » | 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 78a3d0cc7725c964585cd19b1d7ed4bbdb393df8..d60fd80fe93e01a53985f8863bd25202f58cd36f 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -1529,6 +1529,73 @@ TEST_CASE(ExternalOneByteString) {
}
+TEST_CASE(EscapeSpecialCharactersOneByteString) {
+ uint8_t characters[] =
+ { 'a', '\n', '\f', '\b', '\t', '\v', '\r', '\\', '$', 'z' };
+ intptr_t len = ARRAY_SIZE(characters);
+
+ const String& str =
+ String::Handle(
+ OneByteString::New(characters, len, Heap::kNew));
+ EXPECT(str.IsOneByteString());
+ EXPECT_EQ(str.Length(), len);
+ EXPECT(str.Equals("a\n\f\b\t\v\r\\$z"));
+ const String& escaped_str =
+ String::Handle(String::EscapeSpecialCharacters(str));
+ EXPECT(escaped_str.Equals("a\\n\\f\\b\\t\\v\\r\\\\\\$z"));
+}
+
+
+TEST_CASE(EscapeSpecialCharactersExternalOneByteString) {
+ uint8_t characters[] =
+ { 'a', '\n', '\f', '\b', '\t', '\v', '\r', '\\', '$', 'z' };
+ intptr_t len = ARRAY_SIZE(characters);
+
+ const String& str =
+ String::Handle(
+ ExternalOneByteString::New(characters, len, NULL, NULL, Heap::kNew));
+ EXPECT(!str.IsOneByteString());
+ EXPECT(str.IsExternalOneByteString());
+ EXPECT_EQ(str.Length(), len);
+ EXPECT(str.Equals("a\n\f\b\t\v\r\\$z"));
+ const String& escaped_str =
+ String::Handle(String::EscapeSpecialCharacters(str));
+ EXPECT(escaped_str.Equals("a\\n\\f\\b\\t\\v\\r\\\\\\$z"));
+}
+
+TEST_CASE(EscapeSpecialCharactersTwoByteString) {
+ uint16_t characters[] =
+ { 'a', '\n', '\f', '\b', '\t', '\v', '\r', '\\', '$', 'z' };
+ intptr_t len = ARRAY_SIZE(characters);
+
+ const String& str =
+ String::Handle(TwoByteString::New(characters, len, Heap::kNew));
+ EXPECT(str.IsTwoByteString());
+ EXPECT_EQ(str.Length(), len);
+ EXPECT(str.Equals("a\n\f\b\t\v\r\\$z"));
+ const String& escaped_str =
+ String::Handle(String::EscapeSpecialCharacters(str));
+ EXPECT(escaped_str.Equals("a\\n\\f\\b\\t\\v\\r\\\\\\$z"));
+}
+
+
+TEST_CASE(EscapeSpecialCharactersExternalTwoByteString) {
+ uint16_t characters[] =
+ { 'a', '\n', '\f', '\b', '\t', '\v', '\r', '\\', '$', 'z' };
+ intptr_t len = ARRAY_SIZE(characters);
+
+ const String& str =
+ String::Handle(
+ ExternalTwoByteString::New(characters, len, NULL, NULL, Heap::kNew));
+ EXPECT(str.IsExternalTwoByteString());
+ EXPECT_EQ(str.Length(), len);
+ EXPECT(str.Equals("a\n\f\b\t\v\r\\$z"));
+ const String& escaped_str =
+ String::Handle(String::EscapeSpecialCharacters(str));
+ EXPECT(escaped_str.Equals("a\\n\\f\\b\\t\\v\\r\\\\\\$z"));
+}
+
+
TEST_CASE(ExternalTwoByteString) {
uint16_t characters[] = { 0x1E6B, 0x1E85, 0x1E53 };
intptr_t len = ARRAY_SIZE(characters);
« runtime/vm/object.cc ('K') | « runtime/vm/object.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698