diff options
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_ProfileAge.js')
-rw-r--r-- | toolkit/modules/tests/xpcshell/test_ProfileAge.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_ProfileAge.js b/toolkit/modules/tests/xpcshell/test_ProfileAge.js new file mode 100644 index 0000000000..9a659a5894 --- /dev/null +++ b/toolkit/modules/tests/xpcshell/test_ProfileAge.js @@ -0,0 +1,120 @@ +const { ProfileAge } = ChromeUtils.importESModule( + "resource://gre/modules/ProfileAge.sys.mjs" +); + +const gProfD = do_get_profile(); +let ID = 0; + +// Creates a unique profile directory to use for a test. +function withDummyProfile(task) { + return async () => { + let profile = PathUtils.join(gProfD.path, "" + ID++); + await IOUtils.makeDirectory(profile); + await task(profile); + await IOUtils.remove(profile, { recursive: true }); + }; +} + +add_task( + withDummyProfile(async profile => { + let times = await ProfileAge(profile); + Assert.ok( + (await times.created) > 0, + "We can't really say what this will be, just assume if it is a number it's ok." + ); + Assert.equal( + await times.reset, + undefined, + "Reset time is undefined in a new profile" + ); + Assert.ok( + (await times.firstUse) <= Date.now(), + "Should have initialised a first use time." + ); + }) +); + +add_task( + withDummyProfile(async profile => { + const CREATED_TIME = Date.now() - 2000; + const RESET_TIME = Date.now() - 1000; + + await IOUtils.writeJSON(PathUtils.join(profile, "times.json"), { + created: CREATED_TIME, + }); + + let times = await ProfileAge(profile); + Assert.equal( + await times.created, + CREATED_TIME, + "Should have seen the right profile time." + ); + Assert.equal( + await times.firstUse, + undefined, + "Should be no first use time." + ); + + let times2 = await ProfileAge(profile); + Assert.equal(times, times2, "Should have got the same instance."); + + let promise = times.recordProfileReset(RESET_TIME); + Assert.equal( + await times2.reset, + RESET_TIME, + "Should have seen the right reset time in the second instance immediately." + ); + await promise; + + let results = await IOUtils.readJSON(PathUtils.join(profile, "times.json")); + Assert.deepEqual( + results, + { + created: CREATED_TIME, + reset: RESET_TIME, + }, + "Should have seen the right results." + ); + }) +); + +add_task( + withDummyProfile(async profile => { + const RESET_TIME = Date.now() - 1000; + const RESET_TIME2 = Date.now() - 2000; + + // The last call to recordProfileReset should always win. + let times = await ProfileAge(profile); + await Promise.all([ + times.recordProfileReset(RESET_TIME), + times.recordProfileReset(RESET_TIME2), + ]); + + let results = await IOUtils.readJSON(PathUtils.join(profile, "times.json")); + delete results.firstUse; + Assert.deepEqual( + results, + { + reset: RESET_TIME2, + }, + "Should have seen the right results." + ); + }) +); + +add_task( + withDummyProfile(async profile => { + const CREATED_TIME = Date.now() - 1000; + + await IOUtils.writeJSON(PathUtils.join(profile, "times.json"), { + created: CREATED_TIME, + firstUse: null, + }); + + let times = await ProfileAge(profile); + Assert.ok( + (await times.firstUse) <= Date.now(), + "Should have initialised a first use time." + ); + }) +); |