require_relative '../../helper' shared :common_key_spec do def keys(*names, desc) names.each do |name| title = "%-6s\t%s" % [name, desc] it(title){ yield(name) } end end alias key keys # Currently we skip specs that rely on specific window size or font. # Simply add a spec and put `skip` inside as a kind of TODO marker. def skip 'skip spec until we find good way to implement it'.should.not.be.nil end end shared :key_spec do behaves_like :with_buffer behaves_like :common_key_spec end shared :destructive_key_spec do behaves_like :destructive_mode behaves_like :common_key_spec end __END__ # Show the buffer to get accurate behaviour VER.spec keymap: 'vim', hidden: false do describe 'Keymap for VIM' do describe 'Control mode changing' do behaves_like :destructive_mode it 'changes at end of line with ' do type 'A' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 41 insert.index.should == '1.0 lineend' buffer.minor_mode?(:insert).should != nil end it 'changes at next char with ' do type 'a' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 41 insert.index.should == '1.1' buffer.minor_mode?(:insert).should != nil end it 'changes at home of line with ' do insert.index = '1.10' type 'I' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 41 insert.index.should == '1.0' buffer.minor_mode?(:insert).should != nil end it 'searches expression forward with ' do type '/officiis' # Make sure input is handled correctly. # If the MiniBuffer wasn't invoked, we'll have garbage in the Buffer. buffer.value.chomp.should == BUFFER_VALUE # all matches should be tagged. ranges = buffer.tag(VER::Methods::Search::TAG).ranges ranges.should == [ range( '2.11', '2.19'), range('13.15', '13.23'), range('18.19', '18.27'), range('28.14', '28.22'), ] # must be at position of first match. insert.index.should == ranges.first.first # find all successive matches ranges.each do |range| insert.index.should == range.first type 'n' end # last match, so no movement insert.index.should == ranges.last.first # go back again through all matches ranges.reverse_each do |range| insert.index.should == range.first type 'N' end # first match, so no movement insert.index.should == ranges.first.first end it 'removes the search tag with ' do tag = buffer.tag(VER::Methods::Search::TAG) tag.ranges.should.be.empty type '/officiis' tag.ranges.should.not.be.empty type 'g/' tag.ranges.should.be.empty end it 'searches the next word under the cursor with ' do insert.index = '1.25' type '*' insert.index.should == '5.5' end end describe 'Matching brace related' do behaves_like :destructive_mode it 'goes to matching brace with (%)' do buffer.value = '(Veniam (vitae (ratione (facere))))' buffer.insert = '1.0' type '' insert.index.should == '1.34' end end describe 'Control mode deletion' do behaves_like :destructive_mode it 'changes movement with prefix' do type 'cl' clipboard.should == 'I' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 40 buffer.minor_mode?(:insert).should != nil insert.index.should == '1.0' end it 'changes to right end of next word with ' do type 'cw' clipboard.should == "Inventore" buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 32 buffer.minor_mode?(:insert).should != nil insert.index.should == '1.0' end it 'changes a line with ' do type 'cc' clipboard.should == "Inventore voluptatibus dolorem assumenda.\n" buffer.count('1.0', 'end', :lines).should == 40 buffer.minor_mode?(:insert).should != nil insert.index.should == '1.0' end it 'kills movement with prefix' do insert.index = '1.1' type 'dl' clipboard.should == 'n' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 40 buffer.minor_mode?(:insert).should == nil insert.index.should == '1.1' end it 'kills a line with ' do type 'dd' clipboard.should == "Inventore voluptatibus dolorem assumenda.\n" buffer.count('1.0', 'end', :lines).should == 40 buffer.minor_mode?(:insert).should == nil insert.index.should == '1.0' end it 'changes to end of line with ' do insert.index = '1.1' type 'C' clipboard.should == "nventore voluptatibus dolorem assumenda." buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 1 buffer.minor_mode?(:insert).should != nil insert.index.should == '1.1' end it 'kills to end of line with ' do insert.index = '1.1' type 'D' clipboard.should == "nventore voluptatibus dolorem assumenda." buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 1 buffer.minor_mode?(:insert).should == nil insert.index.should == '1.1' end it 'kills next char with ' do insert.index = '1.1' type 'x' clipboard.should == 'n' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 40 buffer.minor_mode?(:insert).should == nil insert.index.should == '1.1' end it 'kills previous char with ' do insert.index = '1.1' type 'X' clipboard.should == 'I' buffer.count('1.0 linestart', '1.0 lineend', :displaychars).should == 40 buffer.minor_mode?(:insert).should == nil insert.index.should == '1.0' end end end end