require 'helper'

describe Thor::Shell do
  def shell
    @shell ||= Thor::Base.shell.new
  end

  describe '#initialize' do
    it 'sets shell value' do
      base = MyCounter.new [1, 2], {}, :shell => shell
      expect(base.shell).to eq(shell)
    end

    it 'sets the base value on the shell if an accessor is available' do
      base = MyCounter.new [1, 2], {}, :shell => shell
      expect(shell.base).to eq(base)
    end
  end

  describe '#shell' do
    it 'returns the shell in use' do
      expect(MyCounter.new([1, 2]).shell).to be_kind_of(Thor::Base.shell)
    end

    it 'uses $THOR_SHELL' do
      class Thor::Shell::TestShell < Thor::Shell::Basic; end

      expect(Thor::Base.shell).to eq(shell.class)
      ENV['THOR_SHELL'] = 'TestShell'
      Thor::Base.shell = nil
      expect(Thor::Base.shell).to eq(Thor::Shell::TestShell)
      ENV['THOR_SHELL'] = ''
      Thor::Base.shell = shell.class
      expect(Thor::Base.shell).to eq(shell.class)
    end
  end

  describe 'with_padding' do
    it 'uses padding for inside block outputs' do
      base = MyCounter.new([1, 2])
      base.with_padding do
        expect(capture(:stdout) { base.say_status :padding, 'cool' }.strip).to eq('padding    cool')
      end
    end
  end

end
