summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-06-11 22:51:11 +0200
committerRyan Dahl <ry@tinyclouds.org>2018-06-11 22:51:11 +0200
commit356fd18c7385f99766fe1e8d843ec85712bbaf76 (patch)
treeb7b7d58d45f0f5c52e63a9b933fa174f78aaf639
parentf89f576f6da6738617ac30f57b3c832a293434f5 (diff)
Calling denoSub twice should fail.
-rw-r--r--deno2/deno.cc5
-rw-r--r--deno2/js/mock_runtime.js7
-rw-r--r--deno2/mock_runtime_test.cc6
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();