Implement Manager#destroy

This commit is contained in:
Thibault Jouan 2015-04-21 02:20:41 +00:00
parent 0423d6df9d
commit 31a326e7eb
2 changed files with 35 additions and 0 deletions

View File

@ -71,6 +71,12 @@ module Uh
end
end
def destroy window
return unless client = client_for(window)
@clients.delete client
@events.emit :unmanage, args: client
end
def handle_next_event
handle @display.next_event
end

View File

@ -214,6 +214,35 @@ module Uh
end
end
describe '#destroy' do
before { manager.map window }
it 'unregisters the client' do
expect { manager.destroy window }
.to change { manager.clients.size }.from(1).to 0
end
it 'emits :unmanage event with the client' do
events.on :unmanage, &block
expect(block).to receive(:call).with manager.clients[0]
manager.destroy window
end
context 'with unknown window' do
let(:unknown_window) { window.dup }
it 'does not change registered clients' do
expect { manager.destroy unknown_window }
.not_to change { manager.clients }
end
it 'does not emit any event' do
expect(events).not_to receive :emit
manager.destroy unknown_window
end
end
end
describe '#handle_next_event' do
it 'handles the next available event on display' do
event = double 'event'