From 0ec0272e107e26c9740f33baade3cbe10a321fa3 Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Mon, 10 Apr 2017 23:09:15 -0400 Subject: [PATCH] test: improve test coverage for n-api Add basic tests for handle scopes as code coverage reports that we are not covering these with the existing tests. PR-URL: https://github.com/nodejs/node/pull/12327 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- .../addons-napi/test_handle_scope/binding.gyp | 8 ++++ test/addons-napi/test_handle_scope/test.js | 10 +++++ .../test_handle_scope/test_handle_scope.c | 42 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 test/addons-napi/test_handle_scope/binding.gyp create mode 100644 test/addons-napi/test_handle_scope/test.js create mode 100644 test/addons-napi/test_handle_scope/test_handle_scope.c diff --git a/test/addons-napi/test_handle_scope/binding.gyp b/test/addons-napi/test_handle_scope/binding.gyp new file mode 100644 index 00000000000000..daa96681a52018 --- /dev/null +++ b/test/addons-napi/test_handle_scope/binding.gyp @@ -0,0 +1,8 @@ +{ + "targets": [ + { + "target_name": "test_handle_scope", + "sources": [ "test_handle_scope.c" ] + } + ] +} diff --git a/test/addons-napi/test_handle_scope/test.js b/test/addons-napi/test_handle_scope/test.js new file mode 100644 index 00000000000000..ed52410f8075dd --- /dev/null +++ b/test/addons-napi/test_handle_scope/test.js @@ -0,0 +1,10 @@ +'use strict'; +const common = require('../../common'); +const assert = require('assert'); + +// testing handle scope api calls +const testHandleScope = + require(`./build/${common.buildType}/test_handle_scope`); + +testHandleScope.NewScope(); +assert.ok(testHandleScope.NewScopeEscape() instanceof Object); diff --git a/test/addons-napi/test_handle_scope/test_handle_scope.c b/test/addons-napi/test_handle_scope/test_handle_scope.c new file mode 100644 index 00000000000000..f88c04705ebdd2 --- /dev/null +++ b/test/addons-napi/test_handle_scope/test_handle_scope.c @@ -0,0 +1,42 @@ +#include +#include "../common.h" +#include + +// these tests validate the handle scope functions in the normal +// flow. Forcing gc behaviour to fully validate they are doing +// the right right thing would be quite hard so we keep it +// simple for now. + +napi_value NewScope(napi_env env, napi_callback_info info) { + napi_handle_scope scope; + napi_value output = NULL; + + NAPI_CALL(env, napi_open_handle_scope(env, &scope)); + NAPI_CALL(env, napi_create_object(env, &output)); + NAPI_CALL(env, napi_close_handle_scope(env, scope)); + return NULL; +} + +napi_value NewScopeEscape(napi_env env, napi_callback_info info) { + napi_escapable_handle_scope scope; + napi_value output = NULL; + napi_value escapee = NULL; + + NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope)); + NAPI_CALL(env, napi_create_object(env, &output)); + NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee)); + NAPI_CALL(env, napi_close_escapable_handle_scope(env, scope)); + return escapee; +} + +void Init(napi_env env, napi_value exports, napi_value module, void* priv) { + napi_property_descriptor properties[] = { + DECLARE_NAPI_PROPERTY("NewScope", NewScope), + DECLARE_NAPI_PROPERTY("NewScopeEscape", NewScopeEscape), + }; + + NAPI_CALL_RETURN_VOID(env, napi_define_properties( + env, exports, sizeof(properties) / sizeof(*properties), properties)); +} + +NAPI_MODULE(addon, Init)