blob: a487771065f18dbd588a22fd60dbf1adc5d99e24 [file]
// META: title=NativeIO API: Read/write correctly offsets into the source buffer
// META: global=window,worker
// META: script=resources/support.js
'use strict';
promise_test(async testCase => {
await reserveAndCleanupCapacity(testCase);
const file = await storageFoundation.open('test_file');
testCase.add_cleanup(async () => {
await file.close();
await storageFoundation.delete('test_file');
});
const writeBufferData = new Uint8Array([64, 65, 66, 67, 68, 69, 70, 71]);
const writeBufferSource = new Uint8Array(writeBufferData.buffer, 3, 4);
assert_equals(writeBufferSource.byteOffset, 3, 'Test setup error');
assert_equals(writeBufferSource.byteLength, 4, 'Test setup error');
assert_equals(writeBufferSource.buffer.byteLength, 8, 'Test setup error');
const {buffer: writeBuffer, writtenBytes} =
await file.write(writeBufferSource, 0);
assert_equals(
writtenBytes, 4,
'NativeIOFile.write() should resolve with the number of bytes written');
assert_equals(
writeBuffer.byteOffset, 3,
'NativeIOFile.write() should produce the same view offset as its input');
assert_equals(
writeBuffer.byteLength, 4,
'NativeIOFile.write() should produce the same view size as its input');
assert_equals(
writeBuffer.buffer.byteLength, 8,
'NativeIOFile.write() should use the same buffer as its input');
const {buffer: readBuffer, readBytes} = await file.read(new Uint8Array(4), 0);
assert_equals(
readBytes, 4,
'NativeIOFile.write() should write the entire view size');
assert_array_equals(
readBuffer, [67, 68, 69, 70],
'NativeIOFile.write() should account for the buffer offset');
}, 'NativeIOFile.write with a Uint8Array accounts for the buffer offset');
promise_test(async testCase => {
await reserveAndCleanupCapacity(testCase);
const file = await storageFoundation.open('test_file');
testCase.add_cleanup(async () => {
await file.close();
await storageFoundation.delete('test_file');
});
const writeBufferData = new Uint16Array(
[0x4041, 0x4243, 0x4445, 0x4647, 0x4849, 0x4a4b, 0x4c4d, 0x4e4f]);
const writeBufferSource = new Uint16Array(writeBufferData.buffer, 6, 4);
assert_equals(writeBufferSource.byteOffset, 6, 'Test setup error');
assert_equals(writeBufferSource.byteLength, 8, 'Test setup error');
assert_equals(writeBufferSource.buffer.byteLength, 16, 'Test setup error');
const {buffer: writeBuffer, writtenBytes} =
await file.write(writeBufferSource, 0);
assert_equals(
writtenBytes, 8,
'NativeIOFile.write() should resolve with the number of bytes written');
assert_equals(
writeBuffer.byteOffset, 6,
'NativeIOFile.write() should produce the same view offset as its input');
assert_equals(
writeBuffer.byteLength, 8,
'NativeIOFile.write() should produce the same view size as its input');
assert_equals(
writeBuffer.buffer.byteLength, 16,
'NativeIOFile.write() should use the same buffer as its input');
const {buffer: readBuffer, readBytes} =
await file.read(new Uint16Array(4), 0);
assert_equals(
readBytes, 8,
'NativeIOFile.write() should write the entire view size');
assert_array_equals(
readBuffer, [0x4647, 0x4849, 0x4a4b, 0x4c4d],
'NativeIOFile.write() should account for the buffer offset');
}, 'NativeIOFile.write with a Uint16Array accounts for the buffer offset');
promise_test(async testCase => {
await reserveAndCleanupCapacity(testCase);
const file = await storageFoundation.open('test_file');
testCase.add_cleanup(async () => {
await file.close();
await storageFoundation.delete('test_file');
});
const {buffer: writeBuffer, writtenBytes} =
await file.write(new Uint8Array([64, 65, 66, 67]), 0);
assert_equals(
writtenBytes, 4,
'NativeIOFile.write() should resolve with the number of bytes written');
const readBufferData = new Uint8Array(8);
const readBufferSource = new Uint8Array(readBufferData.buffer, 3, 4);
assert_equals(readBufferSource.byteOffset, 3, 'Test setup error');
assert_equals(readBufferSource.byteLength, 4, 'Test setup error');
assert_equals(readBufferSource.buffer.byteLength, 8, 'Test setup error');
const {buffer: readBuffer, readBytes} = await file.read(readBufferSource, 0);
assert_equals(
readBytes, 4,
'NativeIOFile.read() should read the entire input view size');
assert_equals(
readBuffer.byteOffset, 3,
'NativeIOFile.read() should produce the same view offset as its input');
assert_equals(
readBuffer.byteLength, 4,
'NativeIOFile.read() should produce the same view size as its input');
assert_equals(
readBuffer.buffer.byteLength, 8,
'NativeIOFile.read() should use the same buffer as its input');
assert_array_equals(
readBuffer, writeBuffer,
'NativeIOFile.read() should account for the buffer offset');
const readBufferFull = new Uint8Array(readBuffer.buffer);
assert_array_equals(
readBufferFull, [0, 0, 0, 64, 65, 66, 67, 0],
'NativeIOFile.read() should leave the buffer outside the view untouched');
}, 'NativeIOFile.read with a Uint8Array accounts for the buffer offset');
promise_test(async testCase => {
await reserveAndCleanupCapacity(testCase);
const file = await storageFoundation.open('test_file');
testCase.add_cleanup(async () => {
await file.close();
await storageFoundation.delete('test_file');
});
const {buffer: writeBuffer, writtenBytes} =
await file.write(new Uint16Array([0x4041, 0x4243, 0x4445, 0x4647]), 0);
assert_equals(
writtenBytes, 8,
'NativeIOFile.write() should resolve with the number of bytes written');
const readBufferData = new Uint16Array(8);
const readBufferSource = new Uint16Array(readBufferData.buffer, 6, 4);
assert_equals(readBufferSource.byteOffset, 6, 'Test setup error');
assert_equals(readBufferSource.byteLength, 8, 'Test setup error');
assert_equals(readBufferSource.buffer.byteLength, 16, 'Test setup error');
const {buffer: readBuffer, readBytes} = await file.read(readBufferSource, 0);
assert_equals(
readBytes, 8,
'NativeIOFile.read() should read the entire input view size');
assert_equals(
readBuffer.byteOffset, 6,
'NativeIOFile.read() should produce the same view offset as its input');
assert_equals(
readBuffer.byteLength, 8,
'NativeIOFile.read() should produce the same view size as its input');
assert_equals(
readBuffer.buffer.byteLength, 16,
'NativeIOFile.read() should use the same buffer as its input');
assert_array_equals(
readBuffer, writeBuffer,
'NativeIOFile.read() should account for the buffer offset');
const readBufferFull = new Uint16Array(readBuffer.buffer);
assert_array_equals(
readBufferFull, [0, 0, 0, 0x4041, 0x4243, 0x4445, 0x4647, 0],
'NativeIOFile.read() should leave the buffer outside the view untouched');
}, 'NativeIOFile.read with a Uint16Array accounts for the buffer offset');