spec/unit/yes_no_spec.rb in tty-prompt-0.4.0 vs spec/unit/yes_no_spec.rb in tty-prompt-0.5.0
- old
+ new
@@ -1,25 +1,25 @@
# encoding: utf-8
-RSpec.describe TTY::Prompt, '#yes?' do
+RSpec.describe TTY::Prompt, 'confirmation' do
subject(:prompt) { TTY::TestPrompt.new }
- context 'yes?' do
- it 'agrees' do
+ context '#yes?' do
+ it 'agrees with question' do
prompt.input << 'yes'
prompt.input.rewind
expect(prompt.yes?("Are you a human?")).to eq(true)
expect(prompt.output.string).to eq([
"Are you a human? \e[90m(Y/n)\e[0m ",
"\e[1000D\e[K\e[1A",
"\e[1000D\e[K",
- "Are you a human? \e[32myes\e[0m\n"
+ "Are you a human? \e[32mYes\e[0m\n"
].join)
end
- it 'disagrees' do
+ it 'disagrees with question' do
prompt.input << 'no'
prompt.input.rewind
expect(prompt.yes?("Are you a human?")).to eq(false)
expect(prompt.output.string).to eq([
"Are you a human? \e[90m(Y/n)\e[0m ",
@@ -30,41 +30,176 @@
end
it 'assumes default true' do
prompt.input << "\r"
prompt.input.rewind
- expect(prompt.yes?("Are you a human?", default: true)).to eq(true)
+ expect(prompt.yes?("Are you a human?")).to eq(true)
expect(prompt.output.string).to eq([
"Are you a human? \e[90m(Y/n)\e[0m ",
"\e[1000D\e[K\e[1A",
"\e[1000D\e[K",
- "Are you a human? \e[32mtrue\e[0m\n"
+ "Are you a human? \e[32mYes\e[0m\n"
].join)
end
+
+ it 'changes default' do
+ prompt.input << "\n"
+ prompt.input.rewind
+ expect(prompt.yes?("Are you a human?", default: false)).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(Y/n)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mno\e[0m\n"
+ ].join)
+ end
+
+ it "defaults suffix and converter" do
+ prompt.input << "Nope\n"
+ prompt.input.rewind
+ result = prompt.yes?("Are you a human?") do |q|
+ q.positive 'Yup'
+ q.negative 'nope'
+ end
+ expect(result).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(Yup/nope)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mnope\e[0m\n"
+ ].join)
+ end
+
+ it "defaults positive and negative" do
+ prompt.input << "Nope\n"
+ prompt.input.rewind
+ result = prompt.yes?("Are you a human?") do |q|
+ q.suffix 'Yup/nope'
+ end
+ expect(result).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(Yup/nope)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mnope\e[0m\n"
+ ].join)
+ end
+
+ it "customizes question through options" do
+ prompt.input << "\r"
+ prompt.input.rewind
+ result = prompt.yes?("Are you a human?", suffix: 'Agree/Disagree',
+ positive: 'Agree', negative: 'Disagree')
+ expect(result).to eq(true)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(Agree/Disagree)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mAgree\e[0m\n"
+ ].join)
+ end
+
+ it "customizes question through DSL" do
+ prompt.input << "disagree\r"
+ prompt.input.rewind
+ conversion = proc { |input| !input.match(/^agree$/i).nil? }
+ result = prompt.yes?("Are you a human?") do |q|
+ q.suffix 'Agree/Disagree'
+ q.positive 'Agree'
+ q.negative 'Disagree'
+ q.convert conversion
+ end
+ expect(result).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(Agree/Disagree)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mDisagree\e[0m\n"
+ ].join)
+ end
end
- context 'no?' do
- it 'disagrees' do
+ context '#no?' do
+ it 'agrees with question' do
prompt.input << 'no'
prompt.input.rewind
expect(prompt.no?("Are you a human?")).to eq(true)
expect(prompt.output.string).to eq([
- "Are you a human? \e[90m(Y/n)\e[0m ",
+ "Are you a human? \e[90m(y/N)\e[0m ",
"\e[1000D\e[K\e[1A",
"\e[1000D\e[K",
- "Are you a human? \e[32mno\e[0m\n"
+ "Are you a human? \e[32mNo\e[0m\n"
].join)
end
- it 'agrees' do
+ it 'disagrees with question' do
prompt.input << 'yes'
prompt.input.rewind
expect(prompt.no?("Are you a human?")).to eq(false)
expect(prompt.output.string).to eq([
- "Are you a human? \e[90m(Y/n)\e[0m ",
+ "Are you a human? \e[90m(y/N)\e[0m ",
"\e[1000D\e[K\e[1A",
"\e[1000D\e[K",
- "Are you a human? \e[32myes\e[0m\n"
+ "Are you a human? \e[32mYes\e[0m\n"
+ ].join)
+ end
+
+ it 'assumes default false' do
+ prompt.input << "\r"
+ prompt.input.rewind
+ expect(prompt.no?("Are you a human?")).to eq(true)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(y/N)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mNo\e[0m\n"
+ ].join)
+ end
+
+ it 'changes default' do
+ prompt.input << "\r"
+ prompt.input.rewind
+ expect(prompt.no?("Are you a human?", default: true)).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(y/N)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mYes\e[0m\n"
+ ].join)
+ end
+
+ it "defaults suffix and converter" do
+ prompt.input << "Yup\n"
+ prompt.input.rewind
+ result = prompt.no?("Are you a human?") do |q|
+ q.positive 'yup'
+ q.negative 'Nope'
+ end
+ expect(result).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(yup/Nope)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32myup\e[0m\n"
+ ].join)
+ end
+
+ it "customizes question through DSL" do
+ prompt.input << "agree\r"
+ prompt.input.rewind
+ conversion = proc { |input| !input.match(/^agree$/i).nil? }
+ result = prompt.no?("Are you a human?") do |q|
+ q.suffix 'Agree/Disagree'
+ q.positive 'Agree'
+ q.negative 'Disagree'
+ q.convert conversion
+ end
+ expect(result).to eq(false)
+ expect(prompt.output.string).to eq([
+ "Are you a human? \e[90m(Agree/Disagree)\e[0m ",
+ "\e[1000D\e[K\e[1A",
+ "\e[1000D\e[K",
+ "Are you a human? \e[32mAgree\e[0m\n"
].join)
end
end
end