1
+ #include " assert.h"
1
2
#include " napi.h"
2
-
3
+ # include " test_helper.h "
3
4
using namespace Napi ;
4
5
5
6
static Reference<Buffer<uint8_t >> weak;
6
7
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
+
7
58
void CreateWeakArray (const CallbackInfo& info) {
8
59
weak = Weak (Buffer<uint8_t >::New (info.Env (), 1 ));
9
60
weak.SuppressDestruct ();
@@ -20,5 +71,8 @@ Object InitReference(Env env) {
20
71
exports[" createWeakArray" ] = Function::New (env, CreateWeakArray);
21
72
exports[" accessWeakArrayEmpty" ] = Function::New (env, AccessWeakArrayEmpty);
22
73
74
+ exports[" refMoveAssignTest" ] = Function::New (env, RefMoveAssignTests);
75
+ exports[" referenceRefTest" ] = Function::New (env, ReferenceRefTests);
76
+ exports[" refResetTest" ] = Function::New (env, ReferenceResetTests);
23
77
return exports;
24
78
}
0 commit comments