Sha256: 823b44672c4b3c6bf20d77d2bb25416073df89d92a14b34b2fe1fd665485c5d5

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

require 'shoes/spec_helper'
require 'shoes/ui/picker'

describe Shoes::UI::Picker do

  let(:swt_backend)  { "/gems/lib/shoes/swt/generate-backend.rb" }
  let(:faux_backend) { "/gems/lib/shoes/faux/generate-backend.rb" }

  let(:output) { StringIO.new }
  let(:input)  { StringIO.new }

  subject  { Shoes::UI::Picker.new(input, output) }

  it "selects single backend generator" do
    allow(Gem).to receive(:find_files) { [ swt_backend ] }
    expect(subject.select_generator).to eq(swt_backend)
  end

  describe "with multiple backend generators" do
    before do
      allow(Gem).to receive(:find_files) { [ faux_backend, swt_backend ] }
    end

    it "prompts with multiple backend generators" do
      select("1")
      subject.select_generator

      output.rewind
      result = output.read

      expect(result).to include("shoes-faux")
      expect(result).to include("shoes-swt")
    end

    it "selects from multiple backend generators" do
      select("2")
      expect(subject.select_generator).to eq(swt_backend)
    end

    it "retries for index past bounds" do
      select("3\n1")
      expect(subject.select_generator).to eq(faux_backend)
    end

    it "retries for index before bounds" do
      select("0\n1")
      expect(subject.select_generator).to eq(faux_backend)
    end

    it "retries for junk" do
      select("junk\n1")
      expect(subject.select_generator).to eq(faux_backend)
    end

    it "fails if no matches" do
      allow(Gem).to receive(:find_files) { [ ] }
      expect { subject.select_generator }.to raise_error(ArgumentError)
    end

    it "selects by name" do
      allow(Gem).to receive(:find_files) { [ swt_backend ] }
      expect(subject.select_generator("swt")).to eq(swt_backend)
    end

    def select(typed_input)
      input.write(typed_input)
      input.rewind
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoes-core-4.0.0.pre4 spec/shoes/ui/picker_spec.rb