diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-06-13 15:01:21 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-06-13 15:01:21 +0200 |
commit | 5c7ba22f2242930ad09f011eaea12a59153e294f (patch) | |
tree | 6edb4e52147fe81b76e340028fa9cc67e4f058e7 /deno2/js/mock_runtime.js | |
parent | 69868c2b0e4372e6d7e49821caca41d372686eea (diff) | |
parent | bb6222c91872695cbe98aa2a75166265f52cec2e (diff) |
Merge branch 'deno2'
Diffstat (limited to 'deno2/js/mock_runtime.js')
-rw-r--r-- | deno2/js/mock_runtime.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/deno2/js/mock_runtime.js b/deno2/js/mock_runtime.js new file mode 100644 index 000000000..07e5a2ca8 --- /dev/null +++ b/deno2/js/mock_runtime.js @@ -0,0 +1,69 @@ +// A simple runtime that doesn't involve typescript or protobufs to test +// libdeno. Invoked by mock_runtime_test.cc +const window = eval("this"); + +function assert(cond) { + if (!cond) throw Error("mock_runtime.js assert failed"); +} + +function typedArrayToArrayBuffer(ta) { + return ta.buffer.slice(ta.byteOffset, ta.byteOffset + ta.byteLength); +} + +function CanCallFunction() { + denoPrint("Hello world from foo"); + return "foo"; +} + +// This object is created to test snapshotting. +// See DeserializeInternalFieldsCallback and SerializeInternalFieldsCallback. +const snapshotted = new Uint8Array([1, 3, 3, 7]); + +function TypedArraySnapshots() { + assert(snapshotted[0] === 1); + assert(snapshotted[1] === 3); + assert(snapshotted[2] === 3); + assert(snapshotted[3] === 7); +} + +function PubSuccess() { + denoSub((channel, msg) => { + assert(channel === "PubSuccess"); + denoPrint("PubSuccess: ok"); + }); +} + +function PubByteLength() { + denoSub((channel, msg) => { + assert(channel === "PubByteLength"); + assert(msg instanceof ArrayBuffer); + assert(msg.byteLength === 3); + }); +} + +function SubReturnEmpty() { + const ui8 = new Uint8Array("abc".split("").map(c => c.charCodeAt(0))); + const ab = typedArrayToArrayBuffer(ui8); + let r = denoPub("SubReturnEmpty", ab); + assert(r == null); + r = denoPub("SubReturnEmpty", ab); + assert(r == null); +} + +function SubReturnBar() { + const ui8 = new Uint8Array("abc".split("").map(c => c.charCodeAt(0))); + const ab = typedArrayToArrayBuffer(ui8); + const r = denoPub("SubReturnBar", ab); + assert(r instanceof ArrayBuffer); + assert(r.byteLength === 3); + const rui8 = new Uint8Array(r); + 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)); +} |