147 lines
3.5 KiB
JavaScript
147 lines
3.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Test the suggestion-picker helper methods.
|
|
*/
|
|
|
|
const {
|
|
findMostRelevantIndex,
|
|
findMostRelevantCssPropertyIndex,
|
|
} = require("resource://devtools/client/shared/suggestion-picker.js");
|
|
|
|
/**
|
|
* Run all tests defined below.
|
|
*/
|
|
function run_test() {
|
|
ensureMostRelevantIndexProvidedByHelperFunction();
|
|
ensureMostRelevantIndexProvidedByClassMethod();
|
|
ensureErrorThrownWithInvalidArguments();
|
|
}
|
|
|
|
/**
|
|
* Generic test data.
|
|
*/
|
|
const TEST_DATA = [
|
|
{
|
|
// Match in sortedItems array.
|
|
items: ["chrome", "edge", "firefox"],
|
|
sortedItems: ["firefox", "chrome", "edge"],
|
|
expectedIndex: 2,
|
|
},
|
|
{
|
|
// No match in sortedItems array.
|
|
items: ["apple", "oranges", "banana"],
|
|
sortedItems: ["kiwi", "pear", "peach"],
|
|
expectedIndex: 0,
|
|
},
|
|
{
|
|
// Empty items array.
|
|
items: [],
|
|
sortedItems: ["empty", "arrays", "can't", "have", "relevant", "indexes"],
|
|
expectedIndex: -1,
|
|
},
|
|
];
|
|
|
|
function ensureMostRelevantIndexProvidedByHelperFunction() {
|
|
info("Running ensureMostRelevantIndexProvidedByHelperFunction()");
|
|
|
|
for (const testData of TEST_DATA) {
|
|
const { items, sortedItems, expectedIndex } = testData;
|
|
const mostRelevantIndex = findMostRelevantIndex(items, sortedItems);
|
|
strictEqual(mostRelevantIndex, expectedIndex);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* CSS properties test data.
|
|
*/
|
|
const CSS_TEST_DATA = [
|
|
{
|
|
items: [
|
|
"backface-visibility",
|
|
"background",
|
|
"background-attachment",
|
|
"background-blend-mode",
|
|
"background-clip",
|
|
"background-color",
|
|
"background-image",
|
|
"background-origin",
|
|
"background-position",
|
|
"background-repeat",
|
|
],
|
|
expectedIndex: 1,
|
|
},
|
|
{
|
|
items: [
|
|
"caption-side",
|
|
"clear",
|
|
"clip",
|
|
"clip-path",
|
|
"clip-rule",
|
|
"color",
|
|
"color-interpolation",
|
|
"color-interpolation-filters",
|
|
"content",
|
|
"counter-increment",
|
|
],
|
|
expectedIndex: 5,
|
|
},
|
|
{
|
|
items: ["direction", "display", "dominant-baseline"],
|
|
expectedIndex: 1,
|
|
},
|
|
{
|
|
items: [
|
|
"object-fit",
|
|
"object-position",
|
|
"offset-block-end",
|
|
"offset-block-start",
|
|
"offset-inline-end",
|
|
"offset-inline-start",
|
|
"opacity",
|
|
"order",
|
|
"orphans",
|
|
"outline",
|
|
],
|
|
expectedIndex: 6,
|
|
},
|
|
{
|
|
items: [
|
|
"white-space",
|
|
"widows",
|
|
"width",
|
|
"will-change",
|
|
"word-break",
|
|
"word-spacing",
|
|
"word-wrap",
|
|
"writing-mode",
|
|
],
|
|
expectedIndex: 2,
|
|
},
|
|
];
|
|
|
|
function ensureMostRelevantIndexProvidedByClassMethod() {
|
|
info("Running ensureMostRelevantIndexProvidedByClassMethod()");
|
|
|
|
for (const testData of CSS_TEST_DATA) {
|
|
const { items, expectedIndex } = testData;
|
|
const mostRelevantIndex = findMostRelevantCssPropertyIndex(items);
|
|
strictEqual(mostRelevantIndex, expectedIndex);
|
|
}
|
|
}
|
|
|
|
function ensureErrorThrownWithInvalidArguments() {
|
|
info("Running ensureErrorThrownWithInvalidTypeArgument()");
|
|
|
|
const expectedError = /Please provide valid items and sortedItems arrays\./;
|
|
// No arguments passed.
|
|
Assert.throws(() => findMostRelevantIndex(), expectedError);
|
|
// Invalid arguments passed.
|
|
Assert.throws(() => findMostRelevantIndex([]), expectedError);
|
|
Assert.throws(() => findMostRelevantIndex(null, []), expectedError);
|
|
Assert.throws(() => findMostRelevantIndex([], "string"), expectedError);
|
|
Assert.throws(() => findMostRelevantIndex("string", []), expectedError);
|
|
}
|