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; |