Chromium Code Reviews| Index: test/cctest/test-api.cc |
| =================================================================== |
| --- test/cctest/test-api.cc (revision 3878) |
| +++ test/cctest/test-api.cc (working copy) |
| @@ -9599,3 +9599,106 @@ |
| CHECK_EQ(0, f->GetScriptLineNumber()); |
| CHECK_EQ(2, g->GetScriptLineNumber()); |
| } |
| + |
| + |
| +static v8::Handle<Value> GetterWhichReturns42(Local<String> name, |
| + const AccessorInfo& info) { |
| + return v8_num(42); |
| +} |
| + |
| + |
| +static void SetterWhichSetsYOnThisTo23(Local<String> name, |
| + Local<Value> value, |
| + const AccessorInfo& info) { |
| + info.This()->Set(v8_str("y"), v8_num(23)); |
| +} |
| + |
| + |
| +THREADED_TEST(SetterOnConstructorPrototype) { |
| + v8::HandleScope scope; |
| + Local<ObjectTemplate> templ = ObjectTemplate::New(); |
| + templ->SetAccessor(v8_str("x"), |
| + GetterWhichReturns42, |
| + SetterWhichSetsYOnThisTo23); |
| + LocalContext context; |
| + context->Global()->Set(v8_str("P"), templ->NewInstance()); |
| + CompileRun("function C1() {" |
| + " this.x = 23;" |
| + "};" |
| + "C1.prototype = P;" |
| + "function C2() {" |
| + " this.x = 23" |
| + "};" |
| + "C2.prototype = { };" |
| + "C2.prototype.__proto__ = P;" |
| + "" |
|
Mads Ager (chromium)
2010/02/18 09:19:35
Remove trailing empty strings?
Søren Thygesen Gjesse
2010/02/18 09:42:52
http://codereview.chromium.org/647007
|
| + "" |
| + ""); |
| + |
| + v8::Local<v8::Script> script; |
| + script = v8::Script::Compile(v8_str("new C1();")); |
| + for (int i = 0; i < 10; i++) { |
| + v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); |
| + CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); |
| + CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); |
| + } |
| + |
| + script = v8::Script::Compile(v8_str("new C2();")); |
| + for (int i = 0; i < 10; i++) { |
| + v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); |
| + CHECK_EQ(42, c2->Get(v8_str("x"))->Int32Value()); |
| + CHECK_EQ(23, c2->Get(v8_str("y"))->Int32Value()); |
| + } |
| +} |
| + |
| + |
| +static v8::Handle<Value> NamedPropertyGetterWhichReturns42( |
| + Local<String> name, const AccessorInfo& info) { |
| + return v8_num(42); |
| +} |
| + |
| + |
| +static v8::Handle<Value> NamedPropertySetterWhichSetsYOnThisTo23( |
| + Local<String> name, Local<Value> value, const AccessorInfo& info) { |
| + if (name->Equals(v8_str("x"))) { |
| + info.This()->Set(v8_str("y"), v8_num(23)); |
| + } |
| + return v8::Handle<Value>(); |
| +} |
| + |
| + |
| +THREADED_TEST(InterceptorOnConstructorPrototype) { |
| + v8::HandleScope scope; |
| + Local<ObjectTemplate> templ = ObjectTemplate::New(); |
| + templ->SetNamedPropertyHandler(NamedPropertyGetterWhichReturns42, |
| + NamedPropertySetterWhichSetsYOnThisTo23); |
| + LocalContext context; |
| + context->Global()->Set(v8_str("P"), templ->NewInstance()); |
| + CompileRun("function C1() {" |
| + " this.x = 23;" |
| + "};" |
| + "C1.prototype = P;" |
| + "function C2() {" |
| + " this.x = 23" |
| + "};" |
| + "C2.prototype = { };" |
| + "C2.prototype.__proto__ = P;" |
| + "" |
|
Mads Ager (chromium)
2010/02/18 09:19:35
Remove trailing empty strings?
Søren Thygesen Gjesse
2010/02/18 09:42:52
http://codereview.chromium.org/647007
|
| + "" |
| + ""); |
| + |
| + v8::Local<v8::Script> script; |
| + script = v8::Script::Compile(v8_str("new C1();")); |
| + for (int i = 0; i < 10; i++) { |
| + v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); |
| + CHECK_EQ(23, c1->Get(v8_str("x"))->Int32Value()); |
| + CHECK_EQ(42, c1->Get(v8_str("y"))->Int32Value()); |
| + } |
| + |
| + script = v8::Script::Compile(v8_str("new C2();")); |
| + for (int i = 0; i < 10; i++) { |
| + v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); |
| + CHECK_EQ(23, c2->Get(v8_str("x"))->Int32Value()); |
| + CHECK_EQ(42, c2->Get(v8_str("y"))->Int32Value()); |
| + } |
| +} |