parent
61806a4e7f
commit
2d0968a70b
2 changed files with 58 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||||||
|
import operations from '../../operations'; |
||||||
|
|
||||||
|
const VALID_TOP_KEYS = ['keymaps']; |
||||||
|
const VALID_OPERATION_VALUES = Object.keys(operations).map((key) => { |
||||||
|
return operations[key]; |
||||||
|
}); |
||||||
|
|
||||||
|
const validateInvalidTopKeys = (settings) => { |
||||||
|
let invalidKey = Object.keys(settings).find((key) => { |
||||||
|
return !VALID_TOP_KEYS.includes(key); |
||||||
|
}); |
||||||
|
if (invalidKey) { |
||||||
|
throw Error(`Unknown key: "${invalidKey}"`); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
const validateKeymaps = (keymaps) => { |
||||||
|
for (let key of Object.keys(keymaps)) { |
||||||
|
let value = keymaps[key]; |
||||||
|
if (!VALID_OPERATION_VALUES.includes(value.type)) { |
||||||
|
throw Error(`Unknown operation: "${value.type}"`); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
const validate = (settings) => { |
||||||
|
validateInvalidTopKeys(settings); |
||||||
|
if (settings.keymaps) { |
||||||
|
validateKeymaps(settings.keymaps); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
export { validate }; |
@ -0,0 +1,25 @@ |
|||||||
|
import { expect } from "chai"; |
||||||
|
import { validate } from '../../../src/shared/validators/setting'; |
||||||
|
|
||||||
|
describe("setting validator", () => { |
||||||
|
describe("unknown top keys", () => { |
||||||
|
it('throws an error for unknown settings', () => { |
||||||
|
let settings = { keymaps: {}, poison: 123 }; |
||||||
|
let fn = validate.bind(undefined, settings) |
||||||
|
expect(fn).to.throw(Error, 'poison'); |
||||||
|
}) |
||||||
|
}); |
||||||
|
|
||||||
|
describe("keymaps settings", () => { |
||||||
|
it('throws an error for unknown operation', () => { |
||||||
|
let settings = { |
||||||
|
keymaps: { |
||||||
|
a: { 'type': 'scroll.home' }, |
||||||
|
b: { 'type': 'poison.dressing' }, |
||||||
|
} |
||||||
|
}; |
||||||
|
let fn = validate.bind(undefined, settings) |
||||||
|
expect(fn).to.throw(Error, 'poison.dressing'); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
Reference in new issue