Source code

Revision control

Copy as Markdown

Other Tools

/**
* Common infrastructure for manifest tests.
**/
"use strict";
const { ManifestProcessor } = SpecialPowers.ChromeUtils.importESModule(
"resource://gre/modules/ManifestProcessor.sys.mjs"
);
const processor = ManifestProcessor;
const manifestURL = new URL(document.location.origin + "/manifest.json");
const docURL = document.location;
const seperators =
"\u2028\u2029\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000";
const lineTerminators = "\u000D\u000A\u2028\u2029";
const whiteSpace = `${seperators}${lineTerminators}`;
const typeTests = [1, null, {}, [], false];
const data = {
jsonText: "{}",
manifestURL,
docURL,
};
const validThemeColors = [
["maroon", "#800000ff"],
["#f00", "#ff0000ff"],
["#ff0000", "#ff0000ff"],
["rgb(255,0,0)", "#ff0000ff"],
["rgb(255,0,0,1)", "#ff0000ff"],
["rgb(255,0,0,1.0)", "#ff0000ff"],
["rgb(255,0,0,100%)", "#ff0000ff"],
["rgb(255 0 0)", "#ff0000ff"],
["rgb(255 0 0 / 1)", "#ff0000ff"],
["rgb(255 0 0 / 1.0)", "#ff0000ff"],
["rgb(255 0 0 / 100%)", "#ff0000ff"],
["rgb(100%, 0%, 0%)", "#ff0000ff"],
["rgb(100%, 0%, 0%, 1)", "#ff0000ff"],
["rgb(100%, 0%, 0%, 1.0)", "#ff0000ff"],
["rgb(100%, 0%, 0%, 100%)", "#ff0000ff"],
["rgb(100% 0% 0%)", "#ff0000ff"],
["rgb(100% 0% 0% / 1)", "#ff0000ff"],
["rgb(100%, 0%, 0%, 1.0)", "#ff0000ff"],
["rgb(100%, 0%, 0%, 100%)", "#ff0000ff"],
["rgb(300,0,0)", "#ff0000ff"],
["rgb(300 0 0)", "#ff0000ff"],
["rgb(255,-10,0)", "#ff0000ff"],
["rgb(110%, 0%, 0%)", "#ff0000ff"],
["rgba(255,0,0)", "#ff0000ff"],
["rgba(255,0,0,1)", "#ff0000ff"],
["rgba(255 0 0 / 1)", "#ff0000ff"],
["rgba(100%,0%,0%,1)", "#ff0000ff"],
["rgba(0,0,255,0.5)", "#0000ff80"],
["rgba(100%, 50%, 0%, 0.1)", "#ff80001a"],
["hsl(120, 100%, 50%)", "#00ff00ff"],
["hsl(120 100% 50%)", "#00ff00ff"],
["hsl(120, 100%, 50%, 1.0)", "#00ff00ff"],
["hsl(120 100% 50% / 1.0)", "#00ff00ff"],
["hsla(120, 100%, 50%)", "#00ff00ff"],
["hsla(120 100% 50%)", "#00ff00ff"],
["hsla(120, 100%, 50%, 1.0)", "#00ff00ff"],
["hsla(120 100% 50% / 1.0)", "#00ff00ff"],
["hsl(120deg, 100%, 50%)", "#00ff00ff"],
["hsl(133.33333333grad, 100%, 50%)", "#00ff00ff"],
["hsl(2.0943951024rad, 100%, 50%)", "#00ff00ff"],
["hsl(0.3333333333turn, 100%, 50%)", "#00ff00ff"],
];
function setupManifest(key, value) {
const manifest = {};
manifest[key] = value;
data.jsonText = JSON.stringify(manifest);
}
function testValidColors(key) {
validThemeColors.forEach(item => {
const [manifest_color, parsed_color] = item;
setupManifest(key, manifest_color);
const result = processor.process(data);
is(
result[key],
parsed_color,
`Expect ${key} to be returned for ${manifest_color}`
);
});
// Trim tests
validThemeColors.forEach(item => {
const [manifest_color, parsed_color] = item;
const expandedThemeColor = `${seperators}${lineTerminators}${manifest_color}${lineTerminators}${seperators}`;
setupManifest(key, expandedThemeColor);
const result = processor.process(data);
is(
result[key],
parsed_color,
`Expect trimmed ${key} to be returned for ${manifest_color}`
);
});
}
const invalidThemeColors = [
"marooon",
"f000000",
"#ff00000",
"rgb(100, 0%, 0%)",
"rgb(255,0)",
"rbg(255,-10,0)",
"rgb(110, 0%, 0%)",
"(255,0,0) }",
"rgba(255)",
" rgb(100%,0%,0%) }",
"hsl(120, 100%, 50)",
"hsl(120, 100%, 50.0)",
"hsl 120, 100%, 50%",
"hsla{120, 100%, 50%, 1}",
];
function testInvalidColors(key) {
typeTests.forEach(type => {
setupManifest(key, type);
const result = processor.process(data);
is(
result[key],
undefined,
`Expect non-string ${key} to be undefined: ${typeof type}.`
);
});
invalidThemeColors.forEach(manifest_color => {
setupManifest(key, manifest_color);
const result = processor.process(data);
is(
result[key],
undefined,
`Expect ${key} to be undefined: ${manifest_color}.`
);
});
}