let s:suite = themis#suite('history')
let s:assert = themis#helper('assert')

function! s:suite.before()
  :1,$ delete
  map /  <Plug>(incsearch-forward)
  map ?  <Plug>(incsearch-backward)
  map g/ <Plug>(incsearch-stay)
  set history=5
endfunction

function! s:suite.before_each()
  " call histdel('search') " Segmentation fault (core dumped)
  silent! exec "normal" "/\<Space>\<CR>"
endfunction

function! s:suite.after()
  unmap /
  unmap ?
  unmap g/
  set history&
  :1,$ delete
endfunction

function! s:suite.commandline_history_forward()
  call s:assert.equals(histget('search', -1), ' ')
  silent! exec "normal" "/pattern\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern')
  silent! exec "normal" "/pattern/e\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern/e')
endfunction

function! s:suite.commandline_history_backward()
  call s:assert.equals(histget('search', -1), ' ')
  silent! exec "normal" "?pattern\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern')
  silent! exec "normal" "?pattern/e\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern/e')
endfunction

function! s:suite.commandline_history_stay()
  call s:assert.equals(histget('search', -1), ' ')
  silent! exec "normal" "g/pattern\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern')
  silent! exec "normal" "g/pattern/e\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern/e')
  silent! exec "normal" "g/pattern/e\<Tab>\<CR>"
  call s:assert.equals(histget('search', -1), 'pattern/e')
endfunction