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

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

Issue 116083006: Make Function.length and Function.name configurable properties. (Closed) Base URL: git://github.com/v8/v8.git@bleeding_edge
Patch Set: Make comment + predicate more precise/correct. Created 6 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/runtime.cc ('k') | test/mjsunit/harmony/object-observe.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-accessors.cc
diff --git a/test/cctest/test-accessors.cc b/test/cctest/test-accessors.cc
index ba71600cd68a918460768f55df8561c4de0aefc4..963379ce97f6fafe341e2643386e72822af8dfdd 100644
--- a/test/cctest/test-accessors.cc
+++ b/test/cctest/test-accessors.cc
@@ -585,3 +585,72 @@ THREADED_TEST(AccessorPropertyCrossContext) {
"for (var i = 0; i < 10; i++) o.n;");
CHECK(!try_catch.HasCaught());
}
+
+
+using namespace v8::internal;
+
+
+static MaybeObject* ZeroAccessorGet(Isolate*, Object*, void*) {
+ return Smi::FromInt(0);
+}
+
+
+static MaybeObject* ReadOnlySetAccessor(Isolate* isolate,
+ JSObject*,
+ Object* value,
+ void*) {
+ return value;
+}
+
+
+const AccessorDescriptor kCallbackDescriptor = {
+ ZeroAccessorGet,
+ ReadOnlySetAccessor,
+ 0
+};
+
+
+THREADED_TEST(RedefineReadOnlyConfigurableForeignCallbackAccessor) {
+ // Verify that property redefinition over foreign callbacks-backed
+ // properties works as expected if the property is non-writable,
+ // but writable. Such a property can be redefined without first
+ // making the property writable (ES5.1 - 8.12.9.10.b)
+ // (bug 3045.)
+ LocalContext env;
+ v8::Isolate* isolate = env->GetIsolate();
+ Factory* factory = CcTest::i_isolate()->factory();
+
+ v8::HandleScope scope(isolate);
+
+ Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
+ Handle<DescriptorArray> instance_descriptors(
+ map->instance_descriptors());
+ ASSERT(instance_descriptors->IsEmpty());
+
+ Handle<DescriptorArray> descriptors = factory->NewDescriptorArray(0, 1);
+ DescriptorArray::WhitenessWitness witness(*descriptors);
+ map->set_instance_descriptors(*descriptors);
+
+ Handle<Foreign> foreign = factory->NewForeign(&kCallbackDescriptor);
+ Handle<v8::internal::String> name =
+ factory->InternalizeUtf8String(Vector<const char>("prop", 4));
+
+ // Want a non-writable and configurable property.
+ PropertyAttributes attribs =
+ static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
+ CallbacksDescriptor d(*name, *foreign, attribs);
+ map->AppendDescriptor(&d, witness);
+
+ Handle<Object> object = factory->NewJSObjectFromMap(map);
+
+ // Put the object on the global object.
+ env->Global()->Set(v8::String::NewFromUtf8(CcTest::isolate(), "Foreign"),
+ v8::Utils::ToLocal(object));
+
+ // ..and redefine the property through JavaScript, returning its value.
+ const char* script =
+ "Object.defineProperty(Foreign, 'prop', {value: 2}); Foreign.prop";
+ v8::Handle<v8::Value> result = v8::Script::Compile(
+ v8::String::NewFromUtf8(CcTest::isolate(), script))->Run();
+ CHECK_EQ(2, result->Int32Value());
+}
« no previous file with comments | « src/runtime.cc ('k') | test/mjsunit/harmony/object-observe.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698