Skip to content

Commit 321fe1f

Browse files
committed
add AddPostFinalizer test
1 parent 7c949dd commit 321fe1f

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

test/finalizer_order.cc

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

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

89131
Napi::Object InitFinalizerOrder(Napi::Env env) {
@@ -95,5 +137,13 @@ Napi::Object InitFinalizerOrder(Napi::Env env) {
95137
Napi::Function::New(env, IsExternalNogcFinalizerCalled);
96138
exports["isExternalGcFinalizerCalled"] =
97139
Napi::Function::New(env, IsExternalGcFinalizerCalled);
140+
141+
#ifdef NODE_API_EXPERIMENTAL_HAS_POST_FINALIZER
142+
exports["AddPostFinalizer"] = Napi::Function::New(env, AddPostFinalizer);
143+
exports["AddPostFinalizerWithData"] =
144+
Napi::Function::New(env, AddPostFinalizerWithData);
145+
exports["AddPostFinalizerWithDataAndHint"] =
146+
Napi::Function::New(env, AddPostFinalizerWithDataAndHint);
147+
#endif
98148
return exports;
99149
}

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)