#include <stdio.h>
#include <stdint.h>
#include "napi_test_helpers.h"
int main(void) {
napi_env env = napi_wasm_init_env();
CHECK_OR_FAIL(env != NULL, "napi_wasm_init_env returned NULL");
{
napi_value obj;
NAPI_CALL(env, napi_create_object(env, &obj));
void* native_data = (void*)(uintptr_t)0x42;
NAPI_CALL(env, napi_wrap(env, obj, native_data, NULL, NULL, NULL));
void* retrieved = NULL;
NAPI_CALL(env, napi_unwrap(env, obj, &retrieved));
CHECK_OR_FAIL(retrieved == native_data,
"wrap/unwrap: expected same pointer");
}
{
napi_value obj;
NAPI_CALL(env, napi_create_object(env, &obj));
void* native_data = (void*)(uintptr_t)0xBEEF;
NAPI_CALL(env, napi_wrap(env, obj, native_data, NULL, NULL, NULL));
void* removed = NULL;
NAPI_CALL(env, napi_remove_wrap(env, obj, &removed));
CHECK_OR_FAIL(removed == native_data,
"remove_wrap: expected same pointer");
void* after = NULL;
napi_status status = napi_unwrap(env, obj, &after);
CHECK_OR_FAIL(status != napi_ok,
"remove_wrap: unwrap after remove should fail");
bool is_pending;
NAPI_CALL(env, napi_is_exception_pending(env, &is_pending));
if (is_pending) {
napi_value exc;
NAPI_CALL(env, napi_get_and_clear_last_exception(env, &exc));
}
}
{
napi_value obj;
NAPI_CALL(env, napi_create_object(env, &obj));
void* data1 = (void*)(uintptr_t)0x100;
NAPI_CALL(env, napi_wrap(env, obj, data1, NULL, NULL, NULL));
void* result = NULL;
NAPI_CALL(env, napi_unwrap(env, obj, &result));
CHECK_OR_FAIL(result == data1, "wrap data1: mismatch");
}
{
napi_value obj;
NAPI_CALL(env, napi_create_object(env, &obj));
NAPI_CALL(env, napi_wrap(env, obj, NULL, NULL, NULL, NULL));
void* result = (void*)(uintptr_t)0xDEAD;
NAPI_CALL(env, napi_unwrap(env, obj, &result));
CHECK_OR_FAIL(result == NULL, "wrap NULL: expected NULL back");
}
return PrintSuccess("TEST_WRAP");
}