OLD | NEW |
---|---|
1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 9581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9592 v8::Handle<v8::String> script = v8::String::New( | 9592 v8::Handle<v8::String> script = v8::String::New( |
9593 "function f() {}\n\nfunction g() {}"); | 9593 "function f() {}\n\nfunction g() {}"); |
9594 v8::Script::Compile(script, &origin)->Run(); | 9594 v8::Script::Compile(script, &origin)->Run(); |
9595 v8::Local<v8::Function> f = v8::Local<v8::Function>::Cast( | 9595 v8::Local<v8::Function> f = v8::Local<v8::Function>::Cast( |
9596 env->Global()->Get(v8::String::New("f"))); | 9596 env->Global()->Get(v8::String::New("f"))); |
9597 v8::Local<v8::Function> g = v8::Local<v8::Function>::Cast( | 9597 v8::Local<v8::Function> g = v8::Local<v8::Function>::Cast( |
9598 env->Global()->Get(v8::String::New("g"))); | 9598 env->Global()->Get(v8::String::New("g"))); |
9599 CHECK_EQ(0, f->GetScriptLineNumber()); | 9599 CHECK_EQ(0, f->GetScriptLineNumber()); |
9600 CHECK_EQ(2, g->GetScriptLineNumber()); | 9600 CHECK_EQ(2, g->GetScriptLineNumber()); |
9601 } | 9601 } |
9602 | |
9603 | |
9604 static v8::Handle<Value> GetterWhichReturns42(Local<String> name, | |
9605 const AccessorInfo& info) { | |
9606 return v8_num(42); | |
9607 } | |
9608 | |
9609 | |
9610 static void SetterWhichSetsYOnThisTo23(Local<String> name, | |
9611 Local<Value> value, | |
9612 const AccessorInfo& info) { | |
9613 info.This()->Set(v8_str("y"), v8_num(23)); | |
9614 } | |
9615 | |
9616 | |
9617 THREADED_TEST(SetterOnConstructorPrototype) { | |
9618 v8::HandleScope scope; | |
9619 Local<ObjectTemplate> templ = ObjectTemplate::New(); | |
9620 templ->SetAccessor(v8_str("x"), | |
9621 GetterWhichReturns42, | |
9622 SetterWhichSetsYOnThisTo23); | |
9623 LocalContext context; | |
9624 context->Global()->Set(v8_str("P"), templ->NewInstance()); | |
9625 CompileRun("function C1() {" | |
9626 " this.x = 23;" | |
9627 "};" | |
9628 "C1.prototype = P;" | |
9629 "function C2() {" | |
9630 " this.x = 23" | |
9631 "};" | |
9632 "C2.prototype = { };" | |
9633 "C2.prototype.__proto__ = P;" | |
9634 "" | |
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
| |
9635 "" | |
9636 ""); | |
9637 | |
9638 v8::Local<v8::Script> script; | |
9639 script = v8::Script::Compile(v8_str("new C1();")); | |
9640 for (int i = 0; i < 10; i++) { | |
9641 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); | |
9642 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); | |
9643 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); | |
9644 } | |
9645 | |
9646 script = v8::Script::Compile(v8_str("new C2();")); | |
9647 for (int i = 0; i < 10; i++) { | |
9648 v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); | |
9649 CHECK_EQ(42, c2->Get(v8_str("x"))->Int32Value()); | |
9650 CHECK_EQ(23, c2->Get(v8_str("y"))->Int32Value()); | |
9651 } | |
9652 } | |
9653 | |
9654 | |
9655 static v8::Handle<Value> NamedPropertyGetterWhichReturns42( | |
9656 Local<String> name, const AccessorInfo& info) { | |
9657 return v8_num(42); | |
9658 } | |
9659 | |
9660 | |
9661 static v8::Handle<Value> NamedPropertySetterWhichSetsYOnThisTo23( | |
9662 Local<String> name, Local<Value> value, const AccessorInfo& info) { | |
9663 if (name->Equals(v8_str("x"))) { | |
9664 info.This()->Set(v8_str("y"), v8_num(23)); | |
9665 } | |
9666 return v8::Handle<Value>(); | |
9667 } | |
9668 | |
9669 | |
9670 THREADED_TEST(InterceptorOnConstructorPrototype) { | |
9671 v8::HandleScope scope; | |
9672 Local<ObjectTemplate> templ = ObjectTemplate::New(); | |
9673 templ->SetNamedPropertyHandler(NamedPropertyGetterWhichReturns42, | |
9674 NamedPropertySetterWhichSetsYOnThisTo23); | |
9675 LocalContext context; | |
9676 context->Global()->Set(v8_str("P"), templ->NewInstance()); | |
9677 CompileRun("function C1() {" | |
9678 " this.x = 23;" | |
9679 "};" | |
9680 "C1.prototype = P;" | |
9681 "function C2() {" | |
9682 " this.x = 23" | |
9683 "};" | |
9684 "C2.prototype = { };" | |
9685 "C2.prototype.__proto__ = P;" | |
9686 "" | |
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
| |
9687 "" | |
9688 ""); | |
9689 | |
9690 v8::Local<v8::Script> script; | |
9691 script = v8::Script::Compile(v8_str("new C1();")); | |
9692 for (int i = 0; i < 10; i++) { | |
9693 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); | |
9694 CHECK_EQ(23, c1->Get(v8_str("x"))->Int32Value()); | |
9695 CHECK_EQ(42, c1->Get(v8_str("y"))->Int32Value()); | |
9696 } | |
9697 | |
9698 script = v8::Script::Compile(v8_str("new C2();")); | |
9699 for (int i = 0; i < 10; i++) { | |
9700 v8::Handle<v8::Object> c2 = v8::Handle<v8::Object>::Cast(script->Run()); | |
9701 CHECK_EQ(23, c2->Get(v8_str("x"))->Int32Value()); | |
9702 CHECK_EQ(42, c2->Get(v8_str("y"))->Int32Value()); | |
9703 } | |
9704 } | |
OLD | NEW |