From b9b2bff85387e5828c4b0a8dd83358a196bfc3ee Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Fri, 10 Apr 2015 17:37:19 +0000 Subject: [PATCH] Use Layout from uh-layout as default --- lib/uh/wm/env.rb | 9 +++++++++ lib/uh/wm/runner.rb | 9 +++++---- spec/uh/wm/env_spec.rb | 18 ++++++++++++++++++ spec/uh/wm/runner_spec.rb | 13 +------------ uh-wm.gemspec | 3 ++- 5 files changed, 35 insertions(+), 17 deletions(-) diff --git a/lib/uh/wm/env.rb b/lib/uh/wm/env.rb index fded52c..029ab97 100644 --- a/lib/uh/wm/env.rb +++ b/lib/uh/wm/env.rb @@ -26,6 +26,15 @@ module Uh !!@debug end + def layout + @layout ||= if layout_class + layout_class.new + else + require 'uh/layout' + ::Uh::Layout.new + end + end + def logger @logger ||= Logger.new(@output).tap do |o| o.level = debug? ? LOGGER_LEVEL_DEBUG : diff --git a/lib/uh/wm/runner.rb b/lib/uh/wm/runner.rb index f54a6cd..24c0675 100644 --- a/lib/uh/wm/runner.rb +++ b/lib/uh/wm/runner.rb @@ -10,14 +10,15 @@ module Uh end end - attr_reader :env, :events, :manager, :layout + extend Forwardable + def_delegator :@env, :layout + + attr_reader :env, :events, :manager def initialize env, manager: nil, stopped: false - raise ArgumentError, 'missing env layout class' unless env.layout_class @env = env @events = Dispatcher.new @manager = manager || Manager.new(@events) - @layout = @env.layout_class.new @stopped = stopped end @@ -58,7 +59,7 @@ module Uh def register_layout_event_hooks @events.on(:connected) do |display| - @layout.register display + layout.register display end end diff --git a/spec/uh/wm/env_spec.rb b/spec/uh/wm/env_spec.rb index b80334b..77cf3f3 100644 --- a/spec/uh/wm/env_spec.rb +++ b/spec/uh/wm/env_spec.rb @@ -53,6 +53,24 @@ module Uh end end + describe '#layout' do + context 'when a layout class is set' do + let(:some_layout) { Class.new } + + before { env.layout_class = some_layout } + + it 'returns a new instance of this layout class' do + expect(env.layout).to be_an_instance_of some_layout + end + end + + context 'when a layout class is not set' do + it 'returns an instance of the default layout' do + expect(env.layout).to be_an_instance_of ::Uh::Layout + end + end + end + describe '#logger' do it 'returns a logger' do expect(env.logger).to be_a Logger diff --git a/spec/uh/wm/runner_spec.rb b/spec/uh/wm/runner_spec.rb index 0d533fd..c56d94b 100644 --- a/spec/uh/wm/runner_spec.rb +++ b/spec/uh/wm/runner_spec.rb @@ -55,17 +55,6 @@ module Uh it 'is not stopped' do expect(runner).not_to be_stopped end - - it 'assigns a new layout instance' do - expect(runner.layout).to be_an_instance_of SomeLayout - end - - context 'when the env has no layout set' do - before { env.layout_class = nil } - it 'raises an ArgumentError' do - expect { runner }.to raise_error WM::ArgumentError - end - end end describe '#stopped?' do @@ -101,7 +90,7 @@ module Uh it 'registers layout hook for :connected event' do runner.register_event_hooks - expect(runner.layout).to receive(:register).with :display + expect(env.layout).to receive(:register).with :display runner.events.emit :connected, args: :display end diff --git a/uh-wm.gemspec b/uh-wm.gemspec index 48a48ad..ed98051 100644 --- a/uh-wm.gemspec +++ b/uh-wm.gemspec @@ -14,7 +14,8 @@ Gem::Specification.new do |s| s.test_files = s.files.grep /\A(spec|features)\// s.executables = s.files.grep(/\Abin\//) { |f| File.basename(f) } - s.add_dependency 'uh', '2.0.0.pre' + s.add_dependency 'uh', '2.0.0.pre' + s.add_dependency 'uh-layout', '0.2.0.pre' s.add_development_dependency 'aruba', '~> 0.6' s.add_development_dependency 'cucumber', '~> 2.0'