mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2024-11-18 09:51:06 +01:00
Implement suggestion integration tests in RSpec + tmux
This commit is contained in:
parent
07a6768fcb
commit
c22ab0e399
5 changed files with 192 additions and 232 deletions
132
spec/strategies/default_spec.rb
Normal file
132
spec/strategies/default_spec.rb
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
describe 'default strategy' do
|
||||||
|
let(:session) { TerminalSession.new }
|
||||||
|
|
||||||
|
before do
|
||||||
|
session.run_command('source zsh-autosuggestions.zsh')
|
||||||
|
session.run_command('fc -p')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
session.destroy
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with some simple history entries' do
|
||||||
|
before do
|
||||||
|
session.run_command('ls foo')
|
||||||
|
session.run_command('ls bar')
|
||||||
|
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'suggests nothing if there is no match' do
|
||||||
|
session.send_string('ls q')
|
||||||
|
wait_for { session.content }.to eq('ls q')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'suggests the most recent matching history item' do
|
||||||
|
session.send_string('ls')
|
||||||
|
wait_for { session.content }.to eq('ls bar')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
xcontext 'with a multiline hist entry' do
|
||||||
|
before do
|
||||||
|
session.send_string('echo "')
|
||||||
|
session.send_keys('enter')
|
||||||
|
session.send_string('"')
|
||||||
|
session.send_keys('enter')
|
||||||
|
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_keys('e')
|
||||||
|
wait_for { session.content }.to eq "echo \"\n\""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a hist entry with a backslash' do
|
||||||
|
before do
|
||||||
|
session.run_command('echo "hello\nworld"')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('echo "hello\\')
|
||||||
|
wait_for { session.content }.to eq('echo "hello\nworld"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a hist entry with double backslashes' do
|
||||||
|
before do
|
||||||
|
session.run_command('echo "\\\\"')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('echo "\\\\')
|
||||||
|
wait_for { session.content }.to eq('echo "\\\\"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a hist entry with a tilde' do
|
||||||
|
before do
|
||||||
|
session.run_command('ls ~/foo')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('ls ~')
|
||||||
|
wait_for { session.content }.to eq('ls ~/foo')
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with extended_glob set' do
|
||||||
|
before do
|
||||||
|
session.run_command('setopt local_options extended_glob')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('ls ~')
|
||||||
|
wait_for { session.content }.to eq('ls ~/foo')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a hist entry with parentheses' do
|
||||||
|
before do
|
||||||
|
session.run_command('echo "$(ls foo)"')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('echo "$(')
|
||||||
|
wait_for { session.content }.to eq('echo "$(ls foo)"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a hist entry with square brackets' do
|
||||||
|
before do
|
||||||
|
session.run_command('echo "$history[123]"')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('echo "$history[')
|
||||||
|
wait_for { session.content }.to eq('echo "$history[123]"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a hist entry with pound sign' do
|
||||||
|
before do
|
||||||
|
session.run_command('echo "#yolo"')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_string('echo "#')
|
||||||
|
wait_for { session.content }.to eq('echo "#yolo"')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
60
spec/strategies/match_prev_cmd_spec.rb
Normal file
60
spec/strategies/match_prev_cmd_spec.rb
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
describe 'match_prev_cmd strategy' do
|
||||||
|
let(:session) { TerminalSession.new }
|
||||||
|
|
||||||
|
before do
|
||||||
|
session.run_command('source zsh-autosuggestions.zsh')
|
||||||
|
session.run_command('ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd')
|
||||||
|
session.run_command('fc -p')
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
session.destroy
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with some history entries' do
|
||||||
|
before do
|
||||||
|
session.run_command('echo what')
|
||||||
|
session.run_command('ls foo')
|
||||||
|
session.run_command('echo what')
|
||||||
|
session.run_command('ls bar')
|
||||||
|
session.run_command('ls baz')
|
||||||
|
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'suggests nothing if prefix does not match' do
|
||||||
|
session.send_string('ls q')
|
||||||
|
wait_for { session.content }.to eq('ls q')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'suggests the most recent matching history item' do
|
||||||
|
session.send_string('ls')
|
||||||
|
wait_for { session.content }.to eq('ls baz')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'suggests the most recent after the previous command' do
|
||||||
|
session.run_command('echo what')
|
||||||
|
session.clear
|
||||||
|
|
||||||
|
session.send_string('ls')
|
||||||
|
wait_for { session.content }.to eq('ls bar')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a multiline hist entry' do
|
||||||
|
before do
|
||||||
|
session.send_string('echo "')
|
||||||
|
session.send_keys('enter')
|
||||||
|
session.send_string('"')
|
||||||
|
session.send_keys('enter')
|
||||||
|
|
||||||
|
session.clear
|
||||||
|
end
|
||||||
|
|
||||||
|
it do
|
||||||
|
session.send_keys('e')
|
||||||
|
wait_for { session.content }.to eq "echo \"\n\""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,56 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
source "${0:a:h}/../test_helper.zsh"
|
|
||||||
|
|
||||||
oneTimeSetUp() {
|
|
||||||
source_autosuggestions
|
|
||||||
}
|
|
||||||
|
|
||||||
testNoMatch() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
ls foo
|
|
||||||
ls bar
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'foo' \
|
|
||||||
''
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls q' \
|
|
||||||
''
|
|
||||||
}
|
|
||||||
|
|
||||||
testBasicMatches() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
ls foo
|
|
||||||
ls bar
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls f' \
|
|
||||||
'ls foo'
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls b' \
|
|
||||||
'ls bar'
|
|
||||||
}
|
|
||||||
|
|
||||||
testMostRecentMatch() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
ls foo
|
|
||||||
cd bar
|
|
||||||
ls baz
|
|
||||||
cd quux
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls' \
|
|
||||||
'ls baz'
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'cd' \
|
|
||||||
'cd quux'
|
|
||||||
}
|
|
||||||
|
|
||||||
run_tests "$0"
|
|
|
@ -1,74 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
source "${0:a:h}/../test_helper.zsh"
|
|
||||||
|
|
||||||
oneTimeSetUp() {
|
|
||||||
source_autosuggestions
|
|
||||||
|
|
||||||
ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd
|
|
||||||
}
|
|
||||||
|
|
||||||
testNoMatch() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
ls foo
|
|
||||||
ls bar
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'foo' \
|
|
||||||
''
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls q' \
|
|
||||||
''
|
|
||||||
}
|
|
||||||
|
|
||||||
testBasicMatches() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
ls foo
|
|
||||||
ls bar
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls f' \
|
|
||||||
'ls foo'
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls b' \
|
|
||||||
'ls bar'
|
|
||||||
}
|
|
||||||
|
|
||||||
testMostRecentMatch() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
ls foo
|
|
||||||
cd bar
|
|
||||||
ls baz
|
|
||||||
cd quux
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls' \
|
|
||||||
'ls baz'
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'cd' \
|
|
||||||
'cd quux'
|
|
||||||
}
|
|
||||||
|
|
||||||
testMatchMostRecentAfterPreviousCmd() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
echo what
|
|
||||||
ls foo
|
|
||||||
ls bar
|
|
||||||
echo what
|
|
||||||
ls baz
|
|
||||||
ls quux
|
|
||||||
echo what
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'ls' \
|
|
||||||
'ls baz'
|
|
||||||
}
|
|
||||||
|
|
||||||
run_tests "$0"
|
|
|
@ -1,102 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
source "${0:a:h}/test_helper.zsh"
|
|
||||||
|
|
||||||
oneTimeSetUp() {
|
|
||||||
source_autosuggestions
|
|
||||||
}
|
|
||||||
|
|
||||||
assertBackslashSuggestion() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
echo "hello\nworld"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'echo "hello\' \
|
|
||||||
'echo "hello\nworld"'
|
|
||||||
}
|
|
||||||
|
|
||||||
assertDoubleBackslashSuggestion() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
echo "\\"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'echo "\\' \
|
|
||||||
'echo "\\"'
|
|
||||||
}
|
|
||||||
|
|
||||||
assertTildeSuggestion() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
cd ~/something
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'cd' \
|
|
||||||
'cd ~/something'
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'cd ~' \
|
|
||||||
'cd ~/something'
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'cd ~/s' \
|
|
||||||
'cd ~/something'
|
|
||||||
}
|
|
||||||
|
|
||||||
assertTildeSuggestionWithExtendedGlob() {
|
|
||||||
setopt local_options extended_glob
|
|
||||||
|
|
||||||
assertTildeSuggestion
|
|
||||||
}
|
|
||||||
|
|
||||||
assertParenthesesSuggestion() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
echo "$(ls foo)"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'echo "$(' \
|
|
||||||
'echo "$(ls foo)"'
|
|
||||||
}
|
|
||||||
|
|
||||||
assertSquareBracketsSuggestion() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
echo "$history[123]"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'echo "$history[' \
|
|
||||||
'echo "$history[123]"'
|
|
||||||
}
|
|
||||||
|
|
||||||
assertHashSuggestion() {
|
|
||||||
set_history <<-'EOF'
|
|
||||||
echo "#yolo"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
assertSuggestion \
|
|
||||||
'echo "#' \
|
|
||||||
'echo "#yolo"'
|
|
||||||
}
|
|
||||||
|
|
||||||
testSpecialCharsForAllStrategies() {
|
|
||||||
local strategies
|
|
||||||
strategies=(
|
|
||||||
"default"
|
|
||||||
"match_prev_cmd"
|
|
||||||
)
|
|
||||||
|
|
||||||
for s in $strategies; do
|
|
||||||
ZSH_AUTOSUGGEST_STRATEGY="$s"
|
|
||||||
|
|
||||||
assertBackslashSuggestion
|
|
||||||
assertDoubleBackslashSuggestion
|
|
||||||
assertTildeSuggestion
|
|
||||||
assertTildeSuggestionWithExtendedGlob
|
|
||||||
assertParenthesesSuggestion
|
|
||||||
assertSquareBracketsSuggestion
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
run_tests "$0"
|
|
Loading…
Reference in a new issue