Skip to content

Commit d4942cc

Browse files
authored
test: Complete test coverage for Reference<T> class (#1277)
* test: Add test coverage for reference<T> * test: Remove comments * Add suppress desturct
1 parent a8ad7e7 commit d4942cc

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

test/reference.cc

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,60 @@
1+
#include "assert.h"
12
#include "napi.h"
2-
3+
#include "test_helper.h"
34
using namespace Napi;
45

56
static Reference<Buffer<uint8_t>> weak;
67

8+
static void RefMoveAssignTests(const Napi::CallbackInfo& info) {
9+
Napi::Object obj = Napi::Object::New(info.Env());
10+
obj.Set("tPro", "tTEST");
11+
Napi::Reference<Napi::Object> ref = Napi::Reference<Napi::Object>::New(obj);
12+
ref.SuppressDestruct();
13+
14+
napi_ref obj_ref = static_cast<napi_ref>(ref);
15+
Napi::Reference<Napi::Object> existingRef =
16+
Napi::Reference<Napi::Object>(info.Env(), obj_ref);
17+
assert(ref == existingRef);
18+
assert(!(ref != existingRef));
19+
20+
std::string val =
21+
MaybeUnwrap(existingRef.Value().Get("tPro")).As<Napi::String>();
22+
assert(val == "tTEST");
23+
// ------------------------------------------------------------ //
24+
Napi::Reference<Napi::Object> copyMoveRef = std::move(existingRef);
25+
assert(copyMoveRef == ref);
26+
27+
Napi::Reference<Napi::Object> copyAssignRef;
28+
copyAssignRef = std::move(copyMoveRef);
29+
assert(copyAssignRef == ref);
30+
}
31+
32+
static void ReferenceRefTests(const Napi::CallbackInfo& info) {
33+
Napi::Object obj = Napi::Object::New(info.Env());
34+
Napi::Reference<Napi::Object> ref = Napi::Reference<Napi::Object>::New(obj);
35+
36+
assert(ref.Ref() == 1);
37+
assert(ref.Unref() == 0);
38+
}
39+
40+
static void ReferenceResetTests(const Napi::CallbackInfo& info) {
41+
Napi::Object obj = Napi::Object::New(info.Env());
42+
Napi::Reference<Napi::Object> ref = Napi::Reference<Napi::Object>::New(obj);
43+
assert(!ref.IsEmpty());
44+
45+
ref.Reset();
46+
assert(ref.IsEmpty());
47+
48+
Napi::Object newObject = Napi::Object::New(info.Env());
49+
newObject.Set("n-api", "node");
50+
51+
ref.Reset(newObject, 1);
52+
assert(!ref.IsEmpty());
53+
54+
std::string val = MaybeUnwrap(ref.Value().Get("n-api")).As<Napi::String>();
55+
assert(val == "node");
56+
}
57+
758
void CreateWeakArray(const CallbackInfo& info) {
859
weak = Weak(Buffer<uint8_t>::New(info.Env(), 1));
960
weak.SuppressDestruct();
@@ -20,5 +71,8 @@ Object InitReference(Env env) {
2071
exports["createWeakArray"] = Function::New(env, CreateWeakArray);
2172
exports["accessWeakArrayEmpty"] = Function::New(env, AccessWeakArrayEmpty);
2273

74+
exports["refMoveAssignTest"] = Function::New(env, RefMoveAssignTests);
75+
exports["referenceRefTest"] = Function::New(env, ReferenceRefTests);
76+
exports["refResetTest"] = Function::New(env, ReferenceResetTests);
2377
return exports;
2478
}

test/reference.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ function test (binding) {
99
return testUtil.runGCTests([
1010
'test reference',
1111
() => binding.reference.createWeakArray(),
12-
() => assert.strictEqual(true, binding.reference.accessWeakArrayEmpty())
12+
() => assert.strictEqual(true, binding.reference.accessWeakArrayEmpty()),
13+
'test reference move op',
14+
() => binding.reference.refMoveAssignTest(),
15+
'test reference ref',
16+
() => binding.reference.referenceRefTest(),
17+
'test reference reset',
18+
() => binding.reference.refResetTest()
1319
]);
1420
}

0 commit comments

Comments
 (0)