File: check.cc

package info (click to toggle)
node-addon-api 8.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 2,248 kB
  • sloc: cpp: 15,431; javascript: 5,631; ansic: 157; makefile: 7
file content (69 lines) | stat: -rw-r--r-- 2,008 bytes parent folder | download | duplicates (2)
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
#include "assert.h"
#include "napi.h"
#if defined(NODE_ADDON_API_ENABLE_MAYBE)

using namespace Napi;

namespace {

void VoidCallback(const CallbackInfo& info) {
  Napi::Function fn = info[0].As<Function>();
  Maybe<Value> ret = fn.Call({});

  assert(ret.IsNothing() == true);
  assert(ret.IsJust() == false);

  Napi::Value placeHolder = Napi::Number::New(info.Env(), 12345);
  Napi::Value unwrappedValue = ret.UnwrapOr(placeHolder);

  assert(unwrappedValue.As<Number>().Uint32Value() == 12345);

  assert(ret.UnwrapTo(&placeHolder) == false);
  assert(placeHolder.As<Number>().Uint32Value() == 12345);

  ret.Check();
}

void TestMaybeOperatorOverload(const CallbackInfo& info) {
  Napi::Function fn_a = info[0].As<Function>();
  Napi::Function fn_b = info[1].As<Function>();

  assert(fn_a.Call({}) == fn_a.Call({}));
  assert(fn_a.Call({}) != fn_b.Call({}));
}

void NormalJsCallback(const CallbackInfo& info) {
  Napi::Function fn = info[0].As<Function>();
  uint32_t magic_number = info[1].As<Number>().Uint32Value();

  Maybe<Value> ret = fn.Call({});

  assert(ret.IsNothing() == false);
  assert(ret.IsJust() == true);

  Napi::Value unwrappedValue = ret.Unwrap();
  assert(unwrappedValue.IsNumber() == true);

  assert(unwrappedValue.As<Number>().Uint32Value() == magic_number);

  unwrappedValue =
      ret.UnwrapOr(Napi::Number::New(info.Env(), magic_number - 1));
  assert(unwrappedValue.As<Number>().Uint32Value() == magic_number);

  Napi::Value placeHolder = Napi::Number::New(info.Env(), magic_number - 1);
  assert(ret.UnwrapTo(&placeHolder) == true);
  assert(placeHolder.As<Number>().Uint32Value() == magic_number);
}

}  // end anonymous namespace

Object InitMaybeCheck(Env env) {
  Object exports = Object::New(env);
  exports.Set("voidCallback", Function::New(env, VoidCallback));
  exports.Set("normalJsCallback", Function::New(env, NormalJsCallback));
  exports.Set("testMaybeOverloadOp",
              Function::New(env, TestMaybeOperatorOverload));
  return exports;
}

#endif