search engine validation
This commit is contained in:
parent
27aa739caf
commit
c382715405
2 changed files with 85 additions and 0 deletions
|
@ -23,11 +23,39 @@ const validateKeymaps = (keymaps) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const validateSearch = (search) => {
|
||||||
|
let engines = search.engines;
|
||||||
|
for (let key of Object.keys(engines)) {
|
||||||
|
if (/\s/.test(key)) {
|
||||||
|
throw new Error(
|
||||||
|
`While space in search engine name is not allowed: "${key}"`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
let url = engines[key];
|
||||||
|
if (!url.match(/{}/)) {
|
||||||
|
throw new Error(`No {}-placeholders in URL of "${key}"`);
|
||||||
|
}
|
||||||
|
if (url.match(/{}/g).length > 1) {
|
||||||
|
throw new Error(`Multiple {}-placeholders in URL of "${key}"`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!search.default) {
|
||||||
|
throw new Error(`Default engine is not set`);
|
||||||
|
}
|
||||||
|
if (!Object.keys(engines).includes(search.default)) {
|
||||||
|
throw new Error(`Default engine "${search.default}" not found`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const validate = (settings) => {
|
const validate = (settings) => {
|
||||||
validateInvalidTopKeys(settings);
|
validateInvalidTopKeys(settings);
|
||||||
if (settings.keymaps) {
|
if (settings.keymaps) {
|
||||||
validateKeymaps(settings.keymaps);
|
validateKeymaps(settings.keymaps);
|
||||||
}
|
}
|
||||||
|
if (settings.search) {
|
||||||
|
validateSearch(settings.search);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export { validate };
|
export { validate };
|
||||||
|
|
|
@ -22,4 +22,61 @@ describe("setting validator", () => {
|
||||||
expect(fn).to.throw(Error, 'poison.dressing');
|
expect(fn).to.throw(Error, 'poison.dressing');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("search settings", () => {
|
||||||
|
it('throws an error for invalid search engine name', () => {
|
||||||
|
let settings = {
|
||||||
|
search: {
|
||||||
|
default: 'google',
|
||||||
|
engines: {
|
||||||
|
'google': 'https://google.com/search?q={}',
|
||||||
|
'cherry pie': 'https://cherypie.com/search?q={}',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let fn = validate.bind(undefined, settings)
|
||||||
|
expect(fn).to.throw(Error, 'cherry pie');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error for no {}-placeholder', () => {
|
||||||
|
let settings = {
|
||||||
|
search: {
|
||||||
|
default: 'google',
|
||||||
|
engines: {
|
||||||
|
'google': 'https://google.com/search?q={}',
|
||||||
|
'yahoo': 'https://search.yahoo.com/search',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let fn = validate.bind(undefined, settings)
|
||||||
|
expect(fn).to.throw(Error, 'yahoo');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error for no default engines', () => {
|
||||||
|
let settings = {
|
||||||
|
search: {
|
||||||
|
engines: {
|
||||||
|
'google': 'https://google.com/search?q={}',
|
||||||
|
'yahoo': 'https://search.yahoo.com/search?q={}',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let fn = validate.bind(undefined, settings)
|
||||||
|
expect(fn).to.throw(Error, 'Default engine');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws an error for invalid default engine', () => {
|
||||||
|
let settings = {
|
||||||
|
search: {
|
||||||
|
default: 'twitter',
|
||||||
|
engines: {
|
||||||
|
'google': 'https://google.com/search?q={}',
|
||||||
|
'yahoo': 'https://search.yahoo.com/search?q={}',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let fn = validate.bind(undefined, settings)
|
||||||
|
expect(fn).to.throw(Error, 'twitter');
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Reference in a new issue