it('should decorate actions for ctrl+', () => { assert.equal(act({ name: 'c', ctrl: true }), 'cancel'); assert.equal(act({ name: 'a', ctrl: true }), 'first'); assert.equal(act({ name: 'c', ctrl: true }), 'cancel'); assert.equal(act({ name: 'd', ctrl: true }), 'deleteForward'); assert.equal(act({ name: 'e', ctrl: true }), 'last'); assert.equal(act({ name: 'g', ctrl: true }), 'reset'); assert.equal(act({ name: 'r', ctrl: true }), 'remove'); assert.equal(act({ name: 's', ctrl: true }), 'save'); assert.equal(act({ name: 'u', ctrl: true }), 'undo'); });
it('should handle numbers', () => { assert.equal(keypress('0', { name: '0' }).name, 'number'); assert.equal(keypress('1', { name: '1' }).name, 'number'); assert.equal(keypress('2', { name: '2' }).name, 'number'); assert.equal(keypress('3', { name: '3' }).name, 'number'); assert.equal(keypress('4', { name: '4' }).name, 'number'); assert.equal(keypress('5', { name: '5' }).name, 'number'); assert.equal(keypress('6', { name: '6' }).name, 'number'); assert.equal(keypress('7', { name: '7' }).name, 'number'); assert.equal(keypress('8', { name: '8' }).name, 'number'); assert.equal(keypress('9', { name: '9' }).name, 'number'); });
describe('options.initial', () => { it('should use value defined on options.initial', () => { prompt = new Prompt({ message: 'Favorite color?', initial: 'blue', show: false }); prompt.once('run', () => prompt.submit()); return prompt.run() .then(value => { assert.equal(value, 'blue'); }); }); });
it('should support <first>', () => { let pos; prompt = new Prompt({ message: 'Favorite color?', show: false }); prompt.once('run', async() => { await prompt.keypress('a'); await prompt.keypress('b'); await prompt.keypress('c'); await prompt.keypress('a', { ctrl: true }); pos = prompt.state.cursor; await prompt.submit(); }); return prompt.run() .then(value => { assert.equal(pos, 0); }); });
describe('options.autofill', () => { it('should autofill answers', () => { enquirer = new Enquirer({ show: false, autofill: true }, { color: 'orange' }); return enquirer.prompt({ type: 'input', name: 'color', message: 'Favorite color?' }) .then(answers => { assert.equal(answers.color, 'orange'); }); }); });
it('should support default suggest function with choices as a function', () => { prompt = new Prompt({ message: 'Choose a file', choices() { return fs.readdirSync(__dirname); } }); prompt.once('run', async() => { await keypresses(prompt, prompt.choices[0].message); await prompt.submit(); }); return prompt.run() .then(answer => { assert.equal(answer, prompt.choices[0].message); }); });
it('should support a custom suggest function', () => { prompt = new Prompt({ message: 'Favorite flavor?', choices: fixtures.slice(), suggest(input, choices) { return choices.filter(choice => choice.message.includes(input)); } }); prompt.once('run', async() => { await prompt.keypress('b'); await prompt.keypress('e'); await prompt.keypress('r'); await prompt.keypress('r'); await prompt.keypress('y'); await prompt.submit(); }); return prompt.run() .then(answer => { assert.equal(answer, 'strawberry'); }); });
describe('options.result', () => { it('should support options.result', () => { prompt = new Prompt({ message: 'Favorite color?', show: false, initial: 'blue', result(value) { return value.toUpperCase(); } }); prompt.once('run', () => prompt.submit()); return prompt.run() .then(value => { assert.equal(value, 'BLUE'); }); }); });
describe('options.min', () => { it('should set prompt.min with options.min', () => { prompt = new Prompt({ message: 'prompt-number', initial: 15, min: 10 }); assert.equal(prompt.min, 10); prompt.once('run', () => prompt.submit()); return prompt.run() .then(answer => { assert.equal(answer, 15); }); }); });
it('should support <deleteForward>', () => { prompt = new Prompt({ message: 'Favorite color?', show: false }); prompt.once('run', async() => { await prompt.keypress('a'); await prompt.keypress('b'); await prompt.keypress('c'); await prompt.keypress(null, { name: 'left' }); await prompt.keypress(null, { name: 'delete', fn: true }); await prompt.submit(); }); return prompt.run() .then(value => { assert.equal(value, 'ab'); }); });
it('should decorate actions for shift+', () => { assert.equal(act({ name: 'down', shift: true }), 'shiftDown'); assert.equal(act({ name: 'left', shift: true }), 'shiftLeft'); assert.equal(act({ name: 'right', shift: true }), 'shiftRight'); assert.equal(act({ name: 'up', shift: true }), 'shiftUp'); assert.equal(act({ name: 'tab', shift: true }), 'prev'); });
it('should support <last>', () => { let pos; prompt = new Prompt({ message: 'Favorite color?', show: false }); prompt.once('run', async() => { await prompt.keypress('a'); await prompt.keypress('b'); await prompt.keypress('c'); await prompt.keypress(null, { name: 'left' }); await prompt.keypress(null, { name: 'left' }); await prompt.keypress(null, { name: 'left' }); await prompt.keypress('e', { ctrl: true }); pos = prompt.state.cursor; await prompt.submit(); }); return prompt.run() .then(value => { assert.equal(pos, 2); }); });
describe('options.max', () => { it('should set prompt.max with options.max', () => { prompt = new Prompt({ message: 'prompt-number', max: 10, initial: 5 }); assert.equal(prompt.max, 10); prompt.once('run', () => prompt.submit()); return prompt.run() .then(answer => { assert.equal(answer, 5); }); }); });
it('should decorate actions on keypress events', () => { assert.equal(act({ name: 'cancel' }), 'cancel'); assert.equal(act({ name: 'backspace' }), 'delete'); assert.equal(act({ name: 'down' }), 'down'); assert.equal(act({ name: 'enter' }), 'submit'); assert.equal(act({ name: 'escape' }), 'cancel'); assert.equal(act({ name: 'left' }), 'left'); assert.equal(act({ name: 'number' }), 'number'); assert.equal(act({ name: 'return' }), 'submit'); assert.equal(act({ name: 'right' }), 'right'); assert.equal(act({ name: 'tab' }), 'next'); assert.equal(act({ name: 'up' }), 'up'); });
it('should handle shift+number', () => { assert.equal(keypress('!', { name: '!', shift: true }).name, '!'); assert.equal(keypress('@', { name: '@', shift: true }).name, '@'); assert.equal(keypress('#', { name: '#', shift: true }).name, '#'); assert.equal(keypress('$', { name: '$', shift: true }).name, '$'); assert.equal(keypress('%', { name: '%', shift: true }).name, '%'); assert.equal(keypress('^', { name: '^', shift: true }).name, '^'); assert.equal(keypress('&', { name: '&', shift: true }).name, '&'); assert.equal(keypress('*', { name: '*', shift: true }).name, '*'); assert.equal(keypress('(', { name: '(', shift: true }).name, '('); assert.equal(keypress(')', { name: ')', shift: true }).name, ')'); });