From 1251c893212d57303ecdfa8d953d1e487cb7ec7d Mon Sep 17 00:00:00 2001 From: Inteon <42113979+inteon@users.noreply.github.com> Date: Sat, 20 Mar 2021 17:51:08 +0100 Subject: refactor: Move bin ops to deno_core and unify logic with json ops (#9457) This commit moves implementation of bin ops to "deno_core" crates as well as unifying logic between bin ops and json ops to reuse as much code as possible (both in Rust and JavaScript). --- cli/tests/unit/dispatch_bin_test.ts | 76 ++++++++++++++++++++++++++++++++++ cli/tests/unit/dispatch_buffer_test.ts | 76 ---------------------------------- cli/tests/unit/dispatch_json_test.ts | 4 +- cli/tests/unit/unit_tests.ts | 2 +- 4 files changed, 79 insertions(+), 79 deletions(-) create mode 100644 cli/tests/unit/dispatch_bin_test.ts delete mode 100644 cli/tests/unit/dispatch_buffer_test.ts (limited to 'cli') diff --git a/cli/tests/unit/dispatch_bin_test.ts b/cli/tests/unit/dispatch_bin_test.ts new file mode 100644 index 000000000..b2d96f3b3 --- /dev/null +++ b/cli/tests/unit/dispatch_bin_test.ts @@ -0,0 +1,76 @@ +import { + assert, + assertEquals, + assertMatch, + unitTest, + unreachable, +} from "./test_util.ts"; + +const readErrorStackPattern = new RegExp( + `^.* + at handleError \\(.*core\\.js:.*\\) + at binOpParseResult \\(.*core\\.js:.*\\) + at asyncHandle \\(.*core\\.js:.*\\).*$`, + "ms", +); + +unitTest(async function sendAsyncStackTrace(): Promise { + const buf = new Uint8Array(10); + const rid = 10; + try { + await Deno.read(rid, buf); + unreachable(); + } catch (error) { + assertMatch(error.stack, readErrorStackPattern); + } +}); + +declare global { + // deno-lint-ignore no-namespace + namespace Deno { + // deno-lint-ignore no-explicit-any + var core: any; // eslint-disable-line no-var + } +} + +unitTest(function binOpsHeaderTooShort(): void { + for (const op of ["op_read_sync", "op_read_async"]) { + const readOpId = Deno.core.ops()[op]; + const res = Deno.core.send( + readOpId, + new Uint8Array([ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + ]), + ); + + const headerByteLength = 4 * 4; + assert(res.byteLength > headerByteLength); + const view = new DataView( + res.buffer, + res.byteOffset + res.byteLength - headerByteLength, + headerByteLength, + ); + + const requestId = Number(view.getBigUint64(0, true)); + const status = view.getUint32(8, true); + const result = view.getUint32(12, true); + + assert(requestId === 0); + assert(status !== 0); + assertEquals(new TextDecoder().decode(res.slice(0, result)), "TypeError"); + assertEquals( + new TextDecoder().decode(res.slice(result, -headerByteLength)).trim(), + "Unparsable control buffer", + ); + } +}); diff --git a/cli/tests/unit/dispatch_buffer_test.ts b/cli/tests/unit/dispatch_buffer_test.ts deleted file mode 100644 index 0e213fe3b..000000000 --- a/cli/tests/unit/dispatch_buffer_test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { - assert, - assertEquals, - assertMatch, - unitTest, - unreachable, -} from "./test_util.ts"; - -const readErrorStackPattern = new RegExp( - `^.* - at handleError \\(.*10_dispatch_buffer\\.js:.*\\) - at bufferOpParseResult \\(.*10_dispatch_buffer\\.js:.*\\) - at Array. \\(.*10_dispatch_buffer\\.js:.*\\).*$`, - "ms", -); - -unitTest(async function sendAsyncStackTrace(): Promise { - const buf = new Uint8Array(10); - const rid = 10; - try { - await Deno.read(rid, buf); - unreachable(); - } catch (error) { - assertMatch(error.stack, readErrorStackPattern); - } -}); - -declare global { - // deno-lint-ignore no-namespace - namespace Deno { - // deno-lint-ignore no-explicit-any - var core: any; // eslint-disable-line no-var - } -} - -unitTest(function bufferOpsHeaderTooShort(): void { - for (const op of ["op_read_sync", "op_read_async"]) { - const readOpId = Deno.core.ops()[op]; - const res = Deno.core.send( - readOpId, - new Uint8Array([ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - ]), - ); - - const headerByteLength = 4 * 4; - assert(res.byteLength > headerByteLength); - const view = new DataView( - res.buffer, - res.byteOffset + res.byteLength - headerByteLength, - headerByteLength, - ); - - const requestId = Number(view.getBigUint64(0, true)); - const status = view.getUint32(8, true); - const result = view.getUint32(12, true); - - assert(requestId === 0); - assert(status !== 0); - assertEquals(new TextDecoder().decode(res.slice(0, result)), "TypeError"); - assertEquals( - new TextDecoder().decode(res.slice(result, -headerByteLength)).trim(), - "Unparsable control buffer", - ); - } -}); diff --git a/cli/tests/unit/dispatch_json_test.ts b/cli/tests/unit/dispatch_json_test.ts index c283e20c9..3cb9506dd 100644 --- a/cli/tests/unit/dispatch_json_test.ts +++ b/cli/tests/unit/dispatch_json_test.ts @@ -19,7 +19,7 @@ unitTest(function malformedJsonControlBuffer(): void { assertMatch(resObj.err.message, /\bexpected value\b/); }); -unitTest(function invalidPromiseId(): void { +unitTest(function invalidRequestId(): void { const opId = Deno.core.ops()["op_open_async"]; const reqBuf = new Uint8Array([0, 0, 0, 0, 0, 0, 0]); const resBuf = Deno.core.send(opId, reqBuf); @@ -28,5 +28,5 @@ unitTest(function invalidPromiseId(): void { console.error(resText); assertStrictEquals(resObj.ok, undefined); assertStrictEquals(resObj.err.className, "TypeError"); - assertMatch(resObj.err.message, /\bpromiseId\b/); + assertMatch(resObj.err.message, /\brequestId\b/); }); diff --git a/cli/tests/unit/unit_tests.ts b/cli/tests/unit/unit_tests.ts index 6277abdfe..d80403366 100644 --- a/cli/tests/unit/unit_tests.ts +++ b/cli/tests/unit/unit_tests.ts @@ -15,7 +15,7 @@ import "./console_test.ts"; import "./copy_file_test.ts"; import "./custom_event_test.ts"; import "./dir_test.ts"; -import "./dispatch_buffer_test.ts"; +import "./dispatch_bin_test.ts"; import "./dispatch_json_test.ts"; import "./error_stack_test.ts"; import "./event_test.ts"; -- cgit v1.2.3