spec/unit/reader/key_event_spec.rb in tty-prompt-0.10.1 vs spec/unit/reader/key_event_spec.rb in tty-prompt-0.11.0

- old
+ new

@@ -1,96 +1,82 @@ # encoding: utf-8 require 'shellwords' +require 'tty/prompt/reader/codes' RSpec.describe TTY::Prompt::Reader::KeyEvent, '#from' do - it "parses ctrl+h" do - event = described_class.from("\b") - expect(event.key.name).to eq(:backspace) - expect(event.value).to eq("\b") - end + let(:keys) { TTY::Prompt::Reader::Codes.keys } it "parses backspace" do - event = described_class.from("\e\x7f") + event = described_class.from(keys, "\x7f") expect(event.key.name).to eq(:backspace) - expect(event.key.meta).to eq(true) - expect(event.value).to eq("\e\x7f") + expect(event.value).to eq("\x7f") end it "parses lowercase char" do - event = described_class.from('a') - expect(event.key.name).to eq('a') + event = described_class.from(keys, 'a') + expect(event.key.name).to eq(:alpha) expect(event.value).to eq('a') end it "parses uppercase char" do - event = described_class.from('A') - expect(event.key.name).to eq('a') + event = described_class.from(keys, 'A') + expect(event.key.name).to eq(:alpha) expect(event.value).to eq('A') end + it "parses ctrl-a to ctrl-z inputs" do + (1..26).zip('a'..'z').each do |code, char| + next if ['i', 'j', 'm'].include?(char) + event = described_class.from(keys, code.chr) + expect(event.key.name).to eq(:"ctrl_#{char}") + expect(event.value).to eq(code.chr) + end + end + # F1-F12 keys { - f1: ["\eOP", "\e[11~", "\e[[A"], - f2: ["\eOQ", "\e[12~", "\e[[B"], - f3: ["\eOR", "\e[13~", "\e[[C"], - f4: ["\eOS", "\e[14~", "\e[[D"], - f5: [ "\e[15~", "\e[[E"], - f6: [ "\e[17~" ], - f7: [ "\e[18~" ], - f8: [ "\e[19~" ], - f9: [ "\e[20~" ], - f10: [ "\e[21~" ], - f11: [ "\e[23~" ], - f12: [ "\e[24~" ] + f1: ["\eOP", "\e[11~"], + f2: ["\eOQ", "\e[12~"], + f3: ["\eOR", "\e[13~"], + f4: ["\eOS", "\e[14~"], + f5: [ "\e[15~"], + f6: [ "\e[17~"], + f7: [ "\e[18~"], + f8: [ "\e[19~"], + f9: [ "\e[20~"], + f10: [ "\e[21~"], + f11: [ "\e[23~"], + f12: [ "\e[24~"] }.each do |name, codes| codes.each do |code| it "parses #{Shellwords.escape(code)} as #{name} key" do - event = described_class.from(code) + event = described_class.from(keys, code) expect(event.key.name).to eq(name) expect(event.key.meta).to eq(false) expect(event.key.ctrl).to eq(false) expect(event.key.shift).to eq(false) end end end # arrow keys & page navigation - # { - up: ["\e[A", "\eOA"], - down: ["\e[B", "\eOB"], - right: ["\e[C", "\eOC"], - left: ["\e[D", "\eOD"], - clear: ["\e[E", "\eOE"], + up: ["\e[A"], + down: ["\e[B"], + right: ["\e[C"], + left: ["\e[D"], + clear: ["\e[E"], end: ["\e[F"], home: ["\e[H"] }.each do |name, codes| codes.each do |code| it "parses #{Shellwords.escape(code)} as #{name} key" do - event = described_class.from(code) + event = described_class.from(keys, code) expect(event.key.name).to eq(name) expect(event.key.meta).to eq(false) expect(event.key.ctrl).to eq(false) expect(event.key.shift).to eq(false) - end - end - end - - { - up: ["\e[a"], - down: ["\e[b"], - right: ["\e[c"], - left: ["\e[d"], - clear: ["\e[e"], - }.each do |name, codes| - codes.each do |code| - it "parses #{Shellwords.escape(code)} as SHIFT + #{name} key" do - event = described_class.from(code) - expect(event.key.name).to eq(name) - expect(event.key.meta).to eq(false) - expect(event.key.ctrl).to eq(false) - expect(event.key.shift).to eq(true) end end end end