Implement Manager#destroy
This commit is contained in:
parent
0423d6df9d
commit
31a326e7eb
@ -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
|
||||
|
@ -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'
|
||||
|
Loading…
x
Reference in New Issue
Block a user