summaryrefslogtreecommitdiff
path: root/home-config/zsh/zsh-autosuggestions/spec/integrations
diff options
context:
space:
mode:
Diffstat (limited to 'home-config/zsh/zsh-autosuggestions/spec/integrations')
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb14
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb43
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb14
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb12
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb13
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb80
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb39
-rw-r--r--home-config/zsh/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb24
8 files changed, 239 insertions, 0 deletions
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb
new file mode 100644
index 0000000..94bd24b
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/auto_cd_spec.rb
@@ -0,0 +1,14 @@
+describe 'with `AUTO_CD` option set' do
+ let(:after_sourcing) do
+ -> {
+ session.run_command('setopt AUTO_CD')
+ session.run_command('autoload compinit && compinit')
+ }
+ end
+
+ it 'directory names are still completed' do
+ session.send_string('sr')
+ session.send_keys('C-i')
+ wait_for { session.content }.to eq('src/')
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb
new file mode 100644
index 0000000..41ff267
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/bracketed_paste_magic_spec.rb
@@ -0,0 +1,43 @@
+describe 'pasting using bracketed-paste-magic' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('autoload -Uz bracketed-paste-magic').
+ run_command('zle -N bracketed-paste bracketed-paste-magic')
+ end
+ end
+
+ context 'with suggestions disabled while pasting' do
+ before do
+ session.
+ run_command('bpm_init() { zle autosuggest-disable }').
+ run_command('bpm_finish() { zle autosuggest-enable }').
+ run_command('zstyle :bracketed-paste-magic paste-init bpm_init').
+ run_command('zstyle :bracketed-paste-magic paste-finish bpm_finish')
+ end
+
+ it 'does not show an incorrect suggestion' do
+ with_history('echo hello') do
+ session.paste_string("echo #{'a' * 60}")
+ sleep 1
+ expect(session.content).to eq("echo #{'a' * 60}")
+ end
+ end
+ end
+
+ context 'with `bracketed-paste` added to the list of widgets that clear the suggestion' do
+ let(:options) { ['ZSH_AUTOSUGGEST_CLEAR_WIDGETS+=(bracketed-paste)'] }
+
+ it 'does not retain an old suggestion' do
+ with_history ('echo foo') do
+ session.send_string('echo ')
+ wait_for { session.content }.to eq('echo foo')
+ session.paste_string('bar')
+ wait_for { session.content }.to eq('echo bar')
+ session.send_keys('C-a') # Any cursor movement works
+ sleep 1
+ expect(session.content).to eq('echo bar')
+ end
+ end
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb
new file mode 100644
index 0000000..b8abb37
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/client_zpty_spec.rb
@@ -0,0 +1,14 @@
+describe 'a running zpty command' do
+ let(:before_sourcing) { -> { session.run_command('zmodload zsh/zpty && zpty -b kitty cat') } }
+
+ context 'when using `completion` strategy' do
+ let(:options) { ["ZSH_AUTOSUGGEST_STRATEGY=completion"] }
+
+ it 'is not affected' do
+ session.send_keys('a').send_keys('C-h')
+ session.run_command('zpty -t kitty; echo $?')
+
+ wait_for { session.content }.to end_with("\n0")
+ end
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb
new file mode 100644
index 0000000..c3dd671
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/glob_subst_spec.rb
@@ -0,0 +1,12 @@
+describe 'with `GLOB_SUBST` option set' do
+ let(:after_sourcing) do
+ -> {
+ session.run_command('setopt GLOB_SUBST')
+ }
+ end
+
+ it 'error messages are not printed' do
+ session.send_string('[[')
+ wait_for { session.content }.to eq('[[')
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb
new file mode 100644
index 0000000..8b420f0
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/rebound_bracket_spec.rb
@@ -0,0 +1,13 @@
+describe 'rebinding [' do
+ context 'initialized before sourcing the plugin' do
+ before do
+ session.run_command("function [ { $commands[\\[] \"$@\" }")
+ session.clear_screen
+ end
+
+ it 'executes the custom behavior and the built-in behavior' do
+ session.send_string('asdf')
+ wait_for { session.content }.to eq('asdf')
+ end
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb
new file mode 100644
index 0000000..0a295c2
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/vi_mode_spec.rb
@@ -0,0 +1,80 @@
+describe 'when using vi mode' do
+ let(:before_sourcing) do
+ -> do
+ session.run_command('bindkey -v')
+ end
+ end
+
+ describe 'moving the cursor after exiting insert mode' do
+ it 'should not clear the current suggestion' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('h')
+
+ wait_for { session.content }.to eq('foobar foo')
+ end
+ end
+ end
+
+ describe '`vi-forward-word-end`' do
+ it 'should accept through the end of the current word' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('e'). # vi-forward-word-end
+ send_keys('a'). # vi-add-next
+ send_string('baz')
+
+ wait_for { session.content }.to eq('foobarbaz')
+ end
+ end
+ end
+
+ describe '`vi-forward-word`' do
+ it 'should accept through the first character of the next word' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('w'). # vi-forward-word
+ send_keys('a'). # vi-add-next
+ send_string('az')
+
+ wait_for { session.content }.to eq('foobar faz')
+ end
+ end
+ end
+
+ describe '`vi-find-next-char`' do
+ it 'should accept through the next occurrence of the character' do
+ with_history('foobar foo') do
+ session.
+ send_string('foo').
+ send_keys('escape').
+ send_keys('f'). # vi-find-next-char
+ send_keys('o').
+ send_keys('a'). # vi-add-next
+ send_string('b')
+
+ wait_for { session.content }.to eq('foobar fob')
+ end
+ end
+ end
+
+ describe '`vi-delete`' do
+ it 'should be able to remove the last character in the buffer' do
+ skip 'deleting last char did not work below zsh version 5.0.8' if session.zsh_version < Gem::Version.new('5.0.8')
+
+ session.
+ send_string('echo foo').
+ send_keys('escape').
+ send_keys('d').
+ send_keys('l')
+
+ wait_for { session.content }.to eq('echo fo')
+ end
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb
new file mode 100644
index 0000000..61dfc2d
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/wrapped_widget_spec.rb
@@ -0,0 +1,39 @@
+describe 'a wrapped widget' do
+ let(:widget) { 'backward-delete-char' }
+
+ context 'initialized before sourcing the plugin' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command("_orig_#{widget}() { zle .#{widget} }").
+ run_command("zle -N orig-#{widget} _orig_#{widget}").
+ run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }").
+ run_command("zle -N #{widget} #{widget}-magic")
+ end
+ end
+
+ it 'executes the custom behavior and the built-in behavior' do
+ with_history('foobar', 'foodar') do
+ session.send_string('food').send_keys('C-h')
+ wait_for { session.content }.to eq('foobar')
+ end
+ end
+ end
+
+ context 'initialized after sourcing the plugin' do
+ before do
+ session.
+ run_command("zle -N orig-#{widget} ${widgets[#{widget}]#*:}").
+ run_command("#{widget}-magic() { zle orig-#{widget}; BUFFER+=b }").
+ run_command("zle -N #{widget} #{widget}-magic").
+ clear_screen
+ end
+
+ it 'executes the custom behavior and the built-in behavior' do
+ with_history('foobar', 'foodar') do
+ session.send_string('food').send_keys('C-h')
+ wait_for { session.content }.to eq('foobar')
+ end
+ end
+ end
+end
diff --git a/home-config/zsh/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb b/home-config/zsh/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb
new file mode 100644
index 0000000..12cfbc7
--- /dev/null
+++ b/home-config/zsh/zsh-autosuggestions/spec/integrations/zle_input_stack_spec.rb
@@ -0,0 +1,24 @@
+describe 'using `zle -U`' do
+ let(:before_sourcing) do
+ -> do
+ session.
+ run_command('_zsh_autosuggest_strategy_test() { sleep 1; _zsh_autosuggest_strategy_history "$1" }').
+ run_command('foo() { zle -U - "echo hello" }; zle -N foo; bindkey ^B foo')
+ end
+ end
+
+ let(:options) { ['unset ZSH_AUTOSUGGEST_USE_ASYNC', 'ZSH_AUTOSUGGEST_STRATEGY=test'] }
+
+ # TODO: This is only possible with the $KEYS_QUEUED_COUNT widget parameter, coming soon...
+ xit 'does not fetch a suggestion for every inserted character' do
+ session.send_keys('C-b')
+ wait_for { session.content }.to eq('echo hello')
+ end
+
+ it 'shows a suggestion when the widget completes' do
+ with_history('echo hello world') do
+ session.send_keys('C-b')
+ wait_for { session.content(esc_seqs: true) }.to match(/\Aecho hello\e\[[0-9]+m world/)
+ end
+ end
+end