summaryrefslogtreecommitdiff
path: root/test/addons/06_factory_of_wrapped_objects
diff options
context:
space:
mode:
Diffstat (limited to 'test/addons/06_factory_of_wrapped_objects')
-rw-r--r--test/addons/06_factory_of_wrapped_objects/binding.cc27
-rw-r--r--test/addons/06_factory_of_wrapped_objects/binding.gyp2
-rw-r--r--test/addons/06_factory_of_wrapped_objects/myobject.cc83
-rw-r--r--test/addons/06_factory_of_wrapped_objects/myobject.h28
-rw-r--r--test/addons/06_factory_of_wrapped_objects/test.js21
5 files changed, 161 insertions, 0 deletions
diff --git a/test/addons/06_factory_of_wrapped_objects/binding.cc b/test/addons/06_factory_of_wrapped_objects/binding.cc
new file mode 100644
index 0000000000..71bf45ca6e
--- /dev/null
+++ b/test/addons/06_factory_of_wrapped_objects/binding.cc
@@ -0,0 +1,27 @@
+// Auto-generated by `node tools/doc/addon-verify.js`
+// binding.cc
+#include <node.h>
+#include "myobject.h"
+
+namespace demo {
+
+using v8::FunctionCallbackInfo;
+using v8::Isolate;
+using v8::Local;
+using v8::Object;
+using v8::String;
+using v8::Value;
+
+void CreateObject(const FunctionCallbackInfo<Value>& args) {
+ MyObject::NewInstance(args);
+}
+
+void InitAll(Local<Object> exports, Local<Object> module) {
+ MyObject::Init(exports->GetIsolate());
+
+ NODE_SET_METHOD(module, "exports", CreateObject);
+}
+
+NODE_MODULE(NODE_GYP_MODULE_NAME, InitAll)
+
+} // namespace demo
diff --git a/test/addons/06_factory_of_wrapped_objects/binding.gyp b/test/addons/06_factory_of_wrapped_objects/binding.gyp
new file mode 100644
index 0000000000..5d967d0948
--- /dev/null
+++ b/test/addons/06_factory_of_wrapped_objects/binding.gyp
@@ -0,0 +1,2 @@
+# Auto-generated by `node tools/doc/addon-verify.js`
+{"targets":[{"target_name":"binding","defines":["V8_DEPRECATION_WARNINGS=1"],"sources":["binding.cc","myobject.h","myobject.cc","test.js"]}]} \ No newline at end of file
diff --git a/test/addons/06_factory_of_wrapped_objects/myobject.cc b/test/addons/06_factory_of_wrapped_objects/myobject.cc
new file mode 100644
index 0000000000..c1286f42a3
--- /dev/null
+++ b/test/addons/06_factory_of_wrapped_objects/myobject.cc
@@ -0,0 +1,83 @@
+// Auto-generated by `node tools/doc/addon-verify.js`
+// myobject.cc
+#include <node.h>
+#include "myobject.h"
+
+namespace demo {
+
+using v8::Context;
+using v8::Function;
+using v8::FunctionCallbackInfo;
+using v8::FunctionTemplate;
+using v8::Isolate;
+using v8::Local;
+using v8::Number;
+using v8::Object;
+using v8::Persistent;
+using v8::String;
+using v8::Value;
+
+Persistent<Function> MyObject::constructor;
+
+MyObject::MyObject(double value) : value_(value) {
+}
+
+MyObject::~MyObject() {
+}
+
+void MyObject::Init(Isolate* isolate) {
+ // Prepare constructor template
+ Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
+ tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject"));
+ tpl->InstanceTemplate()->SetInternalFieldCount(1);
+
+ // Prototype
+ NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);
+
+ constructor.Reset(isolate, tpl->GetFunction());
+}
+
+void MyObject::New(const FunctionCallbackInfo<Value>& args) {
+ Isolate* isolate = args.GetIsolate();
+
+ if (args.IsConstructCall()) {
+ // Invoked as constructor: `new MyObject(...)`
+ double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue();
+ MyObject* obj = new MyObject(value);
+ obj->Wrap(args.This());
+ args.GetReturnValue().Set(args.This());
+ } else {
+ // Invoked as plain function `MyObject(...)`, turn into construct call.
+ const int argc = 1;
+ Local<Value> argv[argc] = { args[0] };
+ Local<Function> cons = Local<Function>::New(isolate, constructor);
+ Local<Context> context = isolate->GetCurrentContext();
+ Local<Object> instance =
+ cons->NewInstance(context, argc, argv).ToLocalChecked();
+ args.GetReturnValue().Set(instance);
+ }
+}
+
+void MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {
+ Isolate* isolate = args.GetIsolate();
+
+ const unsigned argc = 1;
+ Local<Value> argv[argc] = { args[0] };
+ Local<Function> cons = Local<Function>::New(isolate, constructor);
+ Local<Context> context = isolate->GetCurrentContext();
+ Local<Object> instance =
+ cons->NewInstance(context, argc, argv).ToLocalChecked();
+
+ args.GetReturnValue().Set(instance);
+}
+
+void MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {
+ Isolate* isolate = args.GetIsolate();
+
+ MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.Holder());
+ obj->value_ += 1;
+
+ args.GetReturnValue().Set(Number::New(isolate, obj->value_));
+}
+
+} // namespace demo
diff --git a/test/addons/06_factory_of_wrapped_objects/myobject.h b/test/addons/06_factory_of_wrapped_objects/myobject.h
new file mode 100644
index 0000000000..323c7a8739
--- /dev/null
+++ b/test/addons/06_factory_of_wrapped_objects/myobject.h
@@ -0,0 +1,28 @@
+// Auto-generated by `node tools/doc/addon-verify.js`
+// myobject.h
+#ifndef MYOBJECT_H // NOLINT(build/header_guard)
+#define MYOBJECT_H // NOLINT(build/header_guard)
+
+#include <node.h>
+#include <node_object_wrap.h>
+
+namespace demo {
+
+class MyObject : public node::ObjectWrap {
+ public:
+ static void Init(v8::Isolate* isolate);
+ static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);
+
+ private:
+ explicit MyObject(double value = 0);
+ ~MyObject();
+
+ static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
+ static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);
+ static v8::Persistent<v8::Function> constructor;
+ double value_;
+};
+
+} // namespace demo
+
+#endif // NOLINT(build/header_guard)
diff --git a/test/addons/06_factory_of_wrapped_objects/test.js b/test/addons/06_factory_of_wrapped_objects/test.js
new file mode 100644
index 0000000000..1d02c0e1a2
--- /dev/null
+++ b/test/addons/06_factory_of_wrapped_objects/test.js
@@ -0,0 +1,21 @@
+// Auto-generated by `node tools/doc/addon-verify.js`
+'use strict';
+const common = require('../../common');
+// test.js
+const createObject = require(`./build/${common.buildType}/binding`);
+
+const obj = createObject(10);
+console.log(obj.plusOne());
+// Prints: 11
+console.log(obj.plusOne());
+// Prints: 12
+console.log(obj.plusOne());
+// Prints: 13
+
+const obj2 = createObject(20);
+console.log(obj2.plusOne());
+// Prints: 21
+console.log(obj2.plusOne());
+// Prints: 22
+console.log(obj2.plusOne());
+// Prints: 23