1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#include "assert.h"
#include "napi.h"
#include "test_helper.h"
using namespace Napi;
static Reference<Buffer<uint8_t>> weak;
static void RefMoveAssignTests(const Napi::CallbackInfo& info) {
Napi::Object obj = Napi::Object::New(info.Env());
obj.Set("tPro", "tTEST");
Napi::Reference<Napi::Object> ref = Napi::Reference<Napi::Object>::New(obj);
ref.SuppressDestruct();
napi_ref obj_ref = static_cast<napi_ref>(ref);
Napi::Reference<Napi::Object> existingRef =
Napi::Reference<Napi::Object>(info.Env(), obj_ref);
assert(ref == existingRef);
assert(!(ref != existingRef));
std::string val =
MaybeUnwrap(existingRef.Value().Get("tPro")).As<Napi::String>();
assert(val == "tTEST");
// ------------------------------------------------------------ //
Napi::Reference<Napi::Object> copyMoveRef = std::move(existingRef);
assert(copyMoveRef == ref);
Napi::Reference<Napi::Object> copyAssignRef;
copyAssignRef = std::move(copyMoveRef);
assert(copyAssignRef == ref);
}
static void ReferenceRefTests(const Napi::CallbackInfo& info) {
Napi::Object obj = Napi::Object::New(info.Env());
Napi::Reference<Napi::Object> ref = Napi::Reference<Napi::Object>::New(obj);
assert(ref.Ref() == 1);
assert(ref.Unref() == 0);
}
static void ReferenceResetTests(const Napi::CallbackInfo& info) {
Napi::Object obj = Napi::Object::New(info.Env());
Napi::Reference<Napi::Object> ref = Napi::Reference<Napi::Object>::New(obj);
assert(!ref.IsEmpty());
ref.Reset();
assert(ref.IsEmpty());
Napi::Object newObject = Napi::Object::New(info.Env());
newObject.Set("n-api", "node");
ref.Reset(newObject, 1);
assert(!ref.IsEmpty());
std::string val = MaybeUnwrap(ref.Value().Get("n-api")).As<Napi::String>();
assert(val == "node");
}
void CreateWeakArray(const CallbackInfo& info) {
weak = Weak(Buffer<uint8_t>::New(info.Env(), 1));
weak.SuppressDestruct();
}
napi_value AccessWeakArrayEmpty(const CallbackInfo& info) {
Buffer<uint8_t> value = weak.Value();
return Napi::Boolean::New(info.Env(), value.IsEmpty());
}
Object InitReference(Env env) {
Object exports = Object::New(env);
exports["createWeakArray"] = Function::New(env, CreateWeakArray);
exports["accessWeakArrayEmpty"] = Function::New(env, AccessWeakArrayEmpty);
exports["refMoveAssignTest"] = Function::New(env, RefMoveAssignTests);
exports["referenceRefTest"] = Function::New(env, ReferenceRefTests);
exports["refResetTest"] = Function::New(env, ReferenceResetTests);
return exports;
}
|