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

Unified Diff: runtime/vm/dart_api_impl_test.cc

Issue 22980022: Setup a peer for read only strings that are not externalized in (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 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
Index: runtime/vm/dart_api_impl_test.cc
===================================================================
--- runtime/vm/dart_api_impl_test.cc (revision 26385)
+++ runtime/vm/dart_api_impl_test.cc (working copy)
@@ -643,49 +643,6 @@
}
-TEST_CASE(ExternalStringGetPeer) {
- Dart_Handle result;
-
- uint8_t data8[] = { 'o', 'n', 'e', 0xFF };
- int peer_data = 123;
- void* peer = NULL;
-
- // Success.
- Dart_Handle ext8 = Dart_NewExternalLatin1String(data8, ARRAY_SIZE(data8),
- &peer_data, NULL);
- EXPECT_VALID(ext8);
-
- result = Dart_ExternalStringGetPeer(ext8, &peer);
- EXPECT_VALID(result);
- EXPECT_EQ(&peer_data, peer);
-
- // NULL peer.
- result = Dart_ExternalStringGetPeer(ext8, NULL);
- EXPECT(Dart_IsError(result));
- EXPECT_STREQ("Dart_ExternalStringGetPeer expects argument 'peer' to be "
- "non-null.", Dart_GetError(result));
-
- // String is not external.
- peer = NULL;
- uint8_t utf8_data8[] = { 'o', 'n', 'e', 0x7F };
- Dart_Handle str8 = Dart_NewStringFromUTF8(utf8_data8, ARRAY_SIZE(data8));
- EXPECT_VALID(str8);
- result = Dart_ExternalStringGetPeer(str8, &peer);
- EXPECT(Dart_IsError(result));
- EXPECT_STREQ("Dart_ExternalStringGetPeer expects argument 'object' to be "
- "an external String.", Dart_GetError(result));
- EXPECT(peer == NULL);
-
- // Not a String.
- peer = NULL;
- result = Dart_ExternalStringGetPeer(Dart_True(), &peer);
- EXPECT(Dart_IsError(result));
- EXPECT_STREQ("Dart_ExternalStringGetPeer expects argument 'object' to be "
- "of type String.", Dart_GetError(result));
- EXPECT(peer == NULL);
-}
-
-
static void ExternalStringCallbackFinalizer(void* peer) {
*static_cast<int*>(peer) *= 2;
}
@@ -705,9 +662,6 @@
&peer8,
ExternalStringCallbackFinalizer);
EXPECT_VALID(obj8);
- void* api_peer8 = NULL;
- EXPECT_VALID(Dart_ExternalStringGetPeer(obj8, &api_peer8));
- EXPECT_EQ(api_peer8, &peer8);
uint16_t data16[] = { 'h', 'e', 'l', 'l', 'o' };
Dart_Handle obj16 = Dart_NewExternalUTF16String(
@@ -716,9 +670,6 @@
&peer16,
ExternalStringCallbackFinalizer);
EXPECT_VALID(obj16);
- void* api_peer16 = NULL;
- EXPECT_VALID(Dart_ExternalStringGetPeer(obj16, &api_peer16));
- EXPECT_EQ(api_peer16, &peer16);
Dart_ExitScope();
}
@@ -6925,6 +6876,7 @@
TEST_CASE(MakeExternalString) {
int peer8 = 40;
int peer16 = 41;
+ int canonical_str_peer = 42;
intptr_t length = 0;
intptr_t expected_length = 0;
{
@@ -6986,6 +6938,24 @@
EXPECT_VALID(Dart_StringLength(str, &length));
EXPECT_EQ(0, length);
+ // Test with single character canonical string, it should not become
+ // external string but the peer should be setup for it.
+ Isolate* isolate = Isolate::Current();
+ Dart_Handle canonical_str = Api::NewHandle(isolate, Symbols::New("*"));
+ EXPECT(Dart_IsString(canonical_str));
+ EXPECT(!Dart_IsExternalString(canonical_str));
+ uint8_t ext_canonical_str[kLength];
+ str = Dart_MakeExternalString(canonical_str,
+ ext_canonical_str,
+ kLength,
+ &canonical_str_peer,
+ MakeExternalCback);
+ EXPECT(Dart_IsString(str));
+ EXPECT(!Dart_IsExternalString(canonical_str));
+ EXPECT_EQ(canonical_str, str);
+ EXPECT(Dart_IsString(canonical_str));
+ EXPECT(!Dart_IsExternalString(canonical_str));
+
// Test with a one byte ascii string.
const char* ascii = "string";
expected_length = strlen(ascii);
@@ -7056,9 +7026,11 @@
}
EXPECT_EQ(40, peer8);
EXPECT_EQ(41, peer16);
+ EXPECT_EQ(42, canonical_str_peer);
Isolate::Current()->heap()->CollectGarbage(Heap::kNew);
EXPECT_EQ(80, peer8);
EXPECT_EQ(82, peer16);
+ EXPECT_EQ(42, canonical_str_peer); // "*" Symbol is not removed on GC.
}

Powered by Google App Engine
This is Rietveld 408576698