Improve UAT on layout

* Move cucumber features regarding the layout protocol in
  layout/protocol;
* Add new cucumber features to test uh-layout integration in uh-wm, at
  least simple mapping and focus behavior;
* Add new acceptance testing helpers
This commit is contained in:
Thibault Jouan 2015-04-18 19:33:47 +00:00
parent 2894783b57
commit 82a4161cc2
5 changed files with 56 additions and 25 deletions

View File

@ -1,16 +1,12 @@
Feature: layout client management
Scenario: sends the #<< message when telling the layout to manage a client
Given a file named layout.rb with:
"""
class Layout
def register *_; end
Background:
Given uhwm is running
def << client
puts client
end
end
"""
And uhwm is running with options -v -r./layout -l Layout
Scenario: maps new client window
When a window requests to be mapped
Then the output must contain the window name
Then the window must be mapped
Scenario: focuses new client window
When a window requests to be mapped
Then the window must be focused

View File

@ -0,0 +1,24 @@
Feature: layout protocol
Background:
Given a file named layout.rb with:
"""
class Layout
def register display
puts display
end
def << client
puts client
end
end
"""
Scenario: tells the layout to register with #register message
When I run uhwm with option -r./layout -l Layout
Then the output must contain current display
Scenario: tells the layout to manage a client with #<< message
Given uhwm is running with options -v -r./layout -l Layout
When a window requests to be mapped
Then the output must contain the window name

View File

@ -1,13 +0,0 @@
Feature: layout registration
Scenario: sends the #register message to the layout with the display
Given a file named layout.rb with:
"""
class Layout
def register display
puts display
end
end
"""
When I run uhwm with option -r./layout -l Layout
Then the output must contain current display

View File

@ -10,3 +10,11 @@ Then /^it must connect to X display$/ do
uhwm_wait_output 'Connected to'
expect(x_socket_check uhwm_pid).to be true
end
Then /^the window must be mapped$/ do
expect(x_window_map_state).to eq 'IsViewable'
end
Then /^the window must be focused$/ do
expect(x_focused_window_id).to eq x_window_id
end

View File

@ -60,6 +60,10 @@ module Uh
@x_client ||= XClient.new
end
def x_focused_window_id
Integer(`xdpyinfo`[/^focus:\s+window\s+(0x\h+)/, 1])
end
def x_key key
fail "cannot simulate X key `#{key}'" unless system "xdotool key #{key}"
end
@ -73,6 +77,10 @@ module Uh
end.any?
end
def x_window_id
@x_client.window_id
end
def x_window_name
@x_client.window_name
end
@ -81,6 +89,10 @@ module Uh
x_client.map.sync
end
def x_window_map_state
`xwininfo -id #{x_window_id}`[/Map State: (\w+)/, 1]
end
def x_clients_ensure_stop
@x_client and @x_client.terminate
end
@ -135,6 +147,10 @@ module Uh
end
end
def window_id
@window.id
end
def window_name
@name
end