1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-03 04:48:52 -05:00

Deno.core.evalContext & Deno.core.print fix (#2465)

This commit is contained in:
Michał Sabiniarz 2019-06-07 02:51:04 +01:00 committed by Ryan Dahl
parent e3b2205eba
commit 9bea576f3e
5 changed files with 54 additions and 3 deletions

View file

@ -96,9 +96,11 @@ void PromiseRejectCallback(v8::PromiseRejectMessage promise_reject_message) {
}
void Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
CHECK_GE(args.Length(), 1);
CHECK_LE(args.Length(), 3);
auto* isolate = args.GetIsolate();
int argsLen = args.Length();
if (argsLen < 1 || argsLen > 2) {
ThrowInvalidArgument(isolate);
}
DenoIsolate* d = DenoIsolate::FromIsolate(isolate);
auto context = d->context_.Get(d->isolate_);
v8::HandleScope handle_scope(isolate);
@ -375,7 +377,11 @@ void EvalContext(const v8::FunctionCallbackInfo<v8::Value>& args) {
auto context = d->context_.Get(isolate);
v8::Context::Scope context_scope(context);
CHECK(args[0]->IsString());
if (!(args[0]->IsString())) {
ThrowInvalidArgument(isolate);
return;
}
auto source = args[0].As<v8::String>();
auto output = v8::Array::New(isolate, 2);

View file

@ -214,4 +214,9 @@ void HandleExceptionMessage(v8::Local<v8::Context> context,
CHECK_NOT_NULL(d);
d->last_exception_ = json_str;
}
void ThrowInvalidArgument(v8::Isolate* isolate) {
isolate->ThrowException(v8::Exception::TypeError(v8_str("Invalid Argument")));
}
} // namespace deno

View file

@ -18,6 +18,8 @@ void HandleException(v8::Local<v8::Context> context,
void HandleExceptionMessage(v8::Local<v8::Context> context,
v8::Local<v8::Message> message);
void ThrowInvalidArgument(v8::Isolate* isolate);
} // namespace deno
#endif // EXCEPTIONS_H_

View file

@ -235,6 +235,20 @@ TEST(LibDenoTest, LibDenoEvalContextError) {
deno_delete(d);
}
TEST(LibDenoTest, LibDenoEvalContextInvalidArgument) {
Deno* d = deno_new(deno_config{0, snapshot, empty, nullptr, nullptr});
deno_execute(d, nullptr, "a.js", "LibDenoEvalContextInvalidArgument();");
EXPECT_EQ(nullptr, deno_last_exception(d));
deno_delete(d);
}
TEST(LibDenoTest, LibDenoPrintInvalidArgument) {
Deno* d = deno_new(deno_config{0, snapshot, empty, nullptr, nullptr});
deno_execute(d, nullptr, "a.js", "LibDenoPrintInvalidArgument();");
EXPECT_EQ(nullptr, deno_last_exception(d));
deno_delete(d);
}
TEST(LibDenoTest, SharedAtomics) {
int32_t s[] = {0, 1, 2};
deno_buf shared = {reinterpret_cast<uint8_t*>(s), sizeof s};

View file

@ -195,3 +195,27 @@ global.LibDenoEvalContextError = () => {
assert(!errInfo5.isCompileError); // is NOT a compilation error! (just eval)
assert(errInfo5.thrown.message === "Unexpected end of input");
};
global.LibDenoEvalContextInvalidArgument = () => {
try {
Deno.core.evalContext();
} catch (e) {
assert(e instanceof TypeError);
assert(e.message === "Invalid Argument");
}
};
global.LibDenoPrintInvalidArgument = () => {
try {
Deno.core.print();
} catch (e) {
assert(e instanceof TypeError);
assert(e.message === "Invalid Argument");
}
try {
Deno.core.print(2, 3, 4);
} catch (e) {
assert(e instanceof TypeError);
assert(e.message === "Invalid Argument");
}
};