| 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(); |