" Tests for popup windows for text properties

source check.vim
CheckFeature popupwin
CheckFeature textprop

source screendump.vim
CheckScreendump

func Test_textprop_popup()
  let lines =<< trim END
	call setline(1, range(1, 100))
	call setline(50, 'some text to work with')
	50
	normal zz
	set scrolloff=0
	call prop_type_add('popupMarker', #{highlight: 'DiffAdd', bufnr: bufnr('%')})
	call prop_add(50, 11, #{
		\ length: 7,
		\ type: 'popupMarker',
		\ bufnr: bufnr('%'),
		\ })
	let winid = popup_create('the text', #{
	      \ pos: 'botleft', 
	      \ textprop: 'popupMarker',
	      \ border: [],
	      \ padding: [0,1,0,1],
	      \ close: 'click',
	      \ })
  END
  call writefile(lines, 'XtestTextpropPopup')
  let buf = RunVimInTerminal('-S XtestTextpropPopup', #{rows: 10})
  call VerifyScreenDump(buf, 'Test_popup_textprop_01', {})

  call term_sendkeys(buf, "zt")
  call VerifyScreenDump(buf, 'Test_popup_textprop_02', {})

  call term_sendkeys(buf, "zzIawe\<Esc>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_03', {})

  call term_sendkeys(buf, "0dw")
  call VerifyScreenDump(buf, 'Test_popup_textprop_04', {})

  call term_sendkeys(buf, "Oinserted\<Esc>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_05', {})

  call term_sendkeys(buf, "k2dd")
  call VerifyScreenDump(buf, 'Test_popup_textprop_06', {})

  call term_sendkeys(buf, "4\<C-E>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_07', {})

  " clean up
  call StopVimInTerminal(buf)
  call delete('XtestTextpropPopup')
endfunc

func Test_textprop_popup_corners()
  let lines =<< trim END
	call setline(1, range(1, 100))
	call setline(50, 'now working with some longer text here')
	50
	normal zz
	set scrolloff=0
	call prop_type_add('popupMarker', #{highlight: 'DiffAdd'})
	call prop_add(50, 23, #{
		\ length: 6,
		\ type: 'popupMarker',
		\ })
	let winid = popup_create('bottom left', #{
	      \ pos: 'botleft', 
	      \ textprop: 'popupMarker',
	      \ textpropwin: win_getid(),
	      \ padding: [0,1,0,1],
	      \ })
	let winid = popup_create('bottom right', #{
	      \ pos: 'botright', 
	      \ textprop: 'popupMarker',
	      \ border: [],
	      \ padding: [0,1,0,1],
	      \ })
	let winid = popup_create('top left', #{
	      \ pos: 'topleft', 
	      \ textprop: 'popupMarker',
	      \ border: [],
	      \ padding: [0,1,0,1],
	      \ })
	let winid = popup_create('top right', #{
	      \ pos: 'topright', 
	      \ textprop: 'popupMarker',
	      \ padding: [0,1,0,1],
	      \ })
  END
  call writefile(lines, 'XtestTextpropPopupCorners')
  let buf = RunVimInTerminal('-S XtestTextpropPopupCorners', #{rows: 12})
  call VerifyScreenDump(buf, 'Test_popup_textprop_corn_1', {})

  call term_sendkeys(buf, "0dw")
  call VerifyScreenDump(buf, 'Test_popup_textprop_corn_2', {})

  call term_sendkeys(buf, "46Goextra\<Esc>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_corn_3', {})

  call term_sendkeys(buf, "u")
  call term_sendkeys(buf, ":\<CR>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_corn_4', {})

  call term_sendkeys(buf, ":vsplit foo\<CR>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_corn_5', {})

  call term_sendkeys(buf, ":only!\<CR>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_corn_6', {})

  " clean up
  call StopVimInTerminal(buf)
  call delete('XtestTextpropPopupCorners')
endfunc

func Test_textprop_popup_offsets()
  let lines =<< trim END
	call setline(1, range(1, 100))
	call setline(50, 'now working with some longer text here')
	50
	normal zz
	set scrolloff=0
	call prop_type_add('popupMarker', #{highlight: 'DiffAdd'})
	call prop_add(50, 23, #{
		\ length: 6,
		\ type: 'popupMarker',
		\ })
	let winid = popup_create('bottom left', #{
	      \ pos: 'botleft', 
	      \ line: -1,
	      \ col: 2,
	      \ textprop: 'popupMarker',
	      \ padding: [0,1,0,1],
	      \ })
	let winid = popup_create('bottom right', #{
	      \ pos: 'botright', 
	      \ line: -1,
	      \ col: -2,
	      \ textprop: 'popupMarker',
	      \ border: [],
	      \ padding: [0,1,0,1],
	      \ })
	let winid = popup_create('top left', #{
	      \ pos: 'topleft', 
	      \ line: 1,
	      \ col: 2,
	      \ textprop: 'popupMarker',
	      \ border: [],
	      \ padding: [0,1,0,1],
	      \ })
	let winid = popup_create('top right', #{
	      \ pos: 'topright', 
	      \ line: 1,
	      \ col: -2,
	      \ textprop: 'popupMarker',
	      \ padding: [0,1,0,1],
	      \ })
  END
  call writefile(lines, 'XtestTextpropPopupOffset')
  let buf = RunVimInTerminal('-S XtestTextpropPopupOffset', #{rows: 12})
  call VerifyScreenDump(buf, 'Test_popup_textprop_off_1', {})

  " test that removing the text property closes the popups
  call term_sendkeys(buf, ":call prop_clear(50)\<CR>")
  call VerifyScreenDump(buf, 'Test_popup_textprop_off_2', {})

  " clean up
  call StopVimInTerminal(buf)
  call delete('XtestTextpropPopupOffset')
endfunc


" vim: shiftwidth=2 sts=2
