aboutsummaryrefslogtreecommitdiff
path: root/spec/heresy_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/heresy_spec.rb')
-rw-r--r--spec/heresy_spec.rb273
1 files changed, 273 insertions, 0 deletions
diff --git a/spec/heresy_spec.rb b/spec/heresy_spec.rb
new file mode 100644
index 0000000..ce19704
--- /dev/null
+++ b/spec/heresy_spec.rb
@@ -0,0 +1,273 @@
+# Tip of the hat to terryma/vim-multiple-cursors for this style
+# of testing Vim.
+require 'spec_helper'
+
+describe 'Basic editing' do
+ specify 'writing simple text' do
+ initial <<-EOF
+ EOF
+
+ type 'hello world'
+
+ final <<-EOF
+ hello world
+ EOF
+ end
+
+ specify '<Home> goes to first non-whitespace char' do
+ initial <<-EOF
+ justified
+ indented
+ EOF
+
+ type '<Down><End><Home>!'
+
+ final <<-EOF
+ justified
+ !indented
+ EOF
+ end
+
+ specify 'copy and paste' do
+ initial <<-EOF
+ copy me
+ EOF
+
+ type '<S-End><C-c><Esc><Space><C-v>'
+
+ final <<-EOF
+ copy me copy me
+ EOF
+ end
+
+ specify 'CTRL+ARROW jumps by word' do
+ initial <<-EOF
+ one two three four
+ EOF
+
+ type '<C-Right>X<C-Right>Y<C-Left>Z'
+
+ final <<-EOF
+ one Xtwo ZYthree four
+ EOF
+ end
+end
+
+describe 'Selecting' do
+ specify 'select all and replace' do
+ initial <<-EOF
+ select me
+ EOF
+
+ type '<C-a>gone'
+
+ final <<-EOF
+ gone
+ EOF
+ end
+
+ specify 'paste over selection' do
+ initial <<-EOF
+ cut me and paste over me
+ EOF
+
+ 7.times { type '<S-Right>' }
+ type '<C-x>'
+ 10.times { type '<Right>' }
+ 7.times { type '<S-Right>' }
+ type '<C-v>'
+
+ final <<-EOF
+ and paste cut me
+ EOF
+ end
+
+ specify 'selecting from middle of line to end' do
+ initial <<-EOF
+ a line of text
+ EOF
+
+ 6.times { type '<Right>' }
+ type '<S-End>'
+ type '!'
+
+ final <<-EOF
+ a line!
+ EOF
+ end
+
+ specify 'selecting from middle of line to beginning' do
+ initial <<-EOF
+ a line of text
+ EOF
+
+ 7.times { type '<Right>' }
+ type '<S-Home>'
+ type '!'
+
+ final <<-EOF
+ !of text
+ EOF
+ end
+
+ specify 'CTRL+D selects the word under the cursor' do
+ initial <<-EOF
+ a line of text
+ EOF
+
+ 4.times { type '<Right>' }
+ type '<C-D>X'
+
+ final <<-EOF
+ a X of text
+ EOF
+ end
+end
+
+describe 'Home/End behaviour for long, non-wrapped code lines' do
+ before(:each) do
+ # We need a small screen so that lines go off the edge of it.
+ @vim_options = [
+ # A single buffer can't be resized, so create a split of the buffer
+ 'vsplit',
+ 'vertical resize 6'
+ ]
+ end
+
+ specify 'HOME/END move to start/end of line off-screen' do
+ initial <<-EOF
+ line line line line
+ EOF
+
+ type '<End>X<Home>Y'
+
+ final <<-EOF
+ Yline line line lineX
+ EOF
+ end
+
+ specify 'SHIFT+END selects line, even if off-screen' do
+ initial <<-EOF
+ line line line line!
+ EOF
+
+ type '<S-End><S-Left>x'
+
+ final <<-EOF
+ x!
+ EOF
+ end
+
+ specify 'SHIFT+HOME selects line, even if off-screen' do
+ initial <<-EOF
+ !line line line line
+ EOF
+
+ type '<End><S-Home><S-Right>x'
+
+ final <<-EOF
+ !x
+ EOF
+ end
+end
+
+describe 'Wrapped text' do
+ before(:each) do
+ @vim_options = [
+ # A single buffer can't be resized, so create a split of the buffer
+ 'vsplit',
+ 'vertical resize 6'
+ ]
+ use_extension 'txt'
+ end
+
+ specify 'move up/down one wrapped line' do
+ initial <<-EOF
+ line line line line
+ EOF
+
+ type '<Down><Down>down '
+ type '<Up>up '
+
+ final <<-EOF
+ line line up down line line
+ EOF
+ end
+
+ specify 'select wrapped line below' do
+ initial <<-EOF
+ line1 line2 line3 line4
+ EOF
+
+ type '<Down><S-Down><S-Down>'
+ type '!'
+
+ final <<-EOF
+ line1 !line3 line4
+ EOF
+ end
+
+ specify 'select wrapped line above' do
+ initial <<-EOF
+ line1 line2 line3 line4
+ EOF
+
+ type '<Down><Down><S-Up><S-Up>'
+ type '!'
+
+ final <<-EOF
+ line1 !line3 line4
+ EOF
+ end
+
+ specify '<End> goes to end of wrapped line' do
+ initial <<-EOF
+ line line line line
+ EOF
+
+ type '<End>!'
+
+ final <<-EOF
+ line! line line line
+ EOF
+ end
+
+ specify '<Home> goes to beginning of wrapped line' do
+ initial <<-EOF
+ line line line line
+ EOF
+
+ type '<Down><Home>!'
+
+ final <<-EOF
+ line !line line line
+ EOF
+ end
+end
+
+describe 'Pane control' do
+ specify 'moving to another pane' do
+ # Open Quickfix window (auto focuses to it)
+ type '<M-;>:copen<CR>'
+ pane_type = vim.command 'echo &buftype'
+ expect(pane_type).to eq 'quickfix'
+
+ # Focus back to file
+ type '<M-Up>'
+ pane_type = vim.command 'echo &buftype'
+
+ expect(pane_type).to eq ''
+ end
+
+ specify 'closing a pane' do
+ # Open Netrw file manager in a sidebar
+ type '<M-;>Vexplore<CR>'
+ buffer_id = vim.command "echo bufnr('%')"
+ expect(buffer_id).to eq '2'
+
+ # Close Netrw pane
+ type '<C-w>'
+ buffer_id = vim.command "echo bufnr('%')"
+ expect(buffer_id).to eq '1'
+ end
+end