mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 08:09:08 -05:00
1251c89321
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).
76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
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<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 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",
|
|
);
|
|
}
|
|
});
|