mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
197 lines
5.2 KiB
JavaScript
197 lines
5.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const {utils: Cu} = Components;
|
|
|
|
const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
|
|
// Create profile directory before use.
|
|
// It can be no older than a day ago….
|
|
let profile_creation_lower = Date.now() - MILLISECONDS_PER_DAY;
|
|
do_get_profile();
|
|
|
|
Cu.import("resource://gre/modules/Promise.jsm");
|
|
Cu.import("resource://gre/modules/Metrics.jsm");
|
|
Cu.import("resource://gre/modules/services/healthreport/profile.jsm");
|
|
Cu.import("resource://gre/modules/Task.jsm");
|
|
|
|
|
|
function MockProfileMetadataProvider(name="MockProfileMetadataProvider") {
|
|
this.name = name;
|
|
ProfileMetadataProvider.call(this);
|
|
}
|
|
MockProfileMetadataProvider.prototype = {
|
|
__proto__: ProfileMetadataProvider.prototype,
|
|
|
|
getProfileCreationDays: function getProfileCreationDays() {
|
|
return Promise.resolve(1234);
|
|
},
|
|
};
|
|
|
|
|
|
function run_test() {
|
|
run_next_test();
|
|
}
|
|
|
|
/**
|
|
* Ensure that OS.File works in our environment.
|
|
* This test can go once there are xpcshell tests for OS.File.
|
|
*/
|
|
add_test(function use_os_file() {
|
|
Cu.import("resource://gre/modules/osfile.jsm")
|
|
|
|
// Ensure that we get constants, too.
|
|
do_check_neq(OS.Constants.Path.profileDir, null);
|
|
|
|
let iterator = new OS.File.DirectoryIterator(".");
|
|
iterator.forEach(function onEntry(entry) {
|
|
print("Got " + entry.path);
|
|
}).then(function onSuccess() {
|
|
iterator.close();
|
|
print("Done.");
|
|
run_next_test();
|
|
}, function onFail() {
|
|
iterator.close();
|
|
do_throw("Iterating over current directory failed.");
|
|
});
|
|
});
|
|
|
|
function getAccessor() {
|
|
let acc = new ProfileCreationTimeAccessor();
|
|
print("Profile is " + acc.profilePath);
|
|
return acc;
|
|
}
|
|
|
|
add_test(function test_time_accessor_no_file() {
|
|
let acc = getAccessor();
|
|
|
|
// There should be no file yet.
|
|
acc.readTimes()
|
|
.then(function onSuccess(json) {
|
|
do_throw("File existed!");
|
|
},
|
|
function onFailure() {
|
|
run_next_test();
|
|
});
|
|
});
|
|
|
|
add_task(function test_time_accessor_named_file() {
|
|
let acc = getAccessor();
|
|
|
|
// There should be no file yet.
|
|
yield acc.writeTimes({created: 12345}, "test.json");
|
|
let json = yield acc.readTimes("test.json")
|
|
print("Read: " + JSON.stringify(json));
|
|
do_check_eq(12345, json.created);
|
|
});
|
|
|
|
add_task(function test_time_accessor_creates_file() {
|
|
let lower = profile_creation_lower;
|
|
|
|
// Ensure that provided contents are merged, and existing
|
|
// files can be overwritten. These two things occur if we
|
|
// read and then decide that we have to write.
|
|
let acc = getAccessor();
|
|
let existing = {abc: "123", easy: "abc"};
|
|
let expected;
|
|
|
|
let created = yield acc.computeAndPersistTimes(existing, "test2.json")
|
|
let upper = Date.now() + 1000;
|
|
print(lower + " < " + created + " <= " + upper);
|
|
do_check_true(lower < created);
|
|
do_check_true(upper >= created);
|
|
expected = created;
|
|
|
|
let json = yield acc.readTimes("test2.json")
|
|
print("Read: " + JSON.stringify(json));
|
|
do_check_eq("123", json.abc);
|
|
do_check_eq("abc", json.easy);
|
|
do_check_eq(expected, json.created);
|
|
});
|
|
|
|
add_task(function test_time_accessor_all() {
|
|
let lower = profile_creation_lower;
|
|
let acc = getAccessor();
|
|
let expected;
|
|
let created = yield acc.created
|
|
let upper = Date.now() + 1000;
|
|
do_check_true(lower < created);
|
|
do_check_true(upper >= created);
|
|
expected = created;
|
|
|
|
let again = yield acc.created
|
|
do_check_eq(expected, again);
|
|
});
|
|
|
|
add_test(function test_constructor() {
|
|
let provider = new ProfileMetadataProvider("named");
|
|
run_next_test();
|
|
});
|
|
|
|
add_test(function test_profile_files() {
|
|
let provider = new ProfileMetadataProvider();
|
|
|
|
function onSuccess(answer) {
|
|
let now = Date.now() / MILLISECONDS_PER_DAY;
|
|
print("Got " + answer + ", versus now = " + now);
|
|
do_check_true(answer < now);
|
|
run_next_test();
|
|
}
|
|
|
|
function onFailure(ex) {
|
|
do_throw("Directory iteration failed: " + ex);
|
|
}
|
|
|
|
provider.getProfileCreationDays().then(onSuccess, onFailure);
|
|
});
|
|
|
|
// A generic test helper. We use this with both real
|
|
// and mock providers in these tests.
|
|
function test_collect_constant(provider) {
|
|
return Task.spawn(function () {
|
|
yield provider.collectConstantData();
|
|
|
|
let m = provider.getMeasurement("age", 1);
|
|
do_check_neq(m, null);
|
|
let values = yield m.getValues();
|
|
do_check_eq(values.singular.size, 1);
|
|
do_check_true(values.singular.has("profileCreation"));
|
|
|
|
throw new Task.Result(values.singular.get("profileCreation")[1]);
|
|
});
|
|
}
|
|
|
|
add_task(function test_collect_constant_mock() {
|
|
let storage = yield Metrics.Storage("collect_constant_mock");
|
|
let provider = new MockProfileMetadataProvider();
|
|
yield provider.init(storage);
|
|
|
|
let v = yield test_collect_constant(provider);
|
|
do_check_eq(v, 1234);
|
|
|
|
yield storage.close();
|
|
});
|
|
|
|
add_task(function test_collect_constant_real() {
|
|
let provider = new ProfileMetadataProvider();
|
|
let storage = yield Metrics.Storage("collect_constant_real");
|
|
yield provider.init(storage);
|
|
|
|
let v = yield test_collect_constant(provider);
|
|
|
|
let ms = v * MILLISECONDS_PER_DAY;
|
|
let lower = profile_creation_lower;
|
|
let upper = Date.now() + 1000;
|
|
print("Day: " + v);
|
|
print("msec: " + ms);
|
|
print("Lower: " + lower);
|
|
print("Upper: " + upper);
|
|
do_check_true(lower <= ms);
|
|
do_check_true(upper >= ms);
|
|
|
|
yield storage.close();
|
|
});
|
|
|