ea243ae022
An unique keybinding for each test means we have some level of isolation and can understand error messages more easily. As we're >10 now, let's use a leading zero to avoid shadowed keybindings.
161 lines
6.4 KiB
Gherkin
161 lines
6.4 KiB
Gherkin
Feature: Keyboard input
|
|
|
|
Tests for :bind and :unbind, :clear-keychain and other keyboard input
|
|
related things.
|
|
|
|
# :bind
|
|
|
|
Scenario: Binding a keychain
|
|
When I run :bind test01 message-info test01
|
|
And I press the keys "test01"
|
|
Then the message "test01" should be shown
|
|
|
|
Scenario: Binding an invalid command
|
|
When I run :bind test02 abcd
|
|
Then the error "Invalid command 'abcd'!" should be shown
|
|
|
|
Scenario: Binding with invalid mode.
|
|
When I run :bind --mode abcd test03 message-info test03
|
|
Then the error "Invalid mode abcd!" should be shown
|
|
|
|
Scenario: Double-binding a key
|
|
When I run :bind test04 message-info test04
|
|
And I run :bind test04 message-info test04-2
|
|
And I press the keys "test04"
|
|
Then the error "Duplicate keychain test04 - use --force to override!" should be shown
|
|
And the message "test04" should be shown
|
|
|
|
Scenario: Double-binding with --force
|
|
When I run :bind test05 message-info test05
|
|
And I run :bind --force test05 message-info test05-2
|
|
And I press the keys "test05"
|
|
Then the message "test05-2" should be shown
|
|
|
|
Scenario: Printing an unbound key
|
|
When I run :bind test06
|
|
Then the message "test06 is not bound in normal mode" should be shown
|
|
|
|
Scenario: Printing a bound key
|
|
When I run :bind test07 message-info foo
|
|
And I run :bind test07
|
|
Then the message "test07 is bound to 'message-info foo' in normal mode" should be shown
|
|
|
|
Scenario: Printing a bound key in a given mode
|
|
When I run :bind --mode=caret test08 message-info bar
|
|
And I run :bind --mode=caret test08
|
|
Then the message "test08 is bound to 'message-info bar' in caret mode" should be shown
|
|
|
|
# :unbind
|
|
|
|
Scenario: Binding and unbinding a keychain
|
|
When I run :bind test09 message-error test09
|
|
And I run :unbind test09
|
|
And I press the keys "test09"
|
|
Then "test09" should not be logged
|
|
|
|
Scenario: Unbinding with invalid mode.
|
|
When I run :unbind test10 abcd
|
|
Then the error "Invalid mode abcd!" should be shown
|
|
|
|
Scenario: Unbinding with invalid keychain.
|
|
When I run :unbind test11
|
|
Then the error "Can't find binding 'test11' in section 'normal'!" should be shown
|
|
|
|
Scenario: Unbinding a built-in binding
|
|
When I run :unbind o
|
|
And I press the key "o"
|
|
Then "No binding found for o." should be logged
|
|
# maybe check it's unbound in the config?
|
|
|
|
# :clear-keychain
|
|
|
|
Scenario: Clearing the keychain
|
|
When I run :bind foo message-error test12
|
|
And I run :bind bar message-info test12-2
|
|
And I press the keys "fo"
|
|
And I run :clear-keychain
|
|
And I press the keys "bar"
|
|
Then the message "test12-2" should be shown
|
|
|
|
# input -> forward-unbound-keys
|
|
|
|
Scenario: Forwarding all keys
|
|
When I open data/keyinput/log.html
|
|
And I set general -> log-javascript-console to info
|
|
And I set input -> forward-unbound-keys to all
|
|
And I press the key "q"
|
|
And I press the key "<F1>"
|
|
# q
|
|
Then the javascript message "key press: 81" should be logged
|
|
And the javascript message "key release: 81" should be logged
|
|
# <F1>
|
|
And the javascript message "key press: 112" should be logged
|
|
And the javascript message "key release: 112" should be logged
|
|
|
|
Scenario: Forwarding special keys
|
|
When I open data/keyinput/log.html
|
|
And I set general -> log-javascript-console to info
|
|
And I set input -> forward-unbound-keys to auto
|
|
And I press the key "x"
|
|
And I press the key "<F1>"
|
|
# <F1>
|
|
Then the javascript message "key press: 112" should be logged
|
|
And the javascript message "key release: 112" should be logged
|
|
# x
|
|
And the javascript message "key press: 88" should not be logged
|
|
And the javascript message "key release: 88" should not be logged
|
|
|
|
Scenario: Forwarding no keys
|
|
When I open data/keyinput/log.html
|
|
And I set general -> log-javascript-console to info
|
|
And I set input -> forward-unbound-keys to none
|
|
And I press the key "<F1>"
|
|
# <F1>
|
|
Then the javascript message "key press: 112" should not be logged
|
|
And the javascript message "key release: 112" should not be logged
|
|
|
|
# :fake-key
|
|
|
|
Scenario: :fake-key with an unparsable key
|
|
When I run :fake-key <blub>
|
|
Then the error "Could not parse 'blub': Got unknown key." should be shown
|
|
|
|
Scenario: :fake-key sending key to the website
|
|
When I set general -> log-javascript-console to info
|
|
And I open data/keyinput/log.html
|
|
And I run :fake-key x
|
|
Then the javascript message "key press: 88" should be logged
|
|
And the javascript message "key release: 88" should be logged
|
|
|
|
@no_xvfb @posix
|
|
Scenario: :fake-key sending key to the website with other window focused
|
|
When I open data/keyinput/log.html
|
|
And I set general -> developer-extras to true
|
|
And I run :inspector
|
|
And I wait for "Focus object changed: <PyQt5.QtWebKitWidgets.QWebView object at *>" in the log
|
|
And I run :fake-key x
|
|
And I run :inspector
|
|
And I wait for "Focus object changed: <qutebrowser.browser.webview.WebView *>" in the log
|
|
Then the error "No focused webview!" should be shown
|
|
|
|
Scenario: :fake-key sending special key to the website
|
|
When I set general -> log-javascript-console to info
|
|
And I open data/keyinput/log.html
|
|
And I run :fake-key <Escape>
|
|
Then the javascript message "key press: 27" should be logged
|
|
And the javascript message "key release: 27" should be logged
|
|
|
|
Scenario: :fake-key sending keychain to the website
|
|
When I set general -> log-javascript-console to info
|
|
And I open data/keyinput/log.html
|
|
And I run :fake-key xy
|
|
Then the javascript message "key press: 88" should be logged
|
|
And the javascript message "key release: 88" should be logged
|
|
And the javascript message "key press: 89" should be logged
|
|
And the javascript message "key release: 89" should be logged
|
|
|
|
Scenario: :fake-key sending keypress to qutebrowser
|
|
When I run :fake-key -g x
|
|
And I wait for "got keypress in mode KeyMode.normal - delegating to <qutebrowser.keyinput.modeparsers.NormalKeyParser>" in the log
|
|
Then no crash should happen
|