diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-06-11 22:51:11 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-06-11 22:51:11 +0200 |
commit | 356fd18c7385f99766fe1e8d843ec85712bbaf76 (patch) | |
tree | b7b7d58d45f0f5c52e63a9b933fa174f78aaf639 | |
parent | f89f576f6da6738617ac30f57b3c832a293434f5 (diff) |
Calling denoSub twice should fail.
-rw-r--r-- | deno2/deno.cc | 5 | ||||
-rw-r--r-- | deno2/js/mock_runtime.js | 7 | ||||
-rw-r--r-- | deno2/mock_runtime_test.cc | 6 |
3 files changed, 18 insertions, 0 deletions
diff --git a/deno2/deno.cc b/deno2/deno.cc index 67b74bd63..26222d3b8 100644 --- a/deno2/deno.cc +++ b/deno2/deno.cc @@ -117,6 +117,11 @@ void Sub(const v8::FunctionCallbackInfo<v8::Value>& args) { v8::HandleScope handle_scope(isolate); + if (!d->sub.IsEmpty()) { + isolate->ThrowException(v8_str("denoSub already called.")); + return; + } + v8::Local<v8::Value> v = args[0]; assert(v->IsFunction()); v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(v); diff --git a/deno2/js/mock_runtime.js b/deno2/js/mock_runtime.js index 5702ed592..570d6cf28 100644 --- a/deno2/js/mock_runtime.js +++ b/deno2/js/mock_runtime.js @@ -49,3 +49,10 @@ function SubReturnBar() { const rstr = String.fromCharCode(...rui8); assert(rstr === "bar"); } + +function DoubleSubFails() { + // denoSub is an internal function and should only be called once from the + // runtime. + denoSub((channel, msg) => assert(false)); + denoSub((channel, msg) => assert(false)); +} diff --git a/deno2/mock_runtime_test.cc b/deno2/mock_runtime_test.cc index 44037044a..ea5ef4bf3 100644 --- a/deno2/mock_runtime_test.cc +++ b/deno2/mock_runtime_test.cc @@ -79,6 +79,12 @@ TEST(MockRuntimeTest, SubReturnBar) { deno_delete(d); } +TEST(MockRuntimeTest, DoubleSubFails) { + Deno* d = deno_new(NULL, NULL); + EXPECT_FALSE(deno_execute(d, "a.js", "DoubleSubFails()")); + deno_delete(d); +} + int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); deno_init(); |