Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'android'
- Manifest: toolkit/components/search/tests/xpcshell/xpcshell.toml
/* Any copyright is dedicated to the Public Domain.
// Ensure all the engines defined in the configuration are valid by
// creating a refined configuration that includes all the engines
// with all the variants and subvariants enabled everywhere.
"use strict";
const IDS = new Set();
function uniqueId(id) {
while (IDS.has(id)) {
id += "_";
}
IDS.add(id);
return id;
}
/**
* For each subVariant, yields an array containing only that subVariant
* but with environment set to allRegionsAndLocales and optional to undefined.
* If subVariants is undefined, yields undefined once.
*
* @param {Array|undefined} subVariants
* The original subVariants array.
* @yields {Array|undefined}
* An array containing only one subVariant.
*/
function* generateSubvariants(subVariants) {
if (!subVariants) {
yield undefined;
return;
}
for (let subVariant of subVariants) {
yield [
{
...subVariant,
optional: undefined,
environment: { allRegionsAndLocales: true },
},
];
}
}
/**
* For each variant and subVariant, yields an array containing only that variant
* and subVariant but with environment set to allRegionsAndLocales and optional
* to undefined in both the variant and subvariant.
*
* @param {Array|undefined} variants
* The original variants array.
* @yields {Array|undefined}
* An array containing only one variant.
*/
function* generateVariants(variants) {
for (let variant of variants) {
for (let subVariants of generateSubvariants(variant.subVariants)) {
yield [
{
...variant,
optional: undefined,
environment: { allRegionsAndLocales: true },
subVariants,
},
];
}
}
}
/**
* For each variant and subVariant of a given engine, yields an engine with
* only that Variant and subVariant but enabled everywhere. Also makes sure
* no identifiers and names of yielded engines are duplicated and works when
* there are no variants or subVariants.
*
* @param {object} engine
* The engine with (potentially) multiple variants.
* @yields {object}
* The same engine but with a single variant that is enabled everywhere.
*/
function* generateEngineVariants(engine) {
for (let variants of generateVariants(engine.variants)) {
let id = uniqueId(engine.identifier);
yield {
...engine,
base: {
...engine.base,
// Reuse identifier as name to avoid duplicated names.
name: id,
},
identifier: id,
variants,
};
}
}
add_task(async function test_validate_all_engines_and_variants() {
let settings = RemoteSettings(SearchUtils.SETTINGS_KEY);
let config = await settings.get();
config = config.flatMap(obj => {
if (obj.recordType == "engine") {
return [...generateEngineVariants(obj)];
}
return obj;
});
sinon.stub(settings, "get").returns(config);
await Services.search.init();
for (let id of IDS) {
Assert.ok(
!!Services.search.getEngineById(id),
`Engine with id '${id}' was found.`
);
}
});