view src/testdir/test_changelist.vim @ 34194:a522c6c0127b v9.1.0047

patch 9.1.0047: issues with temp curwin/buf while cmdwin is open Commit: https://github.com/vim/vim/commit/988f74311c26ea9917e84fbae608de226dba7e5f Author: Sean Dewar <seandewar@users.noreply.github.com> Date: Wed Aug 16 14:17:36 2023 +0100 patch 9.1.0047: issues with temp curwin/buf while cmdwin is open Problem: Things that temporarily change/restore curwin/buf (e.g: win_execute, some autocmds) may break assumptions that curwin/buf is the cmdwin when "cmdwin_type != 0", causing issues. Solution: Expose the cmdwin's real win/buf and check that instead. Also try to ensure these variables are NULL if "cmdwin_type == 0", allowing them to be used directly in most cases without checking cmdwin_type. (Sean Dewar) Alternatively, we could ban win_execute in the cmdwin and audit all places that temporarily change/restore curwin/buf, but I didn't notice any problems arising from allowing this (standard cmdwin restrictions still apply, so things that may actually break the cmdwin are still forbidden). closes: #12819 Signed-off-by: Sean Dewar <seandewar@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 23 Jan 2024 23:00:04 +0100
parents f7a2de8a4ddc
children
line wrap: on
line source

" Tests for the changelist functionality

" When splitting a window the changelist position is wrong.
" Test the changelist position after splitting a window.
" Test for the bug fixed by 7.4.386
func Test_changelist()
  let save_ul = &ul
  enew!
  call append('$', ['1', '2'])
  exe "normal i\<C-G>u"
  exe "normal Gkylpa\<C-G>u"
  set ul=100
  exe "normal Gylpa\<C-G>u"
  set ul=100
  normal gg
  vsplit
  normal g;
  call assert_equal([3, 2], [line('.'), col('.')])
  normal g;
  call assert_equal([2, 2], [line('.'), col('.')])
  call assert_fails('normal g;', 'E662:')
  new
  call assert_fails('normal g;', 'E664:')
  %bwipe!
  let &ul = save_ul
endfunc

" Moving a split should not change its changelist index.
func Test_changelist_index_move_split()
  exe "norm! iabc\<C-G>u\ndef\<C-G>u\nghi"
  vsplit
  normal 99g;
  call assert_equal(0, getchangelist('%')[1])
  wincmd L
  call assert_equal(0, getchangelist('%')[1])
endfunc

" Tests for the getchangelist() function
func Test_changelist_index()
  edit Xgclfile1.txt
  exe "normal iabc\<C-G>u\ndef\<C-G>u\nghi"
  call assert_equal(3, getchangelist('%')[1])
  " Move one step back in the changelist.
  normal 2g;

  hide edit Xgclfile2.txt
  exe "normal iabcd\<C-G>u\ndefg\<C-G>u\nghij"
  call assert_equal(3, getchangelist('%')[1])
  " Move to the beginning of the changelist.
  normal 99g;

  " Check the changelist indices.
  call assert_equal(0, getchangelist('%')[1])
  call assert_equal(1, getchangelist('#')[1])

  bwipe!
  call delete('Xgclfile1.txt')
  call delete('Xgclfile2.txt')
endfunc

func Test_getchangelist()
  bwipe!
  enew
  call assert_equal([], 10->getchangelist())
  call assert_equal([[], 0], getchangelist())

  call writefile(['line1', 'line2', 'line3'], 'Xclistfile1.txt', 'D')
  call writefile(['line1', 'line2', 'line3'], 'Xclistfile2.txt', 'D')

  edit Xclistfile1.txt
  let buf_1 = bufnr()
  exe "normal 1Goline\<C-G>u1.1"
  exe "normal 3Goline\<C-G>u2.1"
  exe "normal 5Goline\<C-G>u3.1"
  normal g;
  call assert_equal([[
	      \ {'lnum' : 2, 'col' : 4, 'coladd' : 0},
	      \ {'lnum' : 4, 'col' : 4, 'coladd' : 0},
	      \ {'lnum' : 6, 'col' : 4, 'coladd' : 0}], 2],
	      \ getchangelist('%'))

  hide edit Xclistfile2.txt
  let buf_2 = bufnr()
  exe "normal 1GOline\<C-G>u1.0"
  exe "normal 2Goline\<C-G>u2.0"
  call assert_equal([[
	      \ {'lnum' : 1, 'col' : 6, 'coladd' : 0},
	      \ {'lnum' : 3, 'col' : 6, 'coladd' : 0}], 2],
	      \ getchangelist('%'))
  hide enew

  call assert_equal([[
	      \ {'lnum' : 2, 'col' : 4, 'coladd' : 0},
	      \ {'lnum' : 4, 'col' : 4, 'coladd' : 0},
	      \ {'lnum' : 6, 'col' : 4, 'coladd' : 0}], 2],
	      \ getchangelist(buf_1))
  call assert_equal([[
	      \ {'lnum' : 1, 'col' : 6, 'coladd' : 0},
	      \ {'lnum' : 3, 'col' : 6, 'coladd' : 0}], 2],
	      \ getchangelist(buf_2))

  bwipe!
endfunc

" vim: shiftwidth=2 sts=2 expandtab