Implement `kill' action keyword

When invoked, will kill the client returned by
`layout.current_client`. ICCCM WM_DELETE_WINDOW is used instead if the
window reports to support this protocol.
This commit is contained in:
Thibault Jouan 2015-04-29 02:38:30 +00:00
parent 10ad5d9a76
commit 1cc1f98ad2
4 changed files with 41 additions and 0 deletions

View File

@ -0,0 +1,11 @@
Feature: `kill' action keyword
@icccm_window
Scenario: kills current client
Given uhwm is running with this run control file:
"""
key(:f) { kill_current }
"""
And an ICCCM compliant window is mapped
When I press the alt+f keys
Then the ICCCM window must be unmapped by the manager

View File

@ -1,3 +1,10 @@
Given /^an ICCCM compliant window is mapped$/ do
icccm_window_start
timeout_until 'window not mapped after %d seconds' do
x_window_map_state(icccm_window_name) == 'IsViewable'
end
end
Given /^a(?:\s(\w+))? window is mapped$/ do |ident| Given /^a(?:\s(\w+))? window is mapped$/ do |ident|
x_client(ident).map.sync x_client(ident).map.sync
timeout_until 'window not mapped after %d seconds' do timeout_until 'window not mapped after %d seconds' do
@ -42,6 +49,10 @@ Then /^the(?:\s(\w+))? window must be mapped$/ do |ident|
end end
end end
Then /^the ICCCM window must be unmapped by the manager$/ do
uhwm_wait_output /unmanag.+#{icccm_window_name}/i
end
Then /^the window must be focused$/ do Then /^the window must be focused$/ do
timeout_until 'window not focused after %d seconds' do timeout_until 'window not focused after %d seconds' do
x_focused_window_id == x_client.window_id x_focused_window_id == x_client.window_id

View File

@ -38,6 +38,10 @@ module Uh
Process.waitpid pid Process.waitpid pid
end end
def kill_current
layout.current_client.kill
end
def log_separator def log_separator
log '- ' * 24 log '- ' * 24
end end

View File

@ -24,6 +24,21 @@ module Uh
end end
end end
describe '#kill_current' do
let(:client) { instance_spy Client }
context 'when layout has a client' do
before do
allow(actions.layout).to receive(:current_client) { client }
end
it 'kills layout current client' do
expect(client).to receive :kill
actions.kill_current
end
end
end
describe '#log_separator' do describe '#log_separator' do
it 'logs a separator' do it 'logs a separator' do
expect(env).to receive(:log).with /(?:- ){20,}/ expect(env).to receive(:log).with /(?:- ){20,}/