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

Unified Diff: test/cctest/test-api.cc

Issue 1587633002: LookupIterator should find private symbols on JSProxies (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 4 years, 11 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 | « src/objects.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index 0d98b1a48dea8b276fccabab3d49ad8d5bc46992..8d050c6dbb99b8dc87c28209a292051fd7a51deb 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -2738,6 +2738,106 @@ THREADED_TEST(SymbolTemplateProperties) {
}
+THREADED_TEST(PrivatePropertiesOnProxies) {
+ i::FLAG_harmony_proxies = true;
+ LocalContext env;
+ v8::Isolate* isolate = env->GetIsolate();
+ v8::HandleScope scope(isolate);
+
+ v8::Local<v8::Object> target = CompileRun("({})").As<v8::Object>();
+ v8::Local<v8::Object> handler = CompileRun("({})").As<v8::Object>();
+
+ v8::Local<v8::Proxy> proxy =
+ v8::Proxy::New(env.local(), target, handler).ToLocalChecked();
+
+ v8::Local<v8::Private> priv1 = v8::Private::New(isolate);
+ v8::Local<v8::Private> priv2 =
+ v8::Private::New(isolate, v8_str("my-private"));
+
+ CcTest::heap()->CollectAllGarbage();
+
+ CHECK(priv2->Name()
+ ->Equals(env.local(),
+ v8::String::NewFromUtf8(isolate, "my-private",
+ v8::NewStringType::kNormal)
+ .ToLocalChecked())
+ .FromJust());
+
+ // Make sure delete of a non-existent private symbol property works.
+ proxy->DeletePrivate(env.local(), priv1).FromJust();
+ CHECK(!proxy->HasPrivate(env.local(), priv1).FromJust());
+
+ CHECK(proxy->SetPrivate(env.local(), priv1, v8::Integer::New(isolate, 1503))
+ .FromJust());
+ CHECK(proxy->HasPrivate(env.local(), priv1).FromJust());
+ CHECK_EQ(1503, proxy->GetPrivate(env.local(), priv1)
+ .ToLocalChecked()
+ ->Int32Value(env.local())
+ .FromJust());
+ CHECK(proxy->SetPrivate(env.local(), priv1, v8::Integer::New(isolate, 2002))
+ .FromJust());
+ CHECK(proxy->HasPrivate(env.local(), priv1).FromJust());
+ CHECK_EQ(2002, proxy->GetPrivate(env.local(), priv1)
+ .ToLocalChecked()
+ ->Int32Value(env.local())
+ .FromJust());
+
+ CHECK_EQ(0u,
+ proxy->GetOwnPropertyNames(env.local()).ToLocalChecked()->Length());
+ unsigned num_props =
+ proxy->GetPropertyNames(env.local()).ToLocalChecked()->Length();
+ CHECK(proxy->Set(env.local(), v8::String::NewFromUtf8(
+ isolate, "bla", v8::NewStringType::kNormal)
+ .ToLocalChecked(),
+ v8::Integer::New(isolate, 20))
+ .FromJust());
+ CHECK_EQ(1u,
+ proxy->GetOwnPropertyNames(env.local()).ToLocalChecked()->Length());
+ CHECK_EQ(num_props + 1,
+ proxy->GetPropertyNames(env.local()).ToLocalChecked()->Length());
+
+ CcTest::heap()->CollectAllGarbage();
+
+ // Add another property and delete it afterwards to force the object in
+ // slow case.
+ CHECK(proxy->SetPrivate(env.local(), priv2, v8::Integer::New(isolate, 2008))
+ .FromJust());
+ CHECK_EQ(2002, proxy->GetPrivate(env.local(), priv1)
+ .ToLocalChecked()
+ ->Int32Value(env.local())
+ .FromJust());
+ CHECK_EQ(2008, proxy->GetPrivate(env.local(), priv2)
+ .ToLocalChecked()
+ ->Int32Value(env.local())
+ .FromJust());
+ CHECK_EQ(2002, proxy->GetPrivate(env.local(), priv1)
+ .ToLocalChecked()
+ ->Int32Value(env.local())
+ .FromJust());
+ CHECK_EQ(1u,
+ proxy->GetOwnPropertyNames(env.local()).ToLocalChecked()->Length());
+
+ CHECK(proxy->HasPrivate(env.local(), priv1).FromJust());
+ CHECK(proxy->HasPrivate(env.local(), priv2).FromJust());
+ CHECK(proxy->DeletePrivate(env.local(), priv2).FromJust());
+ CHECK(proxy->HasPrivate(env.local(), priv1).FromJust());
+ CHECK(!proxy->HasPrivate(env.local(), priv2).FromJust());
+ CHECK_EQ(2002, proxy->GetPrivate(env.local(), priv1)
+ .ToLocalChecked()
+ ->Int32Value(env.local())
+ .FromJust());
+ CHECK_EQ(1u,
+ proxy->GetOwnPropertyNames(env.local()).ToLocalChecked()->Length());
+
+ // Private properties are not inherited (for the time being).
+ v8::Local<v8::Object> child = v8::Object::New(isolate);
+ CHECK(child->SetPrototype(env.local(), proxy).FromJust());
+ CHECK(!child->HasPrivate(env.local(), priv1).FromJust());
+ CHECK_EQ(0u,
+ child->GetOwnPropertyNames(env.local()).ToLocalChecked()->Length());
+}
+
+
THREADED_TEST(PrivateProperties) {
LocalContext env;
v8::Isolate* isolate = env->GetIsolate();
« no previous file with comments | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698