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:
parent
e3b2205eba
commit
9bea576f3e
5 changed files with 54 additions and 3 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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_
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue