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.js134
1 files changed, 134 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..e79007759e
--- /dev/null
+++ b/toolkit/modules/tests/xpcshell/test_ProfileAge.js
@@ -0,0 +1,134 @@
+const { ProfileAge } = ChromeUtils.import(
+ "resource://gre/modules/ProfileAge.jsm"
+);
+const { OS } = ChromeUtils.import("resource://gre/modules/osfile.jsm");
+const { CommonUtils } = ChromeUtils.import(
+ "resource://services-common/utils.js"
+);
+
+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 = OS.Path.join(gProfD.path, "" + ID++);
+ await OS.File.makeDir(profile);
+ await task(profile);
+ await OS.File.removeDir(profile);
+ };
+}
+
+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 CommonUtils.writeJSON(
+ {
+ created: CREATED_TIME,
+ },
+ OS.Path.join(profile, "times.json")
+ );
+
+ 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 CommonUtils.readJSON(
+ OS.Path.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 CommonUtils.readJSON(
+ OS.Path.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 CommonUtils.writeJSON(
+ {
+ created: CREATED_TIME,
+ firstUse: null,
+ },
+ OS.Path.join(profile, "times.json")
+ );
+
+ let times = await ProfileAge(profile);
+ Assert.ok(
+ (await times.firstUse) <= Date.now(),
+ "Should have initialised a first use time."
+ );
+ })
+);