diff --git a/lib/uh/wm/manager.rb b/lib/uh/wm/manager.rb index 0148d8a..f984944 100644 --- a/lib/uh/wm/manager.rb +++ b/lib/uh/wm/manager.rb @@ -9,7 +9,9 @@ module Uh end def connect + @events.emit :display, :connecting, args: @display @display.open + @events.emit :display, :connected, args: @display end def grab_key keysym diff --git a/lib/uh/wm/runner.rb b/lib/uh/wm/runner.rb index 849acac..c377a62 100644 --- a/lib/uh/wm/runner.rb +++ b/lib/uh/wm/runner.rb @@ -28,12 +28,12 @@ module Uh end def register_event_hooks + register_manager_hooks register_key_bindings_hooks end def connect_manager @manager.connect - @env.log "Connected to X server" @manager.grab_key :q end @@ -44,6 +44,15 @@ module Uh private + def register_manager_hooks + @events.on(:display, :connecting) do |display| + @env.log_debug "Connecting to X server on `#{display}'" + end + @events.on(:display, :connected) do |display| + @env.log "Connected to X server on `#{display}'" + end + end + def register_key_bindings_hooks @events.on(:key, :q) { stop! } end diff --git a/spec/uh/wm/manager_spec.rb b/spec/uh/wm/manager_spec.rb index 032a40b..c006f1b 100644 --- a/spec/uh/wm/manager_spec.rb +++ b/spec/uh/wm/manager_spec.rb @@ -12,10 +12,38 @@ module Uh end describe '#connect' do + let(:block) { proc { } } + it 'opens the display' do expect(manager.display).to receive :open manager.connect end + + it 'emits :display, :connecting event with the display' do + events.on :display, :connecting, &block + expect(block).to receive(:call) do |*args| + expect(args).to eq [display] + end + manager.connect + end + + it 'emits :display, :connected event with the display' do + events.on :display, :connected, &block + expect(block).to receive(:call) do |*args| + expect(args).to eq [display] + end + manager.connect + end + + context 'when connection fails' do + before { allow(display).to receive(:open) { fail } } + + it 'does not emit :display, :connected event' do + events.on :display, :connected, &block + expect(block).not_to receive :call + manager.connect rescue nil + end + end end describe '#grab_key' do diff --git a/spec/uh/wm/runner_spec.rb b/spec/uh/wm/runner_spec.rb index 2a46a2d..c6ff38d 100644 --- a/spec/uh/wm/runner_spec.rb +++ b/spec/uh/wm/runner_spec.rb @@ -76,6 +76,14 @@ module Uh end describe '#register_event_hooks' do + context 'manager' do + it 'registers manager event hooks' do + runner.register_event_hooks + expect(runner.events[:display, :connecting]).not_to be_empty + expect(runner.events[:display, :connected]).not_to be_empty + end + end + context 'key bindings' do it 'registers key bindings event hooks' do runner.register_event_hooks @@ -93,11 +101,6 @@ module Uh runner.connect_manager end - it 'logs a message when connected' do - expect(env).to receive(:log).with /connected/i - runner.connect_manager - end - it 'tells the manager to grab keys' do expect(runner.manager).to receive(:grab_key).with :q runner.connect_manager