importScripts('/resources/testharness.js');
importScripts('resources/sandboxed-fs-test-helpers.js');
importScripts('resources/test-helpers.js');
importScripts('resources/collecting-file-system-observer.js');
'use strict';
directory_test(async (t, root_dir) => {
const file = await root_dir.getFileHandle(getUniqueName(), {create: true});
const observer = new CollectingFileSystemObserver(t, root_dir);
await observer.observe([file]);
// Write to `file` through a `FileSystemSyncAccessHandle`.
const syncHandle = await createSAHWithCleanup(t, file);
const writeBuffer = new TextEncoder().encode('contents');
syncHandle.write(writeBuffer);
syncHandle.close();
// Expect one "modified" event to happen on `file`.
const records = await observer.getRecords();
await assert_records_equal(file, records, [modifiedEvent(file, [])]);
}, 'FileSystemSyncAccessHandle.write produces a "modified" event');
directory_test(async (t, root_dir) => {
const file = await root_dir.getFileHandle(getUniqueName(), {create: true});
const observer = new CollectingFileSystemObserver(t, root_dir);
await observer.observe([file]);
// Write to `file` through a `FileSystemSyncAccessHandle` multiple times.
const syncHandle = await createSAHWithCleanup(t, file);
const writeBuffer = new TextEncoder().encode('contents');
const numberOfWrites = 3;
const expectedEvents = [];
for (let i = 0; i < numberOfWrites; i++) {
expectedEvents.push(modifiedEvent(file, []));
syncHandle.write(writeBuffer);
}
syncHandle.close();
// Expect the same number of "modified" event to happen on `file` as there
// were writes to it.
const records = await observer.getRecords();
await assert_records_equal(file, records, expectedEvents);
}, 'Multiple FileSystemSyncAccessHandle.writes produces the same amount of "modified" event');
directory_test(async (t, root_dir) => {
const file = await root_dir.getFileHandle(getUniqueName(), {create: true});
const observer = new CollectingFileSystemObserver(t, root_dir);
await observer.observe([file]);
// Truncate to `file` through a `FileSystemSyncAccessHandle`.
const syncHandle = await createSAHWithCleanup(t, file);
syncHandle.truncate(1);
syncHandle.close();
// Expect one "modified" event to happen on `file`.
const records = await observer.getRecords();
await assert_records_equal(file, records, [modifiedEvent(file, [])]);
}, 'FileSystemSyncAccessHandle.truncate produces a "modified" event');
directory_test(async (t, root_dir) => {
const file = await root_dir.getFileHandle(getUniqueName(), {create: true});
const observer = new CollectingFileSystemObserver(t, root_dir);
await observer.observe([file]);
// Write to `file`.
const syncHandle = await createSAHWithCleanup(t, file);
const readBuffer = new Uint8Array(24);
syncHandle.read(readBuffer);
syncHandle.flush();
syncHandle.getSize();
syncHandle.close();
// Expect no events to happen.
const records = await observer.getRecords();
await assert_records_equal(file, records, []);
}, 'FileSystemSyncAccessHandle methods that don\'t modify the file don\'t produce events');
done();