1#include <js_native_api.h>
2
3#include "../common.h"
4#include "test_null.h"
5
6#define DECLARE_TEST(charset, str_arg)                                    \
7  static napi_value                                                       \
8  test_create_##charset(napi_env env, napi_callback_info info) {          \
9    napi_value return_value, result;                                      \
10    NODE_API_CALL(env, napi_create_object(env, &return_value));           \
11                                                                          \
12    add_returned_status(env,                                              \
13                        "envIsNull",                                      \
14                        return_value,                                     \
15                        "Invalid argument",                               \
16                        napi_invalid_arg,                                 \
17                        napi_create_string_##charset(NULL,                \
18                                                     (str_arg),           \
19                                                     NAPI_AUTO_LENGTH,    \
20                                                     &result));           \
21                                                                          \
22    napi_create_string_##charset(env, NULL, NAPI_AUTO_LENGTH, &result);   \
23    add_last_status(env, "stringIsNullNonZeroLength", return_value);      \
24                                                                          \
25    napi_create_string_##charset(env, NULL, 0, &result);                  \
26    add_last_status(env, "stringIsNullZeroLength", return_value);         \
27                                                                          \
28    napi_create_string_##charset(env, (str_arg), NAPI_AUTO_LENGTH, NULL); \
29    add_last_status(env, "resultIsNull", return_value);                   \
30                                                                          \
31    return return_value;                                                  \
32  }
33
34static const char16_t something[] = {
35  (char16_t)'s',
36  (char16_t)'o',
37  (char16_t)'m',
38  (char16_t)'e',
39  (char16_t)'t',
40  (char16_t)'h',
41  (char16_t)'i',
42  (char16_t)'n',
43  (char16_t)'g',
44  (char16_t)'\0'
45};
46
47DECLARE_TEST(utf8, "something")
48DECLARE_TEST(latin1, "something")
49DECLARE_TEST(utf16, something)
50
51void init_test_null(napi_env env, napi_value exports) {
52  napi_value test_null;
53
54  const napi_property_descriptor test_null_props[] = {
55    DECLARE_NODE_API_PROPERTY("test_create_utf8", test_create_utf8),
56    DECLARE_NODE_API_PROPERTY("test_create_latin1", test_create_latin1),
57    DECLARE_NODE_API_PROPERTY("test_create_utf16", test_create_utf16),
58  };
59
60  NODE_API_CALL_RETURN_VOID(env, napi_create_object(env, &test_null));
61  NODE_API_CALL_RETURN_VOID(env, napi_define_properties(
62      env, test_null, sizeof(test_null_props) / sizeof(*test_null_props),
63      test_null_props));
64
65  const napi_property_descriptor test_null_set = {
66    "testNull", NULL, NULL, NULL, NULL, test_null, napi_enumerable, NULL
67  };
68
69  NODE_API_CALL_RETURN_VOID(env,
70      napi_define_properties(env, exports, 1, &test_null_set));
71}
72