Sha256: a9f6b0a6394f41c0cad3188e88595b9b8ee90b70e09555ca3b7f075a0ec8f201

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

# encoding: utf-8

RSpec.describe TTY::Prompt::Reader, '#read_line' do
  let(:input)  { StringIO.new }
  let(:output) { StringIO.new }
  let(:env)    { { "TTY_TEST" => true } }

  subject(:reader) { described_class.new(input, output, env: env) }

  it 'masks characters' do
    input << "password\n"
    input.rewind
    answer = reader.read_line(echo: false)
    expect(answer).to eq("password\n")
  end

  it "echoes characters back" do
    input << "password\n"
    input.rewind
    answer = reader.read_line
    expect(answer).to eq("password\n")
    expect(output.string).to eq([
      "\e[2K\e[1Gp",
      "\e[2K\e[1Gpa",
      "\e[2K\e[1Gpas",
      "\e[2K\e[1Gpass",
      "\e[2K\e[1Gpassw",
      "\e[2K\e[1Gpasswo",
      "\e[2K\e[1Gpasswor",
      "\e[2K\e[1Gpassword",
      "\e[2K\e[1Gpassword\n"
    ].join)
  end

  it "doesn't echo characters back" do
    input << "password\n"
    input.rewind
    answer = reader.read_line(echo: false)
    expect(answer).to eq("password\n")
    expect(output.string).to eq('')
  end

  it "displays a prompt before input" do
    input << "aa\n"
    input.rewind
    answer = reader.read_line('>> ')
    expect(answer).to eq("aa\n")
    expect(output.string).to eq([
      "\e[2K\e[1G>> a",
      "\e[2K\e[1G>> aa",
      "\e[2K\e[1G>> aa\n"
    ].join)
  end

  xit 'deletes characters when backspace pressed' do
    input << "aa\ba\bcc\n"
    input.rewind
    answer = reader.read_line
    expect(answer).to eq("acc\n")
  end

  it 'reads multibyte line' do
    input << "한글"
    input.rewind
    answer = reader.read_line
    expect(answer).to eq("한글")
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tty-prompt-0.12.0 spec/unit/reader/read_line_spec.rb