mirror of
https://github.com/denoland/deno.git
synced 2025-07-24 05:35:33 +00:00
feat: support abort reasons in Deno APIs and WebSocketStream
(#13066)
This commit is contained in:
parent
9ffc7edc23
commit
01a6b66034
9 changed files with 241 additions and 63 deletions
|
@ -4,6 +4,7 @@ import {
|
|||
assertEquals,
|
||||
assertRejects,
|
||||
assertThrows,
|
||||
unreachable,
|
||||
} from "./test_util.ts";
|
||||
|
||||
Deno.test(
|
||||
|
@ -250,6 +251,7 @@ Deno.test(
|
|||
queueMicrotask(() => ac.abort());
|
||||
try {
|
||||
await Deno.writeFile(filename, data, { signal: ac.signal });
|
||||
unreachable();
|
||||
} catch (e) {
|
||||
assert(e instanceof Error);
|
||||
assertEquals(e.name, "AbortError");
|
||||
|
@ -259,6 +261,45 @@ Deno.test(
|
|||
},
|
||||
);
|
||||
|
||||
Deno.test(
|
||||
{ permissions: { read: true, write: true } },
|
||||
async function writeFileAbortSignalReason(): Promise<void> {
|
||||
const ac = new AbortController();
|
||||
const enc = new TextEncoder();
|
||||
const data = enc.encode("Hello");
|
||||
const filename = Deno.makeTempDirSync() + "/test.txt";
|
||||
const abortReason = new Error();
|
||||
queueMicrotask(() => ac.abort(abortReason));
|
||||
try {
|
||||
await Deno.writeFile(filename, data, { signal: ac.signal });
|
||||
unreachable();
|
||||
} catch (e) {
|
||||
assertEquals(e, abortReason);
|
||||
}
|
||||
const stat = Deno.statSync(filename);
|
||||
assertEquals(stat.size, 0);
|
||||
},
|
||||
);
|
||||
|
||||
Deno.test(
|
||||
{ permissions: { read: true, write: true } },
|
||||
async function writeFileAbortSignalPrimitiveReason(): Promise<void> {
|
||||
const ac = new AbortController();
|
||||
const enc = new TextEncoder();
|
||||
const data = enc.encode("Hello");
|
||||
const filename = Deno.makeTempDirSync() + "/test.txt";
|
||||
queueMicrotask(() => ac.abort("Some string"));
|
||||
try {
|
||||
await Deno.writeFile(filename, data, { signal: ac.signal });
|
||||
unreachable();
|
||||
} catch (e) {
|
||||
assertEquals(e, "Some string");
|
||||
}
|
||||
const stat = Deno.statSync(filename);
|
||||
assertEquals(stat.size, 0);
|
||||
},
|
||||
);
|
||||
|
||||
Deno.test(
|
||||
{ permissions: { read: true, write: true } },
|
||||
async function writeFileAbortSignalPreAborted(): Promise<void> {
|
||||
|
@ -269,6 +310,7 @@ Deno.test(
|
|||
const filename = Deno.makeTempDirSync() + "/test.txt";
|
||||
try {
|
||||
await Deno.writeFile(filename, data, { signal: ac.signal });
|
||||
unreachable();
|
||||
} catch (e) {
|
||||
assert(e instanceof Error);
|
||||
assertEquals(e.name, "AbortError");
|
||||
|
@ -277,3 +319,44 @@ Deno.test(
|
|||
assertEquals(stat.size, 0);
|
||||
},
|
||||
);
|
||||
|
||||
Deno.test(
|
||||
{ permissions: { read: true, write: true } },
|
||||
async function writeFileAbortSignalReasonPreAborted(): Promise<void> {
|
||||
const ac = new AbortController();
|
||||
const abortReason = new Error();
|
||||
ac.abort(abortReason);
|
||||
const enc = new TextEncoder();
|
||||
const data = enc.encode("Hello");
|
||||
const filename = Deno.makeTempDirSync() + "/test.txt";
|
||||
try {
|
||||
await Deno.writeFile(filename, data, { signal: ac.signal });
|
||||
unreachable();
|
||||
} catch (e) {
|
||||
assertEquals(e, abortReason);
|
||||
}
|
||||
const stat = Deno.statSync(filename);
|
||||
assertEquals(stat.size, 0);
|
||||
},
|
||||
);
|
||||
|
||||
Deno.test(
|
||||
{ permissions: { read: true, write: true } },
|
||||
async function writeFileAbortSignalPrimitiveReasonPreAborted(): Promise<
|
||||
void
|
||||
> {
|
||||
const ac = new AbortController();
|
||||
ac.abort("Some string");
|
||||
const enc = new TextEncoder();
|
||||
const data = enc.encode("Hello");
|
||||
const filename = Deno.makeTempDirSync() + "/test.txt";
|
||||
try {
|
||||
await Deno.writeFile(filename, data, { signal: ac.signal });
|
||||
unreachable();
|
||||
} catch (e) {
|
||||
assertEquals(e, "Some string");
|
||||
}
|
||||
const stat = Deno.statSync(filename);
|
||||
assertEquals(stat.size, 0);
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue