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

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

Issue 6902108: Implement CallAsConstructor method for Object in the API (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 8 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
« src/api.cc ('K') | « src/api.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-api.cc
diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
index a228a6f4999b6d02748aaac768944aaf10213f2c..995c683947a0b425be9e19dbc9e3ecad15597bac 100644
--- a/test/cctest/test-api.cc
+++ b/test/cctest/test-api.cc
@@ -6744,6 +6744,49 @@ THREADED_TEST(Constructor) {
CHECK(value->BooleanValue());
}
+
+static Handle<Value> ConstructorCallback(const Arguments& args) {
+ ApiTestFuzzer::Fuzz();
+ if (args[0]->IsInt32()) {
+ Local<Object> This;
+
+ if (args.IsConstructCall()) {
+ Local<Object> Holder = args.Holder();
+ This = Object::New();
+ Local<Value> proto = Holder->GetPrototype();
+ if (proto->IsObject())
Mads Ager (chromium) 2011/04/28 12:14:42 Use braces around if bodies or make this a one-lin
+ This->SetPrototype(proto);
+ } else {
+ This = args.This();
+ }
+
+ This->Set(v8_str("a"), v8_num(args[0]->Int32Value()));
+ return This;
+ }
+
+ return args[0];
+}
+
+
+THREADED_TEST(ConstructorForObject) {
+ v8::HandleScope handle_scope;
+ LocalContext context;
+ Local<ObjectTemplate> instance_template = ObjectTemplate::New();
+ instance_template->SetCallAsFunctionHandler(ConstructorCallback);
+ Local<Object> instance = instance_template->NewInstance();
+
+ context->Global()->Set(v8_str("obj"), instance);
+ Local<Value> value1 =
+ CompileRun("(function() { var o = new obj(28); return o.a; })()");
+ CHECK_EQ(28, value1->Int32Value());
+
+ Local<Value> args[] = { v8_num(29) };
Mads Ager (chromium) 2011/04/28 12:14:42 Please add more testing. Test calling on a random
+ Local<Object> object = instance->NewInstance(1, args);
+ Local<Value> value2 = object->Get(v8_str("a"));
+ CHECK_EQ(29, value2->Int32Value());
+}
+
+
THREADED_TEST(FunctionDescriptorException) {
v8::HandleScope handle_scope;
LocalContext context;
« src/api.cc ('K') | « src/api.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698