Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
const { sinon } = ChromeUtils.importESModule(
);
const { TestUtils } = ChromeUtils.importESModule(
);
const execProcess = sinon.fake();
const sendCommandLine = sinon.fake.throws(Cr.NS_ERROR_NOT_AVAILABLE);
add_setup(async () => {
await initSelectableProfileService();
sinon.replace(
getSelectableProfileService(),
"sendCommandLine",
(path, args, raise) => sendCommandLine(path, [...args], raise)
);
sinon.replace(getSelectableProfileService(), "execProcess", execProcess);
});
add_task(async function test_delete_last_profile() {
const SelectableProfileService = getSelectableProfileService();
let profiles = await SelectableProfileService.getAllProfiles();
Assert.equal(profiles.length, 1, "Only 1 profile exists before deleting");
let profile = profiles[0];
Assert.equal(
SelectableProfileService.groupToolkitProfile.rootDir.path,
profile.path,
"The group toolkit profile path should be the path of the original profile"
);
await SelectableProfileService.setShowProfileSelectorWindow(true);
Assert.ok(
SelectableProfileService.groupToolkitProfile.showProfileSelector,
"Show profile selector is enabled"
);
let updated = updateNotified();
await SelectableProfileService.deleteCurrentProfile();
await updated;
profiles = await SelectableProfileService.getAllProfiles();
Assert.equal(profiles.length, 1, "Only 1 profile exists after deleting");
profile = profiles[0];
let expected = ["-url", "about:newprofile"];
await TestUtils.waitForCondition(
() => sendCommandLine.callCount > 1,
"Waiting for notify task to complete"
);
Assert.equal(
sendCommandLine.callCount,
2,
"Should have attempted to remote twice"
);
let [openCall, updateCall] = sendCommandLine.getCalls();
// These can come in any order so switch them if needed.
if (openCall.args[1].length == 1) {
[updateCall, openCall] = [openCall, updateCall];
}
Assert.deepEqual(
openCall.args,
[profile.path, expected, true],
"Expected sendCommandLine arguments to open new profile"
);
Assert.deepEqual(
updateCall.args,
[profile.path, ["--profiles-updated"], false],
"Expected sendCommandLine arguments to update other profiles"
);
expected.unshift("--profile", profile.path);
if (Services.appinfo.OS === "Darwin") {
expected.unshift("-foreground");
}
// Our mock remote service claims the instance is not running so we will fall back to launching
// a new process.
Assert.equal(execProcess.callCount, 1, "Should have called execProcess once");
Assert.deepEqual(
execProcess.firstCall.args,
[expected],
"Expected execProcess arguments"
);
Assert.equal(
SelectableProfileService.groupToolkitProfile.rootDir.path,
profile.path,
"The group toolkit profile path should be the path of the newly created profile"
);
Assert.ok(
!SelectableProfileService.groupToolkitProfile.showProfileSelector,
"Show profile selector is disabled"
);
});