| Index: gin/wrappable_unittest.cc
|
| diff --git a/gin/wrappable_unittest.cc b/gin/wrappable_unittest.cc
|
| index bf143cebd0650fc5d2dac61d80c67cd17f91ef0f..ec067d531f9250d2b33da4de0a01ae96f777c6e6 100644
|
| --- a/gin/wrappable_unittest.cc
|
| +++ b/gin/wrappable_unittest.cc
|
| @@ -74,6 +74,36 @@ class MyObjectSubclass : public MyObject {
|
| }
|
| };
|
|
|
| +class MyCallableObject : public Wrappable<MyCallableObject> {
|
| + public:
|
| + static WrapperInfo kWrapperInfo;
|
| +
|
| + static gin::Handle<MyCallableObject> Create(v8::Isolate* isolate) {
|
| + return CreateHandle(isolate, new MyCallableObject());
|
| + }
|
| +
|
| + int result() { return result_; }
|
| +
|
| + private:
|
| + virtual ObjectTemplateBuilder GetObjectTemplateBuilder(
|
| + v8::Isolate* isolate) OVERRIDE {
|
| + return Wrappable<MyCallableObject>::GetObjectTemplateBuilder(isolate)
|
| + .SetCallAsFunctionHandler(&MyCallableObject::Call);
|
| + }
|
| +
|
| + MyCallableObject() : result_(0) {
|
| + }
|
| +
|
| + virtual ~MyCallableObject() {
|
| + }
|
| +
|
| + void Call(int val) {
|
| + result_ = val;
|
| + }
|
| +
|
| + int result_;
|
| +};
|
| +
|
| class MyObject2 : public Wrappable<MyObject2> {
|
| public:
|
| static WrapperInfo kWrapperInfo;
|
| @@ -90,6 +120,7 @@ ObjectTemplateBuilder MyObject::GetObjectTemplateBuilder(v8::Isolate* isolate) {
|
| .SetProperty("value", &MyObject::value, &MyObject::set_value);
|
| }
|
|
|
| +WrapperInfo MyCallableObject::kWrapperInfo = { kEmbedderNativeGin };
|
| WrapperInfo MyObject2::kWrapperInfo = { kEmbedderNativeGin };
|
| WrapperInfo MyObjectBlink::kWrapperInfo = { kEmbedderNativeGin };
|
|
|
| @@ -213,4 +244,27 @@ TEST_F(WrappableTest, ErrorInObjectConstructorProperty) {
|
| EXPECT_TRUE(try_catch.HasCaught());
|
| }
|
|
|
| +TEST_F(WrappableTest, CallAsFunction) {
|
| + v8::Isolate* isolate = instance_->isolate();
|
| + v8::HandleScope handle_scope(isolate);
|
| +
|
| + gin::Handle<MyCallableObject> object(MyCallableObject::Create(isolate));
|
| + EXPECT_EQ(0, object->result());
|
| + v8::Handle<v8::String> source = StringToV8(isolate,
|
| + "(function(obj) {"
|
| + "obj(42);"
|
| + "})");
|
| + gin::TryCatch try_catch;
|
| + v8::Handle<v8::Script> script = v8::Script::Compile(source);
|
| + v8::Handle<v8::Value> val = script->Run();
|
| + v8::Handle<v8::Function> func;
|
| + EXPECT_TRUE(ConvertFromV8(isolate, val, &func));
|
| + v8::Handle<v8::Value> argv[] = {
|
| + ConvertToV8(isolate, object.get())
|
| + };
|
| + func->Call(v8::Undefined(isolate), 1, argv);
|
| + EXPECT_FALSE(try_catch.HasCaught());
|
| + EXPECT_EQ(42, object->result());
|
| +}
|
| +
|
| } // namespace gin
|
|
|