Upload Kmake

This commit is contained in:
Gorochu
2026-05-26 23:36:42 -07:00
parent ba051b2f74
commit 555ec72358
41615 changed files with 13344630 additions and 1 deletions

View File

@ -0,0 +1,11 @@
{
"targets": [
{
"target_name": "test_constructor",
"sources": [
"test_constructor.c",
"test_null.c",
]
}
]
}

View File

@ -0,0 +1,62 @@
'use strict';
const common = require('../../common');
const assert = require('assert');
const getterOnlyErrorRE =
/^TypeError: Cannot set property .* of #<.*> which has only a getter$/;
// Testing api calls for a constructor that defines properties
const TestConstructor = require(`./build/${common.buildType}/test_constructor`);
const test_object = new TestConstructor();
assert.strictEqual(test_object.echo('hello'), 'hello');
test_object.readwriteValue = 1;
assert.strictEqual(test_object.readwriteValue, 1);
test_object.readwriteValue = 2;
assert.strictEqual(test_object.readwriteValue, 2);
assert.throws(() => { test_object.readonlyValue = 3; },
/^TypeError: Cannot assign to read only property 'readonlyValue' of object '#<MyObject>'$/);
assert.ok(test_object.hiddenValue);
// Properties with napi_enumerable attribute should be enumerable.
const propertyNames = [];
for (const name in test_object) {
propertyNames.push(name);
}
assert.ok(propertyNames.includes('echo'));
assert.ok(propertyNames.includes('readwriteValue'));
assert.ok(propertyNames.includes('readonlyValue'));
assert.ok(!propertyNames.includes('hiddenValue'));
assert.ok(!propertyNames.includes('readwriteAccessor1'));
assert.ok(!propertyNames.includes('readwriteAccessor2'));
assert.ok(!propertyNames.includes('readonlyAccessor1'));
assert.ok(!propertyNames.includes('readonlyAccessor2'));
// The napi_writable attribute should be ignored for accessors.
test_object.readwriteAccessor1 = 1;
assert.strictEqual(test_object.readwriteAccessor1, 1);
assert.strictEqual(test_object.readonlyAccessor1, 1);
assert.throws(() => { test_object.readonlyAccessor1 = 3; }, getterOnlyErrorRE);
test_object.readwriteAccessor2 = 2;
assert.strictEqual(test_object.readwriteAccessor2, 2);
assert.strictEqual(test_object.readonlyAccessor2, 2);
assert.throws(() => { test_object.readonlyAccessor2 = 3; }, getterOnlyErrorRE);
// Validate that static properties are on the class as opposed
// to the instance
assert.strictEqual(TestConstructor.staticReadonlyAccessor1, 10);
assert.strictEqual(test_object.staticReadonlyAccessor1, undefined);
// Verify that passing NULL to napi_define_class() results in the correct
// error.
assert.deepStrictEqual(TestConstructor.TestDefineClass(), {
envIsNull: 'Invalid argument',
nameIsNull: 'Invalid argument',
cbIsNull: 'Invalid argument',
cbDataIsNull: 'napi_ok',
propertiesIsNull: 'Invalid argument',
resultIsNull: 'Invalid argument',
});

View File

@ -0,0 +1,8 @@
'use strict';
const common = require('../../common');
const assert = require('assert');
// Testing api calls for a constructor that defines properties
const TestConstructor =
require(`./build/${common.buildType}/test_constructor`).constructorName;
assert.strictEqual(TestConstructor.name, 'MyObject');

View File

@ -0,0 +1,200 @@
#include <js_native_api.h>
#include "../common.h"
#include "../entry_point.h"
#include "test_null.h"
static double value_ = 1;
static double static_value_ = 10;
static napi_value TestDefineClass(napi_env env,
napi_callback_info info) {
napi_status status;
napi_value result, return_value;
napi_property_descriptor property_descriptor = {
"TestDefineClass",
NULL,
TestDefineClass,
NULL,
NULL,
NULL,
napi_enumerable | napi_static,
NULL};
NODE_API_CALL(env, napi_create_object(env, &return_value));
status = napi_define_class(NULL,
"TrackedFunction",
NAPI_AUTO_LENGTH,
TestDefineClass,
NULL,
1,
&property_descriptor,
&result);
add_returned_status(env,
"envIsNull",
return_value,
"Invalid argument",
napi_invalid_arg,
status);
napi_define_class(env,
NULL,
NAPI_AUTO_LENGTH,
TestDefineClass,
NULL,
1,
&property_descriptor,
&result);
add_last_status(env, "nameIsNull", return_value);
napi_define_class(env,
"TrackedFunction",
NAPI_AUTO_LENGTH,
NULL,
NULL,
1,
&property_descriptor,
&result);
add_last_status(env, "cbIsNull", return_value);
napi_define_class(env,
"TrackedFunction",
NAPI_AUTO_LENGTH,
TestDefineClass,
NULL,
1,
&property_descriptor,
&result);
add_last_status(env, "cbDataIsNull", return_value);
napi_define_class(env,
"TrackedFunction",
NAPI_AUTO_LENGTH,
TestDefineClass,
NULL,
1,
NULL,
&result);
add_last_status(env, "propertiesIsNull", return_value);
napi_define_class(env,
"TrackedFunction",
NAPI_AUTO_LENGTH,
TestDefineClass,
NULL,
1,
&property_descriptor,
NULL);
add_last_status(env, "resultIsNull", return_value);
return return_value;
}
static napi_value GetValue(napi_env env, napi_callback_info info) {
size_t argc = 0;
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, NULL, NULL, NULL));
NODE_API_ASSERT(env, argc == 0, "Wrong number of arguments");
napi_value number;
NODE_API_CALL(env, napi_create_double(env, value_, &number));
return number;
}
static napi_value SetValue(napi_env env, napi_callback_info info) {
size_t argc = 1;
napi_value args[1];
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments");
NODE_API_CALL(env, napi_get_value_double(env, args[0], &value_));
return NULL;
}
static napi_value Echo(napi_env env, napi_callback_info info) {
size_t argc = 1;
napi_value args[1];
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
NODE_API_ASSERT(env, argc == 1, "Wrong number of arguments");
return args[0];
}
static napi_value New(napi_env env, napi_callback_info info) {
napi_value _this;
NODE_API_CALL(env, napi_get_cb_info(env, info, NULL, NULL, &_this, NULL));
return _this;
}
static napi_value GetStaticValue(napi_env env, napi_callback_info info) {
size_t argc = 0;
NODE_API_CALL(env, napi_get_cb_info(env, info, &argc, NULL, NULL, NULL));
NODE_API_ASSERT(env, argc == 0, "Wrong number of arguments");
napi_value number;
NODE_API_CALL(env, napi_create_double(env, static_value_, &number));
return number;
}
static napi_value NewExtra(napi_env env, napi_callback_info info) {
napi_value _this;
NODE_API_CALL(env, napi_get_cb_info(env, info, NULL, NULL, &_this, NULL));
return _this;
}
EXTERN_C_START
napi_value Init(napi_env env, napi_value exports) {
napi_value number, cons;
NODE_API_CALL(env, napi_create_double(env, value_, &number));
NODE_API_CALL(env, napi_define_class(
env, "MyObject_Extra", 8, NewExtra, NULL, 0, NULL, &cons));
napi_property_descriptor properties[] = {
{ "echo", NULL, Echo, NULL, NULL, NULL, napi_enumerable, NULL },
{ "readwriteValue", NULL, NULL, NULL, NULL, number,
napi_enumerable | napi_writable, NULL },
{ "readonlyValue", NULL, NULL, NULL, NULL, number, napi_enumerable,
NULL },
{ "hiddenValue", NULL, NULL, NULL, NULL, number, napi_default, NULL },
{ "readwriteAccessor1", NULL, NULL, GetValue, SetValue, NULL, napi_default,
NULL },
{ "readwriteAccessor2", NULL, NULL, GetValue, SetValue, NULL,
napi_writable, NULL },
{ "readonlyAccessor1", NULL, NULL, GetValue, NULL, NULL, napi_default,
NULL },
{ "readonlyAccessor2", NULL, NULL, GetValue, NULL, NULL, napi_writable,
NULL },
{ "staticReadonlyAccessor1", NULL, NULL, GetStaticValue, NULL, NULL,
napi_default | napi_static, NULL},
{ "constructorName", NULL, NULL, NULL, NULL, cons,
napi_enumerable | napi_static, NULL },
{ "TestDefineClass", NULL, TestDefineClass, NULL, NULL, NULL,
napi_enumerable | napi_static, NULL },
};
NODE_API_CALL(env, napi_define_class(env, "MyObject", NAPI_AUTO_LENGTH, New,
NULL, sizeof(properties)/sizeof(*properties), properties, &cons));
init_test_null(env, cons);
return cons;
}
EXTERN_C_END

View File

@ -0,0 +1,111 @@
#include <js_native_api.h>
#include "../common.h"
#include "test_null.h"
static int some_data = 0;
static napi_value TestConstructor(napi_env env, napi_callback_info info) {
return NULL;
}
static napi_value TestDefineClass(napi_env env, napi_callback_info info) {
napi_value return_value, cons;
const napi_property_descriptor prop =
DECLARE_NODE_API_PROPERTY("testConstructor", TestConstructor);
NODE_API_CALL(env, napi_create_object(env, &return_value));
add_returned_status(env,
"envIsNull",
return_value,
"Invalid argument",
napi_invalid_arg,
napi_define_class(NULL,
"TestClass",
NAPI_AUTO_LENGTH,
TestConstructor,
&some_data,
1,
&prop,
&cons));
napi_define_class(env,
NULL,
NAPI_AUTO_LENGTH,
TestConstructor,
&some_data,
1,
&prop,
&cons);
add_last_status(env, "nameIsNull", return_value);
napi_define_class(
env, "TestClass", 0, TestConstructor, &some_data, 1, &prop, &cons);
add_last_status(env, "lengthIsZero", return_value);
napi_define_class(
env, "TestClass", NAPI_AUTO_LENGTH, NULL, &some_data, 1, &prop, &cons);
add_last_status(env, "nativeSideIsNull", return_value);
napi_define_class(env,
"TestClass",
NAPI_AUTO_LENGTH,
TestConstructor,
NULL,
1,
&prop,
&cons);
add_last_status(env, "dataIsNull", return_value);
napi_define_class(env,
"TestClass",
NAPI_AUTO_LENGTH,
TestConstructor,
&some_data,
0,
&prop,
&cons);
add_last_status(env, "propsLengthIsZero", return_value);
napi_define_class(env,
"TestClass",
NAPI_AUTO_LENGTH,
TestConstructor,
&some_data,
1,
NULL,
&cons);
add_last_status(env, "propsIsNull", return_value);
napi_define_class(env,
"TestClass",
NAPI_AUTO_LENGTH,
TestConstructor,
&some_data,
1,
&prop,
NULL);
add_last_status(env, "resultIsNull", return_value);
return return_value;
}
void init_test_null(napi_env env, napi_value exports) {
napi_value test_null;
const napi_property_descriptor test_null_props[] = {
DECLARE_NODE_API_PROPERTY("testDefineClass", TestDefineClass),
};
NODE_API_CALL_RETURN_VOID(env, napi_create_object(env, &test_null));
NODE_API_CALL_RETURN_VOID(
env,
napi_define_properties(env,
test_null,
sizeof(test_null_props) / sizeof(*test_null_props),
test_null_props));
NODE_API_CALL_RETURN_VOID(
env, napi_set_named_property(env, exports, "testNull", test_null));
}

View File

@ -0,0 +1,8 @@
#ifndef TEST_JS_NATIVE_API_TEST_OBJECT_TEST_NULL_H_
#define TEST_JS_NATIVE_API_TEST_OBJECT_TEST_NULL_H_
#include <js_native_api.h>
void init_test_null(napi_env env, napi_value exports);
#endif // TEST_JS_NATIVE_API_TEST_OBJECT_TEST_NULL_H_

View File

@ -0,0 +1,18 @@
'use strict';
const common = require('../../common');
const assert = require('assert');
// Test passing NULL to object-related N-APIs.
const { testNull } = require(`./build/${common.buildType}/test_constructor`);
const expectedResult = {
envIsNull: 'Invalid argument',
nameIsNull: 'Invalid argument',
lengthIsZero: 'napi_ok',
nativeSideIsNull: 'Invalid argument',
dataIsNull: 'napi_ok',
propsLengthIsZero: 'napi_ok',
propsIsNull: 'Invalid argument',
resultIsNull: 'Invalid argument',
};
assert.deepStrictEqual(testNull.testDefineClass(), expectedResult);