69 lines
2.7 KiB
JavaScript
69 lines
2.7 KiB
JavaScript
importScripts('/resources/testharness.js');
|
|
importScripts('resources/sandboxed-fs-test-helpers.js');
|
|
importScripts('resources/test-helpers.js');
|
|
|
|
'use strict';
|
|
|
|
// Adds tests for expected behaviors of a writable stream created in `wfsMode`
|
|
// mode.
|
|
function lockPropertyTests(wfsMode, expectedLockAccess) {
|
|
const createWFSLock = createWFSWithCleanupFactory({mode: wfsMode});
|
|
|
|
directory_test(async (t, rootDir) => {
|
|
const [fileHandle] = await createFileHandles(rootDir, 'BFS.test');
|
|
|
|
const {mode} = await createWFSLock(t, fileHandle);
|
|
assert_equals(mode, wfsMode);
|
|
}, `A writable stream in ${wfsMode} mode has a mode property equal to` +
|
|
` ${wfsMode}`);
|
|
|
|
directory_test(async (t, rootDir) => {
|
|
const [fileHandle] = await createFileHandles(rootDir, 'BFS.test');
|
|
assert_equals(
|
|
await testLockAccess(t, fileHandle, createWFSLock), expectedLockAccess);
|
|
}, `A writable stream in ${wfsMode} mode takes a lock that is` +
|
|
` ${expectedLockAccess}`);
|
|
|
|
// Test interaction with other writable stream modes.
|
|
for (const mode of WFS_MODES) {
|
|
// Add tests depending on which writable stream modes are being tested
|
|
// against each other.
|
|
const testingAgainstSelf = mode === wfsMode;
|
|
const testingExclusiveLock = expectedLockAccess === 'exclusive';
|
|
const tests = {
|
|
diffFile: `When there's an open writable stream in ${wfsMode} mode on a` +
|
|
` file, can open another writable stream in ${mode} on a different` +
|
|
` file`,
|
|
};
|
|
if (!testingAgainstSelf || testingExclusiveLock) {
|
|
tests.sameFile = `When there's an open writable stream in ${wfsMode}` +
|
|
` mode on a file, cannot open another writable stream in ${mode} on` +
|
|
` that same file`;
|
|
}
|
|
if (testingExclusiveLock) {
|
|
tests.acquireAfterRelease = `After a writable stream in ${wfsMode} mode` +
|
|
` on a file has been closed, can open another writable stream in` +
|
|
` ${mode} on the same file`;
|
|
}
|
|
if (!testingExclusiveLock && !testingAgainstSelf) {
|
|
tests.multiAcquireAfterRelease = `After all writable streams in` +
|
|
` ${wfsMode} mode on a file has been closed, can open another` +
|
|
` writable stream in ${mode} on the same file`;
|
|
}
|
|
|
|
generateCrossLockTests(
|
|
createWFSLock, createWFSWithCleanupFactory({mode: mode}), tests);
|
|
}
|
|
}
|
|
|
|
directory_test(async (t, rootDir) => {
|
|
const [fileHandle] = await createFileHandles(rootDir, 'BFS.test');
|
|
|
|
const syncHandle = await createWFSWithCleanup(t, fileHandle);
|
|
assert_equals(syncHandle.mode, 'siloed');
|
|
}, 'A writable stream opens in siloed mode by default');
|
|
|
|
lockPropertyTests('siloed', LOCK_ACCESS.SHARED);
|
|
lockPropertyTests('exclusive', LOCK_ACCESS.EXCLUSIVE);
|
|
|
|
done();
|