| // 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(fileName); |
| }); |
| |
| 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'); |