33'''
44
55
6+ from hypothesis import (
7+ given ,
8+ settings ,
9+ strategies as st ,
10+ )
11+
612class TestShortcuts :
713
814 def test_tab_cycles (self , bash ):
@@ -15,3 +21,28 @@ def test_tab_cycles(self, bash):
1521 assert completion == next_cycle , 'tabs: {}, old: {}, new: {}' .format (
1622 tabs , completion .selected , next_cycle .selected )
1723
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