Skip to content

Commit

Permalink
Add test coverage for typed and range err (#1280)
Browse files Browse the repository at this point in the history
* test: Complete test coverage for TypedError and RangeError
  • Loading branch information
JckXia committed Mar 17, 2023
1 parent ebc7858 commit e484327
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
67 changes: 67 additions & 0 deletions test/error.cc
Expand Up @@ -78,13 +78,44 @@ void ThrowJSError(const CallbackInfo& info) {
throw Error::New(info.Env(), message);
}

void ThrowTypeErrorCtor(const CallbackInfo& info) {
Napi::Value js_type_error = info[0];
ReleaseAndWaitForChildProcess(info, 1);

throw Napi::TypeError(info.Env(), js_type_error);
}

void ThrowTypeError(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();

ReleaseAndWaitForChildProcess(info, 1);
throw TypeError::New(info.Env(), message);
}

void ThrowTypeErrorCStr(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();

ReleaseAndWaitForChildProcess(info, 1);
throw TypeError::New(info.Env(), message.c_str());
}

void ThrowRangeErrorCStr(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();
ReleaseAndWaitForChildProcess(info, 1);
throw RangeError::New(info.Env(), message.c_str());
}

void ThrowRangeErrorCtor(const CallbackInfo& info) {
Napi::Value js_range_err = info[0];
ReleaseAndWaitForChildProcess(info, 1);
throw Napi::RangeError(info.Env(), js_range_err);
}

void ThrowEmptyRangeError(const CallbackInfo& info) {
ReleaseAndWaitForChildProcess(info, 1);
throw RangeError();
}

void ThrowRangeError(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();

Expand Down Expand Up @@ -156,13 +187,44 @@ void ThrowTypeError(const CallbackInfo& info) {
TypeError::New(info.Env(), message).ThrowAsJavaScriptException();
}

void ThrowTypeErrorCtor(const CallbackInfo& info) {
Napi::Value js_type_error = info[0];
ReleaseAndWaitForChildProcess(info, 1);
TypeError(info.Env(), js_type_error).ThrowAsJavaScriptException();
}

void ThrowTypeErrorCStr(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();

ReleaseAndWaitForChildProcess(info, 1);
TypeError::New(info.Env(), message.c_str()).ThrowAsJavaScriptException();
}

void ThrowRangeError(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();

ReleaseAndWaitForChildProcess(info, 1);
RangeError::New(info.Env(), message).ThrowAsJavaScriptException();
}

void ThrowRangeErrorCtor(const CallbackInfo& info) {
Napi::Value js_range_err = info[0];
ReleaseAndWaitForChildProcess(info, 1);
RangeError(info.Env(), js_range_err).ThrowAsJavaScriptException();
}

void ThrowRangeErrorCStr(const CallbackInfo& info) {
std::string message = info[0].As<String>().Utf8Value();
ReleaseAndWaitForChildProcess(info, 1);
RangeError::New(info.Env(), message.c_str()).ThrowAsJavaScriptException();
}

// TODO: Figure out the correct api for this
void ThrowEmptyRangeError(const CallbackInfo& info) {
ReleaseAndWaitForChildProcess(info, 1);
RangeError().ThrowAsJavaScriptException();
}

Value CatchError(const CallbackInfo& info) {
Function thrower = info[0].As<Function>();
thrower({});
Expand Down Expand Up @@ -270,7 +332,12 @@ Object InitError(Env env) {
Function::New(env, LastExceptionErrorCode);
exports["throwJSError"] = Function::New(env, ThrowJSError);
exports["throwTypeError"] = Function::New(env, ThrowTypeError);
exports["throwTypeErrorCtor"] = Function::New(env, ThrowTypeErrorCtor);
exports["throwTypeErrorCStr"] = Function::New(env, ThrowTypeErrorCStr);
exports["throwRangeError"] = Function::New(env, ThrowRangeError);
exports["throwRangeErrorCtor"] = Function::New(env, ThrowRangeErrorCtor);
exports["throwRangeErrorCStr"] = Function::New(env, ThrowRangeErrorCStr);
exports["throwEmptyRangeError"] = Function::New(env, ThrowEmptyRangeError);
exports["catchError"] = Function::New(env, CatchError);
exports["catchErrorMessage"] = Function::New(env, CatchErrorMessage);
exports["doNotCatch"] = Function::New(env, DoNotCatch);
Expand Down
14 changes: 13 additions & 1 deletion test/error.js
Expand Up @@ -24,14 +24,26 @@ function test (bindingPath) {
return err instanceof Error && err.message === 'test';
});

assert.throws(() => binding.error.throwTypeError('test'), function (err) {
assert.throws(() => binding.error.throwTypeErrorCStr('test'), function (err) {
return err instanceof TypeError && err.message === 'test';
});

assert.throws(() => binding.error.throwRangeErrorCStr('test'), function (err) {
return err instanceof RangeError && err.message === 'test';
});

assert.throws(() => binding.error.throwRangeError('test'), function (err) {
return err instanceof RangeError && err.message === 'test';
});

assert.throws(() => binding.error.throwTypeErrorCtor(new TypeError('jsTypeError')), function (err) {
return err instanceof TypeError && err.message === 'jsTypeError';
});

assert.throws(() => binding.error.throwRangeErrorCtor(new RangeError('rangeTypeError')), function (err) {
return err instanceof RangeError && err.message === 'rangeTypeError';
});

assert.throws(
() => binding.error.doNotCatch(
() => {
Expand Down

0 comments on commit e484327

Please sign in to comment.