# 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 ' goes to first non-whitespace char' do initial <<-EOF justified indented EOF type '!' final <<-EOF justified !indented EOF end specify 'copy and paste' do initial <<-EOF copy me EOF type '' final <<-EOF copy me copy me EOF end specify 'CTRL+ARROW jumps by word' do initial <<-EOF one two three four EOF type 'XYZ' final <<-EOF one Xtwo ZYthree four EOF end end describe 'Selecting' do specify 'select all and replace' do initial <<-EOF select me EOF type 'gone' final <<-EOF gone EOF end specify 'paste over selection' do initial <<-EOF cut me and paste over me EOF 7.times { type '' } type '' 10.times { type '' } 7.times { type '' } type '' 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 '' } type '' 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 '' } type '' 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 '' } type '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 'XY' 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 'x' final <<-EOF x! EOF end specify 'SHIFT+HOME selects line, even if off-screen' do initial <<-EOF !line line line line EOF type '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 ' type '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 '' type '!' final <<-EOF line1 !line3 line4 EOF end specify 'select wrapped line above' do initial <<-EOF line1 line2 line3 line4 EOF type '' type '!' final <<-EOF line1 !line3 line4 EOF end specify ' goes to end of wrapped line' do initial <<-EOF line line line line EOF type '!' final <<-EOF line! line line line EOF end specify ' goes to beginning of wrapped line' do initial <<-EOF line line line line EOF type '!' 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 ':copen' pane_type = vim.command 'echo &buftype' expect(pane_type).to eq 'quickfix' # Focus back to file type '' 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 ':Vexplore' buffer_id = vim.command "echo bufnr('%')" expect(buffer_id).to eq '2' # Close Netrw pane type '' buffer_id = vim.command "echo bufnr('%')" expect(buffer_id).to eq '1' end end