blob: a2337e50dbcac793678981ebd47c504f0d4b0d18 [file] [log] [blame]
// META: title=NativeIO API: close().
// META: global=window,worker
'use strict';
// Returns a handle to a newly created file that holds some data.
//
// The file will be closed and deleted when the test ends.
async function createFile(testCase, fileName) {
const file = await nativeIO.open(fileName);
testCase.add_cleanup(async () => {
await file.close();
await nativeIO.delete('test_file');
});
const writeSharedArrayBuffer = new SharedArrayBuffer(4);
const writtenBytes = new Uint8Array(writeSharedArrayBuffer);
writtenBytes.set([64, 65, 66, 67]);
const writeCount = await file.write(writtenBytes, 0);
assert_precondition(writeCount == 4);
return file;
}
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
assert_equals(await file.close(), undefined);
assert_equals(await file.close(), undefined);
}, 'NativeIOFile.close is idempotent');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const closePromise = file.close();
assert_equals(await file.close(), undefined);
assert_equals(await closePromise, undefined);
}, 'NativeIOFile.close is idempotent when called immediately');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
assert_equals(await file.close(), undefined);
const readSharedArrayBuffer = new SharedArrayBuffer(4);
const readBytes = new Uint8Array(readSharedArrayBuffer);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.read(readBytes, 4));
}, 'NativeIOFile.read fails after NativeIOFile.close settles');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const closePromise = file.close();
const readSharedArrayBuffer = new SharedArrayBuffer(4);
const readBytes = new Uint8Array(readSharedArrayBuffer);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.read(readBytes, 4));
assert_equals(await closePromise, undefined);
}, 'NativeIOFile.read fails immediately after calling NativeIOFile.close');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
assert_equals(await file.close(), undefined);
const writeSharedArrayBuffer = new SharedArrayBuffer(4);
const writtenBytes = new Uint8Array(writeSharedArrayBuffer);
writtenBytes.set([96, 97, 98, 99]);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.write(writtenBytes, 4));
}, 'NativeIOFile.write fails after NativeIOFile.close settles');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const closePromise = file.close();
const writeSharedArrayBuffer = new SharedArrayBuffer(4);
const writtenBytes = new Uint8Array(writeSharedArrayBuffer);
writtenBytes.set([96, 97, 98, 99]);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.write(writtenBytes, 4));
assert_equals(await closePromise, undefined);
}, 'NativeIOFile.write fails immediately after calling NativeIOFile.close');