summaryrefslogtreecommitdiffstats
path: root/gin/wrappable_unittest.cc
diff options
context:
space:
mode:
authorkolczyk@opera.com <kolczyk@opera.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-18 16:46:14 +0000
committerkolczyk@opera.com <kolczyk@opera.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-18 16:46:14 +0000
commit744a494d5bdb17533e669bad06ed6ac4195c4e55 (patch)
treeddad83c59cd27dbaaff5e2ac0e230b747122b615 /gin/wrappable_unittest.cc
parent7ac4e53266b36040045733a5fde684837b7a4f5a (diff)
downloadchromium_src-744a494d5bdb17533e669bad06ed6ac4195c4e55.zip
chromium_src-744a494d5bdb17533e669bad06ed6ac4195c4e55.tar.gz
chromium_src-744a494d5bdb17533e669bad06ed6ac4195c4e55.tar.bz2
Added IsConstructorCall to gin::Arguments.
It simply forwards the flag from v8::FunctionCallbackInfo and allows the function handler that accept gin::Arguments argument to distinguish between normal function invocation and call as an object construction. BUG= Review URL: https://codereview.chromium.org/401823002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284123 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gin/wrappable_unittest.cc')
-rw-r--r--gin/wrappable_unittest.cc29
1 files changed, 27 insertions, 2 deletions
diff --git a/gin/wrappable_unittest.cc b/gin/wrappable_unittest.cc
index 9843329..f3de48f 100644
--- a/gin/wrappable_unittest.cc
+++ b/gin/wrappable_unittest.cc
@@ -97,8 +97,11 @@ class MyCallableObject : public Wrappable<MyCallableObject> {
virtual ~MyCallableObject() {
}
- void Call(int val) {
- result_ = val;
+ void Call(int val, const gin::Arguments& arguments) {
+ if (arguments.IsConstructCall())
+ arguments.ThrowTypeError("Cannot be called as constructor.");
+ else
+ result_ = val;
}
int result_;
@@ -245,4 +248,26 @@ TEST_F(WrappableTest, CallAsFunction) {
EXPECT_EQ(42, object->result());
}
+TEST_F(WrappableTest, CallAsConstructor) {
+ 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) {"
+ "new 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_TRUE(try_catch.HasCaught());
+}
+
} // namespace gin