servo/tests/wpt/web-platform-tests/native-io/concurrent_io_async.tentative.https.any.js

105 lines
3.9 KiB
JavaScript

// 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_equals(writeCount, 4);
return file;
}
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const readSharedArrayBuffer = new SharedArrayBuffer(4);
const readBytes = new Uint8Array(readSharedArrayBuffer);
const readSharedArrayBuffer2 = new SharedArrayBuffer(4);
const readBytes2 = new Uint8Array(readSharedArrayBuffer2);
const readPromise = file.read(readBytes, 0);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.read(readBytes2, 4));
assert_equals(await readPromise, 4);
assert_array_equals(readBytes, [64, 65, 66, 67]);
assert_array_equals(readBytes2, [0, 0, 0, 0]);
}, 'read() rejects wrile read() is resolving');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const writeSharedArrayBuffer = new SharedArrayBuffer(4);
const writtenBytes = new Uint8Array(writeSharedArrayBuffer);
writtenBytes.set([96, 97, 98, 99]);
const readSharedArrayBuffer = new SharedArrayBuffer(4);
const readBytes = new Uint8Array(readSharedArrayBuffer);
const writePromise = file.write(writtenBytes, 0);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.read(readBytes, 4));
assert_equals(await writePromise, 4);
assert_array_equals(readBytes, [0, 0, 0, 0]);
}, 'read() rejects wrile write() is resolving');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const readSharedArrayBuffer = new SharedArrayBuffer(4);
const readBytes = new Uint8Array(readSharedArrayBuffer);
const writeSharedArrayBuffer = new SharedArrayBuffer(4);
const writtenBytes = new Uint8Array(writeSharedArrayBuffer);
writtenBytes.set([96, 97, 98, 99]);
const readPromise = file.read(readBytes, 0);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.write(writtenBytes, 4));
assert_equals(await readPromise, 4);
assert_array_equals(readBytes, [64, 65, 66, 67]);
readBytes.fill(0);
assert_equals(await file.read(readBytes, 0), 4,
'NativeIOFile.read() should not fail after a rejected write');
assert_array_equals(readBytes, [64, 65, 66, 67],
'The rejected write should not change the file');
}, 'write() rejects wrile read() is resolving');
promise_test(async testCase => {
const file = await createFile(testCase, 'file_name');
const writeSharedArrayBuffer = new SharedArrayBuffer(4);
const writtenBytes = new Uint8Array(writeSharedArrayBuffer);
writtenBytes.set([96, 97, 98, 99]);
const writeSharedArrayBuffer2 = new SharedArrayBuffer(4);
const writtenBytes2 = new Uint8Array(writeSharedArrayBuffer2);
writtenBytes2.set([48, 49, 50, 51]);
const writePromise = file.write(writtenBytes, 0);
await promise_rejects_dom(testCase, 'InvalidStateError',
file.write(writtenBytes2, 4));
assert_equals(await writePromise, 4);
const readSharedArrayBuffer = new SharedArrayBuffer(4);
const readBytes = new Uint8Array(readSharedArrayBuffer);
assert_equals(await file.read(readBytes, 0), 4,
'NativeIOFile.read() should not fail after a rejected write');
assert_array_equals(readBytes, writtenBytes,
'The rejected write should not change the file');
}, 'write() rejects wrile write() is resolving');