0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-06 14:34:09 -05:00
denoland-deno/cli/tests/unit/dispatch_buffer_test.ts
Inteon 20627c9136
refactor: update minimal ops & rename to buffer ops (#9719)
This commit rewrites "dispatch_minimal" into "dispatch_buffer".

It's part of an effort to unify JS interface for ops for both json
and minimal (buffer) ops.

Before this commit "minimal ops" could be either sync or async
depending on the return type from the op, but this commit changes
it to have separate signatures for sync and async ops (just like 
in case of json ops).
2021-03-18 14:10:27 +01:00

76 lines
1.7 KiB
TypeScript

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.<anonymous> \\(.*10_dispatch_buffer\\.js:.*\\).*$`,
"ms",
);
unitTest(async function sendAsyncStackTrace(): Promise<void> {
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",
);
}
});