'use strict'; const common = require('../common'); const assert = require('assert'); const { readFileSync, } = require('fs'); const { open, } = require('fs/promises'); const check = readFileSync(__filename, { encoding: 'utf8' }); // Make sure the ReadableStream works... (async () => { const dec = new TextDecoder(); const file = await open(__filename); let data = ''; for await (const chunk of file.readableWebStream()) data += dec.decode(chunk); assert.strictEqual(check, data); assert.throws(() => file.readableWebStream(), { code: 'ERR_INVALID_STATE', }); await file.close(); })().then(common.mustCall()); // Make sure that acquiring a ReadableStream fails if the // FileHandle is already closed. (async () => { const file = await open(__filename); await file.close(); assert.throws(() => file.readableWebStream(), { code: 'ERR_INVALID_STATE', }); })().then(common.mustCall()); // Make sure that acquiring a ReadableStream fails if the // FileHandle is already closing. (async () => { const file = await open(__filename); file.close(); assert.throws(() => file.readableWebStream(), { code: 'ERR_INVALID_STATE', }); })().then(common.mustCall()); // Make sure the ReadableStream is closed when the underlying // FileHandle is closed. (async () => { const file = await open(__filename); const readable = file.readableWebStream(); const reader = readable.getReader(); file.close(); await reader.closed; })().then(common.mustCall()); // Make sure the ReadableStream is closed when the underlying // FileHandle is closed. (async () => { const file = await open(__filename); const readable = file.readableWebStream(); file.close(); const reader = readable.getReader(); await reader.closed; })().then(common.mustCall()); // Make sure that the FileHandle is properly marked "in use" // when a ReadableStream has been acquired for it. (async () => { const file = await open(__filename); file.readableWebStream(); const mc = new MessageChannel(); mc.port1.onmessage = common.mustNotCall(); assert.throws(() => mc.port2.postMessage(file, [file]), { code: 25, name: 'DataCloneError', }); mc.port1.close(); await file.close(); })().then(common.mustCall());