summaryrefslogtreecommitdiff
path: root/test/js-native-api/test_new_target
diff options
context:
space:
mode:
authorGabriel Schulhof <gabriel.schulhof@intel.com>2018-11-17 12:34:54 -0800
committerGabriel Schulhof <gabriel.schulhof@intel.com>2018-12-04 13:58:17 -0800
commit938e11882b96e19b443477571455088baaa054d8 (patch)
treeeb828a60957a2881995ba9a83f44a32a18fbff16 /test/js-native-api/test_new_target
parent83ee137c4565112177f22f2c735b266b22262220 (diff)
downloadandroid-node-v8-938e11882b96e19b443477571455088baaa054d8.tar.gz
android-node-v8-938e11882b96e19b443477571455088baaa054d8.tar.bz2
android-node-v8-938e11882b96e19b443477571455088baaa054d8.zip
test: partition N-API tests
Partition test/addons-napi into test/js-native-api and test/node-api to isolate the Node.js-agnostic portion of the N-API tests from the Node.js-specific portion. PR-URL: https://github.com/nodejs/node/pull/24557 Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Diffstat (limited to 'test/js-native-api/test_new_target')
-rw-r--r--test/js-native-api/test_new_target/binding.c69
-rw-r--r--test/js-native-api/test_new_target/binding.gyp12
-rw-r--r--test/js-native-api/test_new_target/test.js21
3 files changed, 102 insertions, 0 deletions
diff --git a/test/js-native-api/test_new_target/binding.c b/test/js-native-api/test_new_target/binding.c
new file mode 100644
index 0000000000..bfb4138f71
--- /dev/null
+++ b/test/js-native-api/test_new_target/binding.c
@@ -0,0 +1,69 @@
+#include <js_native_api.h>
+#include "../common.h"
+
+static napi_value BaseClass(napi_env env, napi_callback_info info) {
+ napi_value newTargetArg;
+ NAPI_CALL(env, napi_get_new_target(env, info, &newTargetArg));
+ napi_value thisArg;
+ NAPI_CALL(env, napi_get_cb_info(env, info, NULL, NULL, &thisArg, NULL));
+ napi_value undefined;
+ NAPI_CALL(env, napi_get_undefined(env, &undefined));
+
+ // this !== new.target since we are being invoked through super()
+ bool result;
+ NAPI_CALL(env, napi_strict_equals(env, newTargetArg, thisArg, &result));
+ NAPI_ASSERT(env, !result, "this !== new.target");
+
+ // new.target !== undefined because we should be called as a new expression
+ NAPI_ASSERT(env, newTargetArg != NULL, "newTargetArg != NULL");
+ NAPI_CALL(env, napi_strict_equals(env, newTargetArg, undefined, &result));
+ NAPI_ASSERT(env, !result, "new.target !== undefined");
+
+ return thisArg;
+}
+
+static napi_value Constructor(napi_env env, napi_callback_info info) {
+ bool result;
+ napi_value newTargetArg;
+ NAPI_CALL(env, napi_get_new_target(env, info, &newTargetArg));
+ size_t argc = 1;
+ napi_value argv;
+ napi_value thisArg;
+ NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &argv, &thisArg, NULL));
+ napi_value undefined;
+ NAPI_CALL(env, napi_get_undefined(env, &undefined));
+
+ // new.target !== undefined because we should be called as a new expression
+ NAPI_ASSERT(env, newTargetArg != NULL, "newTargetArg != NULL");
+ NAPI_CALL(env, napi_strict_equals(env, newTargetArg, undefined, &result));
+ NAPI_ASSERT(env, !result, "new.target !== undefined");
+
+ // arguments[0] should be Constructor itself (test harness passed it)
+ NAPI_CALL(env, napi_strict_equals(env, newTargetArg, argv, &result));
+ NAPI_ASSERT(env, result, "new.target === Constructor");
+
+ return thisArg;
+}
+
+static napi_value OrdinaryFunction(napi_env env, napi_callback_info info) {
+ napi_value newTargetArg;
+ NAPI_CALL(env, napi_get_new_target(env, info, &newTargetArg));
+
+ NAPI_ASSERT(env, newTargetArg == NULL, "newTargetArg == NULL");
+
+ napi_value _true;
+ NAPI_CALL(env, napi_get_boolean(env, true, &_true));
+ return _true;
+}
+
+EXTERN_C_START
+napi_value Init(napi_env env, napi_value exports) {
+ const napi_property_descriptor desc[] = {
+ DECLARE_NAPI_PROPERTY("BaseClass", BaseClass),
+ DECLARE_NAPI_PROPERTY("OrdinaryFunction", OrdinaryFunction),
+ DECLARE_NAPI_PROPERTY("Constructor", Constructor)
+ };
+ NAPI_CALL(env, napi_define_properties(env, exports, 3, desc));
+ return exports;
+}
+EXTERN_C_END
diff --git a/test/js-native-api/test_new_target/binding.gyp b/test/js-native-api/test_new_target/binding.gyp
new file mode 100644
index 0000000000..dc050e6839
--- /dev/null
+++ b/test/js-native-api/test_new_target/binding.gyp
@@ -0,0 +1,12 @@
+{
+ 'targets': [
+ {
+ 'target_name': 'binding',
+ 'defines': [ 'V8_DEPRECATION_WARNINGS=1' ],
+ 'sources': [
+ '../entry_point.c',
+ 'binding.c'
+ ]
+ }
+ ]
+}
diff --git a/test/js-native-api/test_new_target/test.js b/test/js-native-api/test_new_target/test.js
new file mode 100644
index 0000000000..702e8ca8b4
--- /dev/null
+++ b/test/js-native-api/test_new_target/test.js
@@ -0,0 +1,21 @@
+'use strict';
+
+const common = require('../../common');
+const assert = require('assert');
+const binding = require(`./build/${common.buildType}/binding`);
+
+class Class extends binding.BaseClass {
+ constructor() {
+ super();
+ this.method();
+ }
+ method() {
+ this.ok = true;
+ }
+}
+
+assert.ok(new Class() instanceof binding.BaseClass);
+assert.ok(new Class().ok);
+assert.ok(binding.OrdinaryFunction());
+assert.ok(
+ new binding.Constructor(binding.Constructor) instanceof binding.Constructor);