importScripts("/resources/testharness.js"); importScripts('resources/sync-access-handle-test.js'); 'use strict'; sync_access_handle_test((t, handle) => { // Without this assertion, the test passes even if truncate is not defined. assert_implements(handle.truncate, "SyncAccessHandle.truncate is not implemented."); handle.truncate(4); assert_equals(handle.getSize(), 4); handle.truncate(2); assert_equals(handle.getSize(), 2); handle.truncate(7); assert_equals(handle.getSize(), 7); handle.truncate(0); assert_equals(handle.getSize(), 0); assert_throws_js(TypeError, () => handle.truncate(-4)); }, 'test SyncAccessHandle.truncate with different sizes'); sync_access_handle_test((t, handle) => { const writeBuffer = new Uint8Array(4); writeBuffer.set([96, 97, 98, 99]); handle.write(writeBuffer, {at: 0}); handle.truncate(2); let readBuffer = new Uint8Array(6); assert_equals(2, handle.read(readBuffer, {at: 0})); let expected = new Uint8Array(6); expected.set([96, 97, 0, 0, 0, 0]); assert_array_equals(expected, readBuffer); // Resize the file to 6, expect that everything beyond the old size is '0'. handle.truncate(6); assert_equals(6, handle.read(readBuffer, {at: 0})); assert_array_equals(expected, readBuffer); }, 'test SyncAccessHandle.truncate after SyncAccessHandle.write'); sync_access_handle_test((t, handle) => { const writeBuffer = new Uint8Array(4); writeBuffer.set([96, 97, 98, 99]); handle.write(writeBuffer, {at: 0}); // Moves cursor to 2 handle.truncate(2); let readBuffer = new Uint8Array(256); assert_equals(handle.read(readBuffer), 0); writeBuffer.set([100, 101, 102, 103]); handle.write(writeBuffer); assert_equals(handle.read(readBuffer, {at: 0}), 6); let expected = new Uint8Array(256); expected.set([96, 97, 100, 101, 102, 103]); assert_array_equals(readBuffer, expected); // Resize the file to 10, expect that everything beyond the old size is '0'. handle.truncate(10); // file cursor should still be at 6 // overwrite two bytes const writeBuffer2 = new Uint8Array(2); writeBuffer2.set([110, 111]); handle.write(writeBuffer2); expected = new Uint8Array(256); expected.set([96, 97, 100, 101, 102, 103, 110, 111, 0, 0]); assert_equals(handle.read(readBuffer, {at: 0}), 10); assert_array_equals(readBuffer, expected); }, 'Test truncate effect on cursor'); done();