uh-wm/spec/uh/wm/runner_spec.rb
Thibault Jouan e81cf3a52f Clean up tests
* Remove deprecated tags;
* Improve scenarios, steps and specs descriptions.
2015-04-14 02:59:48 +00:00

124 lines
3.3 KiB
Ruby

require 'support/filesystem_helpers'
SomeLayout = Class.new do
define_method(:register) { |*args| }
end
module Uh
module WM
RSpec.describe Runner do
include FileSystemHelpers
let(:env) { Env.new(StringIO.new) }
subject(:runner) { described_class.new env }
before do
env.layout_class = SomeLayout
env.rc_path = 'non_existent_run_control.rb'
end
describe '#initialize' do
it 'assigns the env' do
expect(runner.env).to be env
end
it 'assigns a new Dispatcher' do
expect(runner.events).to be_a Dispatcher
end
it 'assigns a new Manager' do
expect(runner.manager).to be_a Manager
end
it 'is not stopped' do
expect(runner).not_to be_stopped
end
end
describe '#stopped?' do
context 'when not stopped' do
it 'returns false' do
expect(runner.stopped?).to be false
end
end
context 'when stopped' do
before { runner.stop! }
it 'returns true' do
expect(runner.stopped?).to be true
end
end
end
describe '#stop!' do
it 'sets the runner as stopped' do
expect { runner.stop! }
.to change { runner.stopped? }
.from(false).to(true)
end
end
describe '#evaluate_run_control' do
context 'when run control file is present' do
it 'evaluates the run control file' do
with_file 'throw :run_control' do |f|
env.rc_path = f.path
expect { runner.evaluate_run_control }.to throw_symbol :run_control
end
end
end
context 'when run control file is not present' do
it 'does not raise any error' do
expect { runner.evaluate_run_control }.not_to raise_error
end
end
end
describe '#register_event_hooks' do
it 'registers manager event hooks for logging' do
runner.register_event_hooks
expect(env).to receive(:log)
runner.events.emit :connected
end
it 'registers layout hook for :connected event' do
runner.register_event_hooks
expect(env.layout).to receive(:register).with :display
runner.events.emit :connected, args: :display
end
it 'registers key bindings event hooks' do
runner.register_event_hooks
expect(runner.events[:key, :q]).not_to be_empty
end
end
describe '#connect_manager' do
let(:manager) { instance_spy Manager }
subject(:runner) { described_class.new env, manager: manager }
it 'connects the manager' do
expect(runner.manager).to receive :connect
runner.connect_manager
end
it 'tells the manager to grab keys' do
expect(runner.manager).to receive(:grab_key).with :q
runner.connect_manager
end
end
describe '#run_until' do
it 'tells the manager to handle events until given block is true' do
block = proc { }
allow(block).to receive(:call).and_return(false, false, false, true)
expect(runner.manager).to receive(:handle_pending_events).exactly(3).times
runner.run_until &block
end
end
end
end
end