1 #include <js_native_api.h>
2 #include "../common.h"
3 #include "../entry_point.h"
4 #include "test_null.h"
5
6 static double value_ = 1;
7 static double static_value_ = 10;
8
TestDefineClass(napi_env env,napi_callback_info info)9 static napi_value TestDefineClass(napi_env env,
10 napi_callback_info info) {
11 napi_status status;
12 napi_value result, return_value;
13
14 napi_property_descriptor property_descriptor = {
15 "TestDefineClass",
16 NULL,
17 TestDefineClass,
18 NULL,
19 NULL,
20 NULL,
21 napi_enumerable | napi_static,
22 NULL};
23
24 NODE_API_CALL(env, napi_create_object(env, &return_value));
25
26 status = napi_define_class(NULL,
27 "TrackedFunction",
28 NAPI_AUTO_LENGTH,
29 TestDefineClass,
30 NULL,
31 1,
32 &property_descriptor,
33 &result);
34
35 add_returned_status(env,
36 "envIsNull",
37 return_value,
38 "Invalid argument",
39 napi_invalid_arg,
40 status);
41
42 napi_define_class(env,
43 NULL,
44 NAPI_AUTO_LENGTH,
45 TestDefineClass,
46 NULL,
47 1,
48 &property_descriptor,
49 &result);
50
51 add_last_status(env, "nameIsNull", return_value);
52
53 napi_define_class(env,
54 "TrackedFunction",
55 NAPI_AUTO_LENGTH,
56 NULL,
57 NULL,
58 1,
59 &property_descriptor,
60 &result);
61
62 add_last_status(env, "cbIsNull", return_value);
63
64 napi_define_class(env,
65 "TrackedFunction",
66 NAPI_AUTO_LENGTH,
67 TestDefineClass,
68 NULL,
69 1,
70 &property_descriptor,
71 &result);
72
73 add_last_status(env, "cbDataIsNull", return_value);
74
75 napi_define_class(env,
76 "TrackedFunction",
77 NAPI_AUTO_LENGTH,
78 TestDefineClass,
79 NULL,
80 1,
81 NULL,
82 &result);
83
84 add_last_status(env, "propertiesIsNull", return_value);
85
86
87 napi_define_class(env,
88 "TrackedFunction",
89 NAPI_AUTO_LENGTH,
90 TestDefineClass,
91 NULL,
92 1,
93 &property_descriptor,
94 NULL);
95
96 add_last_status(env, "resultIsNull", return_value);
97
98 return return_value;
99 }
100
GetValue(napi_env env,napi_callback_info info)101 static napi_value GetValue(napi_env env, napi_callback_info info) {
102 size_t argc = 0;
103 NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, NULL, NULL, NULL));
104
105 NODE_API_ASSERT(env, argc == 0, "Wrong number of arguments");
106
107 napi_value number;
108 NODE_API_CALL(env, napi_create_double(env, value_, &number));
109
110 return number;
111 }
112
SetValue(napi_env env,napi_callback_info info)113 static napi_value SetValue(napi_env env, napi_callback_info info) {
114 size_t argc = 1;
115 napi_value args[1];
116 NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
117
118 NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments");
119
120 NODE_API_CALL(env, napi_get_value_double(env, args[0], &value_));
121
122 return NULL;
123 }
124
Echo(napi_env env,napi_callback_info info)125 static napi_value Echo(napi_env env, napi_callback_info info) {
126 size_t argc = 1;
127 napi_value args[1];
128 NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
129
130 NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments");
131
132 return args[0];
133 }
134
New(napi_env env,napi_callback_info info)135 static napi_value New(napi_env env, napi_callback_info info) {
136 napi_value _this;
137 NODE_API_CALL(env, napi_get_cb_info(env, info, NULL, NULL, &_this, NULL));
138
139 return _this;
140 }
141
GetStaticValue(napi_env env,napi_callback_info info)142 static napi_value GetStaticValue(napi_env env, napi_callback_info info) {
143 size_t argc = 0;
144 NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, NULL, NULL, NULL));
145
146 NODE_API_ASSERT(env, argc == 0, "Wrong number of arguments");
147
148 napi_value number;
149 NODE_API_CALL(env, napi_create_double(env, static_value_, &number));
150
151 return number;
152 }
153
154
NewExtra(napi_env env,napi_callback_info info)155 static napi_value NewExtra(napi_env env, napi_callback_info info) {
156 napi_value _this;
157 NODE_API_CALL(env, napi_get_cb_info(env, info, NULL, NULL, &_this, NULL));
158
159 return _this;
160 }
161
162 EXTERN_C_START
Init(napi_env env,napi_value exports)163 napi_value Init(napi_env env, napi_value exports) {
164 napi_value number, cons;
165 NODE_API_CALL(env, napi_create_double(env, value_, &number));
166
167 NODE_API_CALL(env, napi_define_class(
168 env, "MyObject_Extra", 8, NewExtra, NULL, 0, NULL, &cons));
169
170 napi_property_descriptor properties[] = {
171 { "echo", NULL, Echo, NULL, NULL, NULL, napi_enumerable, NULL },
172 { "readwriteValue", NULL, NULL, NULL, NULL, number,
173 napi_enumerable | napi_writable, NULL },
174 { "readonlyValue", NULL, NULL, NULL, NULL, number, napi_enumerable,
175 NULL },
176 { "hiddenValue", NULL, NULL, NULL, NULL, number, napi_default, NULL },
177 { "readwriteAccessor1", NULL, NULL, GetValue, SetValue, NULL, napi_default,
178 NULL },
179 { "readwriteAccessor2", NULL, NULL, GetValue, SetValue, NULL,
180 napi_writable, NULL },
181 { "readonlyAccessor1", NULL, NULL, GetValue, NULL, NULL, napi_default,
182 NULL },
183 { "readonlyAccessor2", NULL, NULL, GetValue, NULL, NULL, napi_writable,
184 NULL },
185 { "staticReadonlyAccessor1", NULL, NULL, GetStaticValue, NULL, NULL,
186 napi_default | napi_static, NULL},
187 { "constructorName", NULL, NULL, NULL, NULL, cons,
188 napi_enumerable | napi_static, NULL },
189 { "TestDefineClass", NULL, TestDefineClass, NULL, NULL, NULL,
190 napi_enumerable | napi_static, NULL },
191 };
192
193 NODE_API_CALL(env, napi_define_class(env, "MyObject", NAPI_AUTO_LENGTH, New,
194 NULL, sizeof(properties)/sizeof(*properties), properties, &cons));
195
196 init_test_null(env, cons);
197
198 return cons;
199 }
200 EXTERN_C_END
201