From 01a6b66034b53dbeffaa12d1d408066a1bc28643 Mon Sep 17 00:00:00 2001 From: Andreu Botella Date: Thu, 16 Dec 2021 12:57:26 +0100 Subject: feat: support abort reasons in Deno APIs and `WebSocketStream` (#13066) --- cli/tests/unit/write_file_test.ts | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) (limited to 'cli/tests/unit/write_file_test.ts') diff --git a/cli/tests/unit/write_file_test.ts b/cli/tests/unit/write_file_test.ts index 66f07b9b1..b6f7d2cee 100644 --- a/cli/tests/unit/write_file_test.ts +++ b/cli/tests/unit/write_file_test.ts @@ -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 { + 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 { + 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 { @@ -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 { + 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); + }, +); -- cgit v1.2.3