Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
"use strict";
// This is mostly taken from test_windows_onedrive_registry.js.
// Each "test suite" is a set of tests run on a specific registry
// configuration.
// NB: Backup only needs the location of the personal OneDrive folder. It
// does an existence check, so that folder must exist. We use PathUtils.tempDir
// for that.
const tempDirPath = PathUtils.tempDir;
const testSuites = [
{
registryMap: {
"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\Personal\\UserFolder":
tempDirPath,
},
personalFolder: tempDirPath,
businessFolders: [],
},
{
registryMap: {
"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\Business1\\UserFolder":
"Q:\\Me\\OneDrive - MyOrg",
},
personalFolder: null,
businessFolders: ["Q:\\Me\\OneDrive - MyOrg"],
},
{
registryMap: {
"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\Personal\\UserFolder":
tempDirPath,
"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\Business5\\UserFolder":
"Q:\\Me\\OneDrive - Org1",
"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\Business6\\UserFolder":
"Q:\\Me\\OneDrive - Org2",
"HKEY_CURRENT_USER\\Software\\Microsoft\\OneDrive\\Accounts\\Business10\\UserFolder":
"Q:\\Me\\OneDrive - Org2(2)",
},
personalFolder: tempDirPath,
businessFolders: [
"Q:\\Me\\OneDrive - Org1",
"Q:\\Me\\OneDrive - Org2",
"Q:\\Me\\OneDrive - Org2(2)",
],
},
];
// value of registryMap from currently-running test suite
let currentRegistryContents;
// The registry won't be opened for more than one key at a time.
let currentRegistryPath;
// Un-mock the registry. We need to do this before test end (i.e.
// registerCleanupFunction) because cleanup involves the registry.
let do_cleanup;
let mockRegistry = {
open: (root, path, mode) => {
Assert.equal(
root,
Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER,
"reg key is in HKEY_CURRENT_USER"
);
let isPersonal = path.match(
/Software\\Microsoft\\OneDrive\\Accounts\\Personal/
);
let isBusiness = path.match(
/Software\\Microsoft\\OneDrive\\Accounts\\Business(\d+)/
);
Assert.ok(isPersonal || isBusiness, "opening correct root path");
Assert.equal(mode, Ci.nsIWindowsRegKey.ACCESS_READ, "mode was ACCESS_READ");
currentRegistryPath = "HKEY_CURRENT_USER\\" + path;
},
hasValue: value => {
Assert.equal(value, "UserFolder", "value is UserFolder");
return currentRegistryPath + "\\" + value in currentRegistryContents;
},
readStringValue: value => {
if (!(currentRegistryPath + "\\" + value in currentRegistryContents)) {
// This should never happen.
Assert.ok(
false,
`${currentRegistryPath + "\\" + value} not found in registry`
);
throw new Error("read nonexistent value");
}
return currentRegistryContents[currentRegistryPath + "\\" + value];
},
setRegistryContents: newRegistryMap => {
info(`setting new registry map: ${JSON.stringify(newRegistryMap)}`);
currentRegistryContents = newRegistryMap;
},
QueryInterface: ChromeUtils.generateQI(["nsIWindowsRegKey"]),
};
function setupMockRegistryComponent() {
const { MockRegistrar } = ChromeUtils.importESModule(
);
let cid = MockRegistrar.registerEx(
"@mozilla.org/windows-registry-key;1",
{ shouldCreateInstance: false },
mockRegistry
);
do_cleanup = () => {
MockRegistrar.unregister(cid);
};
}
add_task(async function runTests() {
setupMockRegistryComponent();
const docsFolder = Services.dirsvc.get("Docs", Ci.nsIFile).path;
for (let test of testSuites) {
mockRegistry.setRegistryContents(test.registryMap);
let personalFolder = BackupService.oneDriveFolderPath;
Assert.equal(
personalFolder?.path || null,
test.personalFolder,
"got correct personal OneDrive root"
);
Assert.equal(
BackupService.DEFAULT_PARENT_DIR_PATH,
test.personalFolder ? test.personalFolder : docsFolder,
"BackupService.DEFAULT_PARENT_DIR_PATH reflects correct folder"
);
}
do_cleanup();
});