Skip to content

Commit d6e8c22

Browse files
authored
Fix down and up methods (#288)
* Fix down and up methods. Addresses discussion #274 * Add TODO
1 parent 26b265a commit d6e8c22

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

lib/ferrum/keyboard.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ def initialize(page)
3131
end
3232

3333
def down(key)
34-
key = normalize_keys(Array(key))
34+
key = normalize_keys(Array(key)).first
3535
type = key[:text] ? "keyDown" : "rawKeyDown"
3636
@page.command("Input.dispatchKeyEvent", slowmoable: true, type: type, **key)
3737
self
3838
end
3939

4040
def up(key)
41-
key = normalize_keys(Array(key))
41+
key = normalize_keys(Array(key)).first
4242
@page.command("Input.dispatchKeyEvent", slowmoable: true, type: "keyUp", **key)
4343
self
4444
end
@@ -61,9 +61,14 @@ def modifiers(keys)
6161

6262
private
6363

64+
# TODO: Refactor it, and try to simplify complexity
65+
# rubocop:disable Metrics/PerceivedComplexity
66+
# rubocop:disable Metrics/CyclomaticComplexity
6467
def normalize_keys(keys, pressed_keys = [], memo = [])
6568
case keys
6669
when Array
70+
raise ArgumentError, "empty keys passed" if keys.empty?
71+
6772
pressed_keys.push([])
6873
memo += combine_strings(keys).map do |key|
6974
normalize_keys(key, pressed_keys, memo)
@@ -82,6 +87,8 @@ def normalize_keys(keys, pressed_keys = [], memo = [])
8287
to_options(key)
8388
end
8489
when String
90+
raise ArgumentError, "empty keys passed" if keys.empty?
91+
8592
pressed = pressed_keys.flatten
8693
keys.each_char.map do |char|
8794
key = KEYS[char] || {}
@@ -102,8 +109,12 @@ def normalize_keys(keys, pressed_keys = [], memo = [])
102109
modifiers + [to_options(key)]
103110
end.flatten
104111
end
112+
else
113+
raise ArgumentError, "unexpected argument"
105114
end
106115
end
116+
# rubocop:enable Metrics/PerceivedComplexity
117+
# rubocop:enable Metrics/CyclomaticComplexity
107118

108119
def combine_strings(keys)
109120
keys

spec/keyboard_spec.rb

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ module Ferrum
164164
end
165165
end
166166

167-
context "type" do
167+
context "#type" do
168168
let(:delete_all) { [[(Utils::Platform.mac? ? :alt : :ctrl), :shift, :right], :backspace] }
169169

170170
before { browser.go_to("/ferrum/set") }
@@ -235,6 +235,30 @@ module Ferrum
235235
end
236236
end
237237

238+
context "#down" do
239+
before { browser.go_to("/ferrum/set") }
240+
241+
it "sends down events from keyboard" do
242+
expect { browser.keyboard.down("") }.to raise_error(ArgumentError, "empty keys passed")
243+
expect { browser.keyboard.down([]) }.to raise_error(ArgumentError, "empty keys passed")
244+
expect { browser.keyboard.down("arghhh") }.not_to raise_error
245+
expect { browser.keyboard.down(:page_down) }.not_to raise_error
246+
expect { browser.keyboard.down(1) }.to raise_error(ArgumentError, "unexpected argument")
247+
end
248+
end
249+
250+
context "#up" do
251+
before { browser.go_to("/ferrum/set") }
252+
253+
it "sends up events from keyboard" do
254+
expect { browser.keyboard.up("") }.to raise_error(ArgumentError, "empty keys passed")
255+
expect { browser.keyboard.up([]) }.to raise_error(ArgumentError, "empty keys passed")
256+
expect { browser.keyboard.up("arghhh") }.not_to raise_error
257+
expect { browser.keyboard.up(:page_down) }.not_to raise_error
258+
expect { browser.keyboard.up(1) }.to raise_error(ArgumentError, "unexpected argument")
259+
end
260+
end
261+
238262
describe "events" do
239263
let(:change_me) { browser.at_css("#change_me") }
240264

0 commit comments

Comments
 (0)