| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index 1531f905d1b078f6286418e3c0096e98350a8a66..721d5569d17d7b6ac9d0ff6f9839026b5221ec13 100644
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -6979,6 +6979,78 @@ THREADED_TEST(GetterSetterExceptions) {
|
| }
|
|
|
|
|
| +THREADED_TEST(DefineAndLookupGetterSetter) {
|
| + v8::HandleScope handle_scope;
|
| + LocalContext context;
|
| + v8::Handle<v8::Object> global = context->Global();
|
| +
|
| + CompileRun("function getter() { return 'getter'; }");
|
| + Local<Function> getter = Local<Function>::Cast(global->Get(v8_str("getter")));
|
| + CompileRun("function setter() { return 'setter'; }");
|
| + Local<Function> setter = Local<Function>::Cast(global->Get(v8_str("setter")));
|
| +
|
| + Local<Object> obj = Object::New();
|
| + obj->DefineGetter(v8_str("getter"), getter);
|
| + obj->DefineSetter(v8_str("setter"), setter);
|
| + context->Global()->Set(String::New("obj"), obj);
|
| +
|
| + CompileRun("d_getter = Object.getOwnPropertyDescriptor(obj, 'getter');"
|
| + "d_setter = Object.getOwnPropertyDescriptor(obj, 'setter');");
|
| +
|
| + Local<Value> res = CompileRun("d_getter.get()");
|
| + String::AsciiValue string_value1(res);
|
| + CHECK_EQ("getter", *string_value1);
|
| + Local<Value> f1 = obj->LookupGetter(v8_str("getter"));
|
| + Local<Value> res2 = Local<Function>::Cast(f1)->Call(obj, 0, NULL);
|
| + String::AsciiValue string_value2(res2);
|
| + CHECK_EQ("getter", *string_value2);
|
| +
|
| + Local<Value> res3 = CompileRun("d_getter.set");
|
| + CHECK(res3->IsUndefined());
|
| + Local<Value> res4 = obj->LookupSetter(v8_str("getter"));
|
| + CHECK(res4->IsUndefined());
|
| +
|
| + Local<Value> res5 = CompileRun("d_setter.get");
|
| + CHECK(res5->IsUndefined());
|
| + Local<Value> res6 = obj->LookupGetter(v8_str("setter"));
|
| + CHECK(res6->IsUndefined());
|
| +
|
| + Local<Value> res7 = CompileRun("d_setter.set()");
|
| + String::AsciiValue string_value3(res7);
|
| + CHECK_EQ("setter", *string_value3);
|
| + Local<Value> f2 = obj->LookupSetter(v8_str("setter"));
|
| + Local<Value> res8 = Local<Function>::Cast(f2)->Call(obj, 0, NULL);
|
| + String::AsciiValue string_value4(res8);
|
| + CHECK_EQ("setter", *string_value4);
|
| +
|
| + CompileRun("function getter2() { return 'getter2'; }");
|
| + Local<Function> getter2 =
|
| + Local<Function>::Cast(global->Get(v8_str("getter2")));
|
| + obj->DefineGetter(v8_str("getter"), getter2);
|
| + CompileRun("d_getter = Object.getOwnPropertyDescriptor(obj, 'getter');");
|
| + Local<Value> res9 = CompileRun("d_getter.get()");
|
| + String::AsciiValue string_value5(res9);
|
| + CHECK_EQ("getter2", *string_value5);
|
| + Local<Value> f3 = obj->LookupGetter(v8_str("getter"));
|
| + Local<Value> res10 = Local<Function>::Cast(f3)->Call(obj, 0, NULL);
|
| + String::AsciiValue string_value6(res10);
|
| + CHECK_EQ("getter2", *string_value6);
|
| +
|
| + CompileRun("function setter2() { return 'setter2'; }");
|
| + Local<Function> setter2 =
|
| + Local<Function>::Cast(global->Get(v8_str("setter2")));
|
| + obj->DefineSetter(v8_str("setter"), setter2);
|
| + CompileRun("d_setter = Object.getOwnPropertyDescriptor(obj, 'setter');");
|
| + Local<Value> res11 = CompileRun("d_setter.set()");
|
| + String::AsciiValue string_value7(res11);
|
| + CHECK_EQ("setter2", *string_value7);
|
| + Local<Value> f4 = obj->LookupSetter(v8_str("setter"));
|
| + Local<Value> res12 = Local<Function>::Cast(f4)->Call(obj, 0, NULL);
|
| + String::AsciiValue string_value8(res12);
|
| + CHECK_EQ("setter2", *string_value8);
|
| +}
|
| +
|
| +
|
| THREADED_TEST(Constructor) {
|
| v8::HandleScope handle_scope;
|
| LocalContext context;
|
|
|