diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /toolkit/components/osfile/tests/xpcshell/test_unique.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/osfile/tests/xpcshell/test_unique.js')
-rw-r--r-- | toolkit/components/osfile/tests/xpcshell/test_unique.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/toolkit/components/osfile/tests/xpcshell/test_unique.js b/toolkit/components/osfile/tests/xpcshell/test_unique.js new file mode 100644 index 0000000000..740d84a2d6 --- /dev/null +++ b/toolkit/components/osfile/tests/xpcshell/test_unique.js @@ -0,0 +1,87 @@ +"use strict"; + +const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm"); + +function run_test() { + do_get_profile(); + run_next_test(); +} + +function testFiles(filename) { + return (async function() { + const MAX_TRIES = 10; + let profileDir = OS.Constants.Path.profileDir; + let path = OS.Path.join(profileDir, filename); + + // Ensure that openUnique() uses the file name if there is no file with that name already. + let openedFile = await OS.File.openUnique(path); + info("\nCreate new file: " + openedFile.path); + await openedFile.file.close(); + let exists = await OS.File.exists(openedFile.path); + Assert.ok(exists); + Assert.equal(path, openedFile.path); + let fileInfo = await OS.File.stat(openedFile.path); + Assert.ok(fileInfo.size == 0); + + // Ensure that openUnique() creates a new file name using a HEX number, as the original name is already taken. + openedFile = await OS.File.openUnique(path); + info("\nCreate unique HEX file: " + openedFile.path); + await openedFile.file.close(); + exists = await OS.File.exists(openedFile.path); + Assert.ok(exists); + fileInfo = await OS.File.stat(openedFile.path); + Assert.ok(fileInfo.size == 0); + + // Ensure that openUnique() generates different file names each time, using the HEX number algorithm + let filenames = new Set(); + for (let i = 0; i < MAX_TRIES; i++) { + openedFile = await OS.File.openUnique(path); + await openedFile.file.close(); + filenames.add(openedFile.path); + } + + Assert.equal(filenames.size, MAX_TRIES); + + // Ensure that openUnique() creates a new human readable file name using, as the original name is already taken. + openedFile = await OS.File.openUnique(path, { humanReadable: true }); + info("\nCreate unique Human Readable file: " + openedFile.path); + await openedFile.file.close(); + exists = await OS.File.exists(openedFile.path); + Assert.ok(exists); + fileInfo = await OS.File.stat(openedFile.path); + Assert.ok(fileInfo.size == 0); + + // Ensure that openUnique() generates different human readable file names each time + filenames = new Set(); + for (let i = 0; i < MAX_TRIES; i++) { + openedFile = await OS.File.openUnique(path, { humanReadable: true }); + await openedFile.file.close(); + filenames.add(openedFile.path); + } + + Assert.equal(filenames.size, MAX_TRIES); + + let exn; + try { + for (let i = 0; i < 100; i++) { + openedFile = await OS.File.openUnique(path, { humanReadable: true }); + await openedFile.file.close(); + } + } catch (ex) { + exn = ex; + } + + info("Ensure that this raises the correct error"); + Assert.ok(!!exn); + Assert.ok(exn instanceof OS.File.Error); + Assert.ok(exn.becauseExists); + })(); +} + +add_task(async function test_unique() { + OS.Shared.DEBUG = true; + // Tests files with extension + await testFiles("dummy_unique_file.txt"); + // Tests files with no extension + await testFiles("dummy_unique_file_no_ext"); +}); |