Skip to content

Commit e484327

Browse files
authored
Add test coverage for typed and range err (#1280)
* test: Complete test coverage for TypedError and RangeError
1 parent ebc7858 commit e484327

File tree

2 files changed

+80
-1
lines changed

2 files changed

+80
-1
lines changed

test/error.cc

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,44 @@ void ThrowJSError(const CallbackInfo& info) {
7878
throw Error::New(info.Env(), message);
7979
}
8080

81+
void ThrowTypeErrorCtor(const CallbackInfo& info) {
82+
Napi::Value js_type_error = info[0];
83+
ReleaseAndWaitForChildProcess(info, 1);
84+
85+
throw Napi::TypeError(info.Env(), js_type_error);
86+
}
87+
8188
void ThrowTypeError(const CallbackInfo& info) {
8289
std::string message = info[0].As<String>().Utf8Value();
8390

8491
ReleaseAndWaitForChildProcess(info, 1);
8592
throw TypeError::New(info.Env(), message);
8693
}
8794

95+
void ThrowTypeErrorCStr(const CallbackInfo& info) {
96+
std::string message = info[0].As<String>().Utf8Value();
97+
98+
ReleaseAndWaitForChildProcess(info, 1);
99+
throw TypeError::New(info.Env(), message.c_str());
100+
}
101+
102+
void ThrowRangeErrorCStr(const CallbackInfo& info) {
103+
std::string message = info[0].As<String>().Utf8Value();
104+
ReleaseAndWaitForChildProcess(info, 1);
105+
throw RangeError::New(info.Env(), message.c_str());
106+
}
107+
108+
void ThrowRangeErrorCtor(const CallbackInfo& info) {
109+
Napi::Value js_range_err = info[0];
110+
ReleaseAndWaitForChildProcess(info, 1);
111+
throw Napi::RangeError(info.Env(), js_range_err);
112+
}
113+
114+
void ThrowEmptyRangeError(const CallbackInfo& info) {
115+
ReleaseAndWaitForChildProcess(info, 1);
116+
throw RangeError();
117+
}
118+
88119
void ThrowRangeError(const CallbackInfo& info) {
89120
std::string message = info[0].As<String>().Utf8Value();
90121

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

190+
void ThrowTypeErrorCtor(const CallbackInfo& info) {
191+
Napi::Value js_type_error = info[0];
192+
ReleaseAndWaitForChildProcess(info, 1);
193+
TypeError(info.Env(), js_type_error).ThrowAsJavaScriptException();
194+
}
195+
196+
void ThrowTypeErrorCStr(const CallbackInfo& info) {
197+
std::string message = info[0].As<String>().Utf8Value();
198+
199+
ReleaseAndWaitForChildProcess(info, 1);
200+
TypeError::New(info.Env(), message.c_str()).ThrowAsJavaScriptException();
201+
}
202+
159203
void ThrowRangeError(const CallbackInfo& info) {
160204
std::string message = info[0].As<String>().Utf8Value();
161205

162206
ReleaseAndWaitForChildProcess(info, 1);
163207
RangeError::New(info.Env(), message).ThrowAsJavaScriptException();
164208
}
165209

210+
void ThrowRangeErrorCtor(const CallbackInfo& info) {
211+
Napi::Value js_range_err = info[0];
212+
ReleaseAndWaitForChildProcess(info, 1);
213+
RangeError(info.Env(), js_range_err).ThrowAsJavaScriptException();
214+
}
215+
216+
void ThrowRangeErrorCStr(const CallbackInfo& info) {
217+
std::string message = info[0].As<String>().Utf8Value();
218+
ReleaseAndWaitForChildProcess(info, 1);
219+
RangeError::New(info.Env(), message.c_str()).ThrowAsJavaScriptException();
220+
}
221+
222+
// TODO: Figure out the correct api for this
223+
void ThrowEmptyRangeError(const CallbackInfo& info) {
224+
ReleaseAndWaitForChildProcess(info, 1);
225+
RangeError().ThrowAsJavaScriptException();
226+
}
227+
166228
Value CatchError(const CallbackInfo& info) {
167229
Function thrower = info[0].As<Function>();
168230
thrower({});
@@ -270,7 +332,12 @@ Object InitError(Env env) {
270332
Function::New(env, LastExceptionErrorCode);
271333
exports["throwJSError"] = Function::New(env, ThrowJSError);
272334
exports["throwTypeError"] = Function::New(env, ThrowTypeError);
335+
exports["throwTypeErrorCtor"] = Function::New(env, ThrowTypeErrorCtor);
336+
exports["throwTypeErrorCStr"] = Function::New(env, ThrowTypeErrorCStr);
273337
exports["throwRangeError"] = Function::New(env, ThrowRangeError);
338+
exports["throwRangeErrorCtor"] = Function::New(env, ThrowRangeErrorCtor);
339+
exports["throwRangeErrorCStr"] = Function::New(env, ThrowRangeErrorCStr);
340+
exports["throwEmptyRangeError"] = Function::New(env, ThrowEmptyRangeError);
274341
exports["catchError"] = Function::New(env, CatchError);
275342
exports["catchErrorMessage"] = Function::New(env, CatchErrorMessage);
276343
exports["doNotCatch"] = Function::New(env, DoNotCatch);

test/error.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,26 @@ function test (bindingPath) {
2424
return err instanceof Error && err.message === 'test';
2525
});
2626

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

31+
assert.throws(() => binding.error.throwRangeErrorCStr('test'), function (err) {
32+
return err instanceof RangeError && err.message === 'test';
33+
});
34+
3135
assert.throws(() => binding.error.throwRangeError('test'), function (err) {
3236
return err instanceof RangeError && err.message === 'test';
3337
});
3438

39+
assert.throws(() => binding.error.throwTypeErrorCtor(new TypeError('jsTypeError')), function (err) {
40+
return err instanceof TypeError && err.message === 'jsTypeError';
41+
});
42+
43+
assert.throws(() => binding.error.throwRangeErrorCtor(new RangeError('rangeTypeError')), function (err) {
44+
return err instanceof RangeError && err.message === 'rangeTypeError';
45+
});
46+
3547
assert.throws(
3648
() => binding.error.doNotCatch(
3749
() => {

0 commit comments

Comments
 (0)