Skip to content

Commit fc5dc94

Browse files
committed
add AddPostFinalizer test
1 parent 7c949dd commit fc5dc94

File tree

2 files changed

+79
-2
lines changed

2 files changed

+79
-2
lines changed

test/finalizer_order.cc

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,56 @@ Napi::Value IsExternalGcFinalizerCalled(const Napi::CallbackInfo& info) {
8484
return Napi::Boolean::New(info.Env(), externalGcFinalizerCalled);
8585
}
8686

87+
Napi::Value AddPostFinalizer(const Napi::CallbackInfo& info) {
88+
auto env = info.Env();
89+
90+
env.AddPostFinalizer(
91+
[callback = Napi::Persistent(info[0].As<Napi::Function>())](
92+
Napi::Env /*env*/) { callback.Call({}); });
93+
94+
return env.Undefined();
95+
}
96+
97+
Napi::Value AddPostFinalizerWithData(const Napi::CallbackInfo& info) {
98+
auto env = info.Env();
99+
100+
env.AddPostFinalizer(
101+
[callback = Napi::Persistent(info[0].As<Napi::Function>())](
102+
Napi::Env /*env*/, Napi::Reference<Napi::Value>* data) {
103+
callback.Call({data->Value()});
104+
delete data;
105+
},
106+
new Napi::Reference<Napi::Value>(Napi::Persistent(info[1])));
107+
return env.Undefined();
108+
}
109+
110+
Napi::Value AddPostFinalizerWithDataAndHint(const Napi::CallbackInfo& info) {
111+
auto env = info.Env();
112+
113+
env.AddPostFinalizer(
114+
[callback = Napi::Persistent(info[0].As<Napi::Function>())](
115+
Napi::Env /*env*/,
116+
Napi::Reference<Napi::Value>* data,
117+
Napi::Reference<Napi::Value>* hint) {
118+
callback.Call({data->Value(), hint->Value()});
119+
delete data;
120+
delete hint;
121+
},
122+
new Napi::Reference<Napi::Value>(Napi::Persistent(info[1])),
123+
new Napi::Reference<Napi::Value>(Napi::Persistent(info[2])));
124+
return env.Undefined();
125+
}
126+
87127
} // namespace
88128

89129
Napi::Object InitFinalizerOrder(Napi::Env env) {
90130
Napi::Object exports = Napi::Object::New(env);
91131
Test::Initialize(env, exports);
132+
exports["AddPostFinalizer"] = Napi::Function::New(env, AddPostFinalizer);
133+
exports["AddPostFinalizerWithData"] =
134+
Napi::Function::New(env, AddPostFinalizerWithData);
135+
exports["AddPostFinalizerWithDataAndHint"] =
136+
Napi::Function::New(env, AddPostFinalizerWithDataAndHint);
92137
exports["CreateExternalNogc"] = Napi::Function::New(env, CreateExternalNogc);
93138
exports["CreateExternalGc"] = Napi::Function::New(env, CreateExternalGc);
94139
exports["isExternalNogcFinalizerCalled"] =

test/finalizer_order.js

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
/* eslint-disable no-unused-vars */
44

55
const assert = require('assert');
6+
const common = require('./common');
67
const testUtil = require('./testUtil');
78

89
module.exports = require('./common').runTest(test);
@@ -12,7 +13,7 @@ function test (binding) {
1213

1314
let isCallbackCalled = false;
1415

15-
return testUtil.runGCTests([
16+
const tests = [
1617
'Finalizer Order - ObjectWrap',
1718
() => {
1819
let test = new binding.finalizer_order.Test(() => { isCallbackCalled = true; });
@@ -62,5 +63,36 @@ function test (binding) {
6263
() => {
6364
assert.strictEqual(binding.finalizer_order.isExternalGcFinalizerCalled(), true, 'Expected External gc finalizer to be called [after ticking]');
6465
}
65-
]);
66+
];
67+
68+
if (binding.isExperimental) {
69+
tests.push(...[
70+
'AddPostFinalizer',
71+
() => {
72+
binding.finalizer_order.AddPostFinalizer(common.mustCall());
73+
},
74+
75+
'AddPostFinalizerWithData',
76+
() => {
77+
const data = {};
78+
const callback = (callbackData) => {
79+
assert.strictEqual(callbackData, data);
80+
};
81+
binding.finalizer_order.AddPostFinalizerWithData(common.mustCall(callback), data);
82+
},
83+
84+
'AddPostFinalizerWithDataAndHint',
85+
() => {
86+
const data = {};
87+
const hint = {};
88+
const callback = (callbackData, callbackHint) => {
89+
assert.strictEqual(callbackData, data);
90+
assert.strictEqual(callbackHint, hint);
91+
};
92+
binding.finalizer_order.AddPostFinalizerWithDataAndHint(common.mustCall(callback), data, hint);
93+
}
94+
]);
95+
}
96+
97+
return testUtil.runGCTests(tests);
6698
}

0 commit comments

Comments
 (0)