3
3
'''
4
4
5
5
6
+ from hypothesis import (
7
+ given ,
8
+ settings ,
9
+ strategies as st ,
10
+ )
11
+
6
12
class TestShortcuts :
7
13
8
14
def test_tab_cycles (self , bash ):
@@ -15,3 +21,28 @@ def test_tab_cycles(self, bash):
15
21
assert completion == next_cycle , 'tabs: {}, old: {}, new: {}' .format (
16
22
tabs , completion .selected , next_cycle .selected )
17
23
24
+ @settings (deadline = 1000 , max_examples = 10 )
25
+ @given (forward = st .integers (min_value = 1 , max_value = 15 ),
26
+ backward = st .integers (min_value = 1 , max_value = 15 ))
27
+ def test_shift_tab (self , bash , log , forward , backward ):
28
+ '''Shift-Tab cycles back'''
29
+ command = 'ls u/s/a'
30
+ cycle_length = len (bash .complete (command )) + 1
31
+
32
+ TAB = '\t '
33
+ SHIFT_TAB = '\x1b \x5b \x5a ' # use 'showkey -a' on any Linux machine
34
+ # to see ASCII codes corresponding to keypresses
35
+
36
+ tabs_forward = TAB * ((forward - backward ) % cycle_length )
37
+ if not tabs_forward : # in case we cycle back to the original command
38
+ tabs_forward = TAB + SHIFT_TAB
39
+ tabs_forward_and_back = TAB * forward + SHIFT_TAB * backward
40
+ log .debug (
41
+ '[%s/%s] tab sequences: forward=%r, forward and back=%r' ,
42
+ forward ,
43
+ backward ,
44
+ tabs_forward ,
45
+ tabs_forward_and_back
46
+ )
47
+ assert bash .complete (command , custom_tabs = tabs_forward ) == \
48
+ bash .complete (command , custom_tabs = tabs_forward_and_back )
0 commit comments