summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/runtime/runtime-debug-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/runtime/runtime-debug-unittest.cc')
-rw-r--r--deps/v8/test/unittests/runtime/runtime-debug-unittest.cc58
1 files changed, 58 insertions, 0 deletions
diff --git a/deps/v8/test/unittests/runtime/runtime-debug-unittest.cc b/deps/v8/test/unittests/runtime/runtime-debug-unittest.cc
new file mode 100644
index 0000000000..dbc4a76f88
--- /dev/null
+++ b/deps/v8/test/unittests/runtime/runtime-debug-unittest.cc
@@ -0,0 +1,58 @@
+// Copyright 2021 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "include/v8.h"
+#include "src/api/api.h"
+#include "src/objects/objects-inl.h"
+#include "src/runtime/runtime.h"
+#include "test/unittests/test-utils.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace v8 {
+namespace internal {
+namespace {
+
+using RuntimeTest = TestWithContext;
+
+TEST_F(RuntimeTest, ReturnsPrototype) {
+ TryCatch try_catch(isolate());
+
+ Local<v8::Object> object = v8::Object::New(isolate());
+ Handle<JSArray> i_result =
+ Runtime::GetInternalProperties(i_isolate(), Utils::OpenHandle(*object))
+ .ToHandleChecked();
+ Local<Array> result = Utils::ToLocal(i_result);
+ EXPECT_GE(result->Length(), 1u);
+
+ char name_buffer[100];
+ result->Get(context(), 0)
+ .ToLocalChecked()
+ .As<v8::String>()
+ ->WriteUtf8(isolate(), name_buffer);
+ EXPECT_EQ("[[Prototype]]", std::string(name_buffer));
+}
+
+bool AccessCheck(Local<v8::Context> accessing_context,
+ Local<v8::Object> accessed_object, Local<Value> data) {
+ return false;
+}
+
+TEST_F(RuntimeTest, DoesNotReturnPrototypeWhenInacessible) {
+ TryCatch try_catch(isolate());
+
+ Local<ObjectTemplate> object_template = ObjectTemplate::New(isolate());
+ object_template->SetAccessCheckCallback(AccessCheck);
+
+ Local<v8::Object> object =
+ object_template->NewInstance(context()).ToLocalChecked();
+ Handle<JSArray> i_result =
+ Runtime::GetInternalProperties(i_isolate(), Utils::OpenHandle(*object))
+ .ToHandleChecked();
+ Local<Array> result = Utils::ToLocal(i_result);
+ EXPECT_EQ(0u, result->Length());
+}
+
+} // namespace
+} // namespace internal
+} // namespace v8