diff --git a/features/layout/manage.feature b/features/layout/manage.feature index d485e57..f7dc6e7 100644 --- a/features/layout/manage.feature +++ b/features/layout/manage.feature @@ -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 diff --git a/features/layout/protocol.feature b/features/layout/protocol.feature new file mode 100644 index 0000000..33003bf --- /dev/null +++ b/features/layout/protocol.feature @@ -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 diff --git a/features/layout/registration.feature b/features/layout/registration.feature deleted file mode 100644 index 8aae571..0000000 --- a/features/layout/registration.feature +++ /dev/null @@ -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 diff --git a/features/steps/x_steps.rb b/features/steps/x_steps.rb index e7a1544..5a40dc1 100644 --- a/features/steps/x_steps.rb +++ b/features/steps/x_steps.rb @@ -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 diff --git a/lib/uh/wm/testing/acceptance_helpers.rb b/lib/uh/wm/testing/acceptance_helpers.rb index 44612aa..342e587 100644 --- a/lib/uh/wm/testing/acceptance_helpers.rb +++ b/lib/uh/wm/testing/acceptance_helpers.rb @@ -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