" Test commands that jump somewhere.

" Create a new buffer using "lines" and place the cursor on the word after the
" first occurrence of return and invoke "cmd". The cursor should now be
" positioned at the given line and col.
func XTest_goto_decl(cmd, lines, line, col)
  new
  call setline(1, a:lines)
  /return/
  normal! W
  execute 'norm! ' . a:cmd
  call assert_equal(a:line, line('.'))
  call assert_equal(a:col, col('.'))
  quit!
endfunc

func Test_gD()
  let lines = [
	\ 'int x;',
	\ '',
	\ 'int func(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gD', lines, 1, 5)
endfunc

func Test_gD_too()
  let lines = [
	\ 'Filename x;',
	\ '',
	\ 'int Filename',
	\ 'int func() {',
	\ '  Filename x;',
	\ '  return x;',
	\ ]
  call XTest_goto_decl('gD', lines, 1, 10)
endfunc

func Test_gD_comment()
  let lines = [
	\ '/* int x; */',
	\ 'int x;',
	\ '',
	\ 'int func(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gD', lines, 2, 5)
endfunc

func Test_gD_inline_comment()
  let lines = [
	\ 'int y /* , x */;',
	\ 'int x;',
	\ '',
	\ 'int func(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gD', lines, 2, 5)
endfunc

func Test_gD_string()
  let lines = [
	\ 'char *s[] = "x";',
	\ 'int x = 1;',
	\ '',
	\ 'int func(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gD', lines, 2, 5)
endfunc

func Test_gD_string_same_line()
  let lines = [
	\ 'char *s[] = "x", int x = 1;',
	\ '',
	\ 'int func(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gD', lines, 1, 22)
endfunc

func Test_gD_char()
  let lines = [
	\ "char c = 'x';",
	\ 'int x = 1;',
	\ '',
	\ 'int func(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gD', lines, 2, 5)
endfunc

func Test_gd()
  let lines = [
	\ 'int x;',
	\ '',
	\ 'int func(int x)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 3, 14)
endfunc

func Test_gd_not_local()
  let lines = [
	\ 'int func1(void)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ '',
	\ 'int func2(int x)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 3, 10)
endfunc

func Test_gd_kr_style()
  let lines = [
	\ 'int func(x)',
	\ '  int x;',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 2, 7)
endfunc

func Test_gd_missing_braces()
  let lines = [
	\ 'def func1(a)',
	\ '  a + 1',
	\ 'end',
	\ '',
	\ 'a = 1',
	\ '',
	\ 'def func2()',
	\ '  return a',
	\ 'end',
	\ ]
  call XTest_goto_decl('gd', lines, 1, 11)
endfunc

func Test_gd_comment()
  let lines = [
	\ 'int func(void)',
	\ '{',
	\ '  /* int x; */',
	\ '  int x;',
	\ '  return x;',
	\ '}',
	\]
  call XTest_goto_decl('gd', lines, 4, 7)
endfunc

func Test_gd_comment_in_string()
  let lines = [
	\ 'int func(void)',
	\ '{',
	\ '  char *s ="//"; int x;',
	\ '  int x;',
	\ '  return x;',
	\ '}',
	\]
  call XTest_goto_decl('gd', lines, 3, 22)
endfunc

func Test_gd_string_in_comment()
  set comments=
  let lines = [
	\ 'int func(void)',
	\ '{',
	\ '  /* " */ int x;',
	\ '  int x;',
	\ '  return x;',
	\ '}',
	\]
  call XTest_goto_decl('gd', lines, 3, 15)
  set comments&
endfunc

func Test_gd_inline_comment()
  let lines = [
	\ 'int func(/* x is an int */ int x)',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 1, 32)
endfunc

func Test_gd_inline_comment_only()
  let lines = [
	\ 'int func(void) /* one lonely x */',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 3, 10)
endfunc

func Test_gd_inline_comment_body()
  let lines = [
	\ 'int func(void)',
	\ '{',
	\ '  int y /* , x */;',
	\ '',
	\ '  for (/* int x = 0 */; y < 2; y++);',
	\ '',
	\ '  int x = 0;',
	\ '',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 7, 7)
endfunc

func Test_gd_trailing_multiline_comment()
  let lines = [
	\ 'int func(int x) /* x is an int */',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 1, 14)
endfunc

func Test_gd_trailing_comment()
  let lines = [
	\ 'int func(int x) // x is an int',
	\ '{',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 1, 14)
endfunc

func Test_gd_string()
  let lines = [
	\ 'int func(void)',
	\ '{',
	\ '  char *s = "x";',
	\ '  int x = 1;',
	\ '',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 4, 7)
endfunc

func Test_gd_string_only()
  let lines = [
	\ 'int func(void)',
	\ '{',
	\ '  char *s = "x";',
	\ '',
	\ '  return x;',
	\ '}',
	\ ]
  call XTest_goto_decl('gd', lines, 5, 10)
endfunc
