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

Unified Diff: runtime/vm/dart_api_impl_test.cc

Issue 474033002: Ensure that hash for a symbol is not set to 0 when it is made external. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 4 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 | « no previous file | runtime/vm/object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_impl_test.cc
===================================================================
--- runtime/vm/dart_api_impl_test.cc (revision 39255)
+++ runtime/vm/dart_api_impl_test.cc (working copy)
@@ -8328,6 +8328,44 @@
EXPECT_EQ(0x4e8c, ext_utf16_str[i]);
}
+ // Test with a symbol (hash value should be preserved on externalization).
+ const char* symbol_ascii = "string";
+ expected_length = strlen(symbol_ascii);
+ Dart_Handle symbol_str =
+ Api::NewHandle(isolate, Symbols::New(symbol_ascii, expected_length));
+ EXPECT_VALID(symbol_str);
+ EXPECT(Dart_IsString(symbol_str));
+ EXPECT(Dart_IsStringLatin1(symbol_str));
+ EXPECT(!Dart_IsExternalString(symbol_str));
+ EXPECT_VALID(Dart_StringLength(symbol_str, &length));
+ EXPECT_EQ(expected_length, length);
+ EXPECT(Api::UnwrapStringHandle(isolate, symbol_str).HasHash());
+
+ uint8_t ext_symbol_ascii[kLength];
+ EXPECT_VALID(Dart_StringStorageSize(symbol_str, &size));
+ str = Dart_MakeExternalString(symbol_str,
+ ext_symbol_ascii,
+ size,
+ &peer8,
+ MakeExternalCback);
+ EXPECT(Api::UnwrapStringHandle(isolate, str).HasHash());
+ EXPECT(Api::UnwrapStringHandle(isolate, str).Hash() ==
+ Api::UnwrapStringHandle(isolate, symbol_str).Hash());
+ EXPECT(Dart_IsString(str));
+ EXPECT(Dart_IsString(symbol_str));
+ EXPECT(Dart_IsStringLatin1(str));
+ EXPECT(Dart_IsStringLatin1(symbol_str));
+ EXPECT(Dart_IsExternalString(str));
+ EXPECT(Dart_IsExternalString(symbol_str));
+ EXPECT_VALID(Dart_StringLength(str, &length));
+ EXPECT_EQ(expected_length, length);
+ EXPECT_VALID(Dart_StringLength(symbol_str, &length));
+ EXPECT_EQ(expected_length, length);
+ EXPECT(Dart_IdentityEquals(str, symbol_str));
+ for (intptr_t i = 0; i < length; i++) {
+ EXPECT_EQ(symbol_ascii[i], ext_symbol_ascii[i]);
+ }
+
Dart_ExitScope();
}
EXPECT_EQ(40, peer8);
« no previous file with comments | « no previous file | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698