123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- -- ShaDa history saving/reading support
- local helpers = require('test.functional.helpers')(after_each)
- local nvim_command, funcs, meths, nvim_feed, eq =
- helpers.command, helpers.funcs, helpers.meths, helpers.feed, helpers.eq
- local assert_alive = helpers.assert_alive
- local shada_helpers = require('test.functional.shada.helpers')
- local reset, clear = shada_helpers.reset, shada_helpers.clear
- describe('ShaDa support code', function()
- before_each(reset)
- after_each(clear)
- it('is able to dump and read back command-line history', function()
- nvim_command('set shada=\'0')
- nvim_feed(':" Test\n')
- nvim_command('wshada')
- reset()
- nvim_command('set shada=\'0')
- nvim_command('rshada')
- eq('" Test', funcs.histget(':', -1))
- end)
- it('is able to dump and read back 2 items in command-line history', function()
- nvim_command('set shada=\'0 history=2')
- nvim_feed(':" Test\n')
- nvim_feed(':" Test 2\n')
- nvim_command('qall')
- reset()
- nvim_command('set shada=\'0 history=2')
- nvim_command('rshada')
- eq('" Test 2', funcs.histget(':', -1))
- eq('" Test', funcs.histget(':', -2))
- nvim_command('qall')
- end)
- it('respects &history when dumping',
- function()
- nvim_command('set shada=\'0 history=1')
- nvim_feed(':" Test\n')
- nvim_feed(':" Test 2\n')
- nvim_command('wshada')
- reset()
- nvim_command('set shada=\'0 history=2')
- nvim_command('rshada')
- eq('" Test 2', funcs.histget(':', -1))
- eq('', funcs.histget(':', -2))
- end)
- it('respects &history when loading',
- function()
- nvim_command('set shada=\'0 history=2')
- nvim_feed(':" Test\n')
- nvim_feed(':" Test 2\n')
- nvim_command('wshada')
- reset()
- nvim_command('set shada=\'0 history=1')
- nvim_command('rshada')
- eq('" Test 2', funcs.histget(':', -1))
- eq('', funcs.histget(':', -2))
- end)
- it('dumps only requested amount of command-line history items', function()
- nvim_command('set shada=\'0,:1')
- nvim_feed(':" Test\n')
- nvim_feed(':" Test 2\n')
- nvim_command('wshada')
- -- Regression test: :wshada should not alter or free history.
- eq('" Test 2', funcs.histget(':', -1))
- eq('" Test', funcs.histget(':', -2))
- reset()
- nvim_command('set shada=\'0')
- nvim_command('rshada')
- eq('" Test 2', funcs.histget(':', -1))
- eq('', funcs.histget(':', -2))
- end)
- it('does not respect number in &shada when loading history', function()
- nvim_command('set shada=\'0')
- nvim_feed(':" Test\n')
- nvim_feed(':" Test 2\n')
- nvim_command('wshada')
- reset()
- nvim_command('set shada=\'0,:1')
- nvim_command('rshada')
- eq('" Test 2', funcs.histget(':', -1))
- eq('" Test', funcs.histget(':', -2))
- end)
- it('dumps and loads all kinds of histories', function()
- nvim_command('debuggreedy')
- nvim_feed(':debug echo "Test"\n" Test 2\nc\n') -- Debug history.
- nvim_feed(':call input("")\nTest 2\n') -- Input history.
- nvim_feed('"="Test"\nyy') -- Expression history.
- nvim_feed('/Test\n') -- Search history
- nvim_feed(':" Test\n') -- Command-line history
- nvim_command('0debuggreedy')
- nvim_command('wshada')
- reset()
- nvim_command('rshada')
- eq('" Test', funcs.histget(':', -1))
- eq('Test', funcs.histget('/', -1))
- eq('"Test"', funcs.histget('=', -1))
- eq('Test 2', funcs.histget('@', -1))
- eq('c', funcs.histget('>', -1))
- end)
- it('dumps and loads last search pattern with offset', function()
- meths.set_option('wrapscan', false)
- funcs.setline('.', {'foo', 'bar--'})
- nvim_feed('gg0/a/e+1\n')
- eq({0, 2, 3, 0}, funcs.getpos('.'))
- nvim_command('wshada')
- reset()
- meths.set_option('wrapscan', false)
- funcs.setline('.', {'foo', 'bar--'})
- nvim_feed('gg0n')
- eq({0, 2, 3, 0}, funcs.getpos('.'))
- eq(1, meths.get_vvar('searchforward'))
- end)
- it('dumps and loads last search pattern with offset and backward direction',
- function()
- meths.set_option('wrapscan', false)
- funcs.setline('.', {'foo', 'bar--'})
- nvim_feed('G$?a?e+1\n')
- eq({0, 2, 3, 0}, funcs.getpos('.'))
- nvim_command('wshada')
- reset()
- meths.set_option('wrapscan', false)
- funcs.setline('.', {'foo', 'bar--'})
- nvim_feed('G$n')
- eq({0, 2, 3, 0}, funcs.getpos('.'))
- eq(0, meths.get_vvar('searchforward'))
- end)
- it('saves v:hlsearch=1', function()
- nvim_command('set hlsearch shada-=h')
- nvim_feed('/test\n')
- eq(1, meths.get_vvar('hlsearch'))
- nvim_command('qall')
- reset()
- eq(1, meths.get_vvar('hlsearch'))
- end)
- it('saves v:hlsearch=0 with :nohl', function()
- nvim_command('set hlsearch shada-=h')
- nvim_feed('/test\n')
- nvim_command('nohlsearch')
- nvim_command('qall')
- reset()
- eq(0, meths.get_vvar('hlsearch'))
- end)
- it('saves v:hlsearch=0 with default &shada', function()
- nvim_command('set hlsearch')
- nvim_feed('/test\n')
- eq(1, meths.get_vvar('hlsearch'))
- nvim_command('qall')
- reset()
- eq(0, meths.get_vvar('hlsearch'))
- end)
- it('dumps and loads last substitute pattern and replacement string', function()
- funcs.setline('.', {'foo', 'bar'})
- nvim_command('%s/f/g/g')
- eq('goo', funcs.getline(1))
- nvim_command('wshada')
- reset()
- funcs.setline('.', {'foo', 'bar'})
- nvim_command('&')
- eq('goo', funcs.getline(1))
- end)
- it('dumps and loads history with UTF-8 characters', function()
- reset()
- nvim_feed(':echo "«"\n')
- nvim_command('qall')
- reset()
- eq('echo "«"', funcs.histget(':', -1))
- end)
- it('dumps and loads replacement with UTF-8 characters',
- function()
- nvim_command('substitute/./«/ge')
- nvim_command('qall!')
- reset()
- funcs.setline('.', {'.'})
- nvim_command('&')
- eq('«', funcs.getline('.'))
- end)
- it('dumps and loads substitute pattern with UTF-8 characters',
- function()
- nvim_command('substitute/«/./ge')
- nvim_command('qall!')
- reset()
- funcs.setline('.', {'«\171'})
- nvim_command('&')
- eq('.\171', funcs.getline('.'))
- end)
- it('dumps and loads search pattern with UTF-8 characters',
- function()
- nvim_command('silent! /«/')
- nvim_command('set shada+=/0')
- nvim_command('qall!')
- reset()
- funcs.setline('.', {'\171«'})
- nvim_command('~&')
- eq('\171', funcs.getline('.'))
- eq('', funcs.histget('/', -1))
- end)
- it('dumps and loads search pattern with 8-bit single-byte',
- function()
- -- \171 is U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK in latin1
- nvim_command('silent! /\171/')
- nvim_command('set shada+=/0')
- nvim_command('qall!')
- reset()
- funcs.setline('.', {'\171«'})
- nvim_command('~&')
- eq('«', funcs.getline('.'))
- eq('', funcs.histget('/', -1))
- end)
- it('does not crash when dumping last search pattern (#10945)', function()
- nvim_command('edit Xtest-functional-shada-history_spec')
- -- Save jump list
- nvim_command('wshada')
- -- Wipe out buffer list (jump list entry gets removed)
- nvim_command('%bwipeout')
- -- Restore jump list
- nvim_command('rshada')
- nvim_command('silent! /pat/')
- nvim_command('au BufNew * echo')
- nvim_command('wshada')
- end)
- it('does not crash when number of history save to zero (#11497)', function()
- nvim_command('set shada=\'10')
- nvim_feed(':" Test\n')
- nvim_command('wshada')
- nvim_command('set shada=\'10,:0')
- nvim_command('wshada')
- assert_alive()
- end)
- end)
|