summaryrefslogtreecommitdiff
path: root/test/node-api/test_buffer/test_buffer.c
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/node-api/test_buffer/test_buffer.c
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/node-api/test_buffer/test_buffer.c')
-rw-r--r--test/node-api/test_buffer/test_buffer.c145
1 files changed, 145 insertions, 0 deletions
diff --git a/test/node-api/test_buffer/test_buffer.c b/test/node-api/test_buffer/test_buffer.c
new file mode 100644
index 0000000000..15d7c46e97
--- /dev/null
+++ b/test/node-api/test_buffer/test_buffer.c
@@ -0,0 +1,145 @@
+#include <stdlib.h>
+#include <string.h>
+#include <node_api.h>
+#include "../../js-native-api/common.h"
+
+static const char theText[] =
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
+
+static int deleterCallCount = 0;
+static void deleteTheText(napi_env env, void* data, void* finalize_hint) {
+ NAPI_ASSERT_RETURN_VOID(env, data != NULL && strcmp(data, theText) == 0, "invalid data");
+ (void)finalize_hint;
+ free(data);
+ deleterCallCount++;
+}
+
+static void noopDeleter(napi_env env, void* data, void* finalize_hint) {
+ NAPI_ASSERT_RETURN_VOID(env, data != NULL && strcmp(data, theText) == 0, "invalid data");
+ (void)finalize_hint;
+ deleterCallCount++;
+}
+
+static napi_value newBuffer(napi_env env, napi_callback_info info) {
+ napi_value theBuffer;
+ char* theCopy;
+ const unsigned int kBufferSize = sizeof(theText);
+
+ NAPI_CALL(env,
+ napi_create_buffer(
+ env,
+ sizeof(theText),
+ (void**)(&theCopy),
+ &theBuffer));
+ NAPI_ASSERT(env, theCopy, "Failed to copy static text for newBuffer");
+ memcpy(theCopy, theText, kBufferSize);
+
+ return theBuffer;
+}
+
+static napi_value newExternalBuffer(napi_env env, napi_callback_info info) {
+ napi_value theBuffer;
+ char* theCopy = strdup(theText);
+ NAPI_ASSERT(env, theCopy, "Failed to copy static text for newExternalBuffer");
+ NAPI_CALL(env,
+ napi_create_external_buffer(
+ env,
+ sizeof(theText),
+ theCopy,
+ deleteTheText,
+ NULL, // finalize_hint
+ &theBuffer));
+
+ return theBuffer;
+}
+
+static napi_value getDeleterCallCount(napi_env env, napi_callback_info info) {
+ napi_value callCount;
+ NAPI_CALL(env, napi_create_int32(env, deleterCallCount, &callCount));
+ return callCount;
+}
+
+static napi_value copyBuffer(napi_env env, napi_callback_info info) {
+ napi_value theBuffer;
+ NAPI_CALL(env, napi_create_buffer_copy(
+ env, sizeof(theText), theText, NULL, &theBuffer));
+ return theBuffer;
+}
+
+static napi_value bufferHasInstance(napi_env env, napi_callback_info info) {
+ size_t argc = 1;
+ napi_value args[1];
+ NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
+ NAPI_ASSERT(env, argc == 1, "Wrong number of arguments");
+ napi_value theBuffer = args[0];
+ bool hasInstance;
+ napi_valuetype theType;
+ NAPI_CALL(env, napi_typeof(env, theBuffer, &theType));
+ NAPI_ASSERT(env,
+ theType == napi_object,
+ "bufferHasInstance: instance is not an object");
+ NAPI_CALL(env, napi_is_buffer(env, theBuffer, &hasInstance));
+ NAPI_ASSERT(env, hasInstance, "bufferHasInstance: instance is not a buffer");
+ napi_value returnValue;
+ NAPI_CALL(env, napi_get_boolean(env, hasInstance, &returnValue));
+ return returnValue;
+}
+
+static napi_value bufferInfo(napi_env env, napi_callback_info info) {
+ size_t argc = 1;
+ napi_value args[1];
+ NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
+ NAPI_ASSERT(env, argc == 1, "Wrong number of arguments");
+ napi_value theBuffer = args[0];
+ char *bufferData;
+ napi_value returnValue;
+ size_t bufferLength;
+ NAPI_CALL(env,
+ napi_get_buffer_info(
+ env,
+ theBuffer,
+ (void**)(&bufferData),
+ &bufferLength));
+ NAPI_CALL(env, napi_get_boolean(env,
+ !strcmp(bufferData, theText) && bufferLength == sizeof(theText),
+ &returnValue));
+ return returnValue;
+}
+
+static napi_value staticBuffer(napi_env env, napi_callback_info info) {
+ napi_value theBuffer;
+ NAPI_CALL(
+ env,
+ napi_create_external_buffer(env,
+ sizeof(theText),
+ (void*)theText,
+ noopDeleter,
+ NULL, // finalize_hint
+ &theBuffer));
+ return theBuffer;
+}
+
+static napi_value Init(napi_env env, napi_value exports) {
+ napi_value theValue;
+
+ NAPI_CALL(env,
+ napi_create_string_utf8(env, theText, sizeof(theText), &theValue));
+ NAPI_CALL(env, napi_set_named_property(env, exports, "theText", theValue));
+
+ napi_property_descriptor methods[] = {
+ DECLARE_NAPI_PROPERTY("newBuffer", newBuffer),
+ DECLARE_NAPI_PROPERTY("newExternalBuffer", newExternalBuffer),
+ DECLARE_NAPI_PROPERTY("getDeleterCallCount", getDeleterCallCount),
+ DECLARE_NAPI_PROPERTY("copyBuffer", copyBuffer),
+ DECLARE_NAPI_PROPERTY("bufferHasInstance", bufferHasInstance),
+ DECLARE_NAPI_PROPERTY("bufferInfo", bufferInfo),
+ DECLARE_NAPI_PROPERTY("staticBuffer", staticBuffer),
+ };
+
+ NAPI_CALL(env, napi_define_properties(
+ env, exports, sizeof(methods) / sizeof(methods[0]), methods));
+
+ return exports;
+}
+
+NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)