summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/xpcshell/test_ProfileAge.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_ProfileAge.js')
-rw-r--r--toolkit/modules/tests/xpcshell/test_ProfileAge.js120
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."
+ );
+ })
+);