"{{{ycm
Execute (error param):
  let completed_item = {}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual [], result

Execute (error param, kind != f):
  let completed_item = {'kind': 't'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual [], result

Execute (error param, abbr == ''):
  let completed_item = {'kind': 'f', 'abbr': ''}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual [], result

Execute (fun()):
  let completed_item = {'kind': 'f', 'abbr': 'fun()'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['()'], result

Execute (fun(int)):
  let completed_item = {'kind': 'f', 'abbr': 'fun(int)'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(int)'], result

Execute (fun(struct tm *const)):
  let completed_item = {'kind': 'f', 'abbr': 'fun(struct tm *const)'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(const)'], result

Execute (fun(const char *)):
  let completed_item = {'kind': 'f', 'abbr': 'fun(const char *)'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(char)'], result

Execute (fun(const char **)):
  let completed_item = {'kind': 'f', 'abbr': 'fun(const char **)'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(char)'], result

Execute (fun(const char *a, int b)):
  let completed_item = {'kind': 'f', 'abbr': 'fun(const char *a, int b)'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(a, b)'], result

Execute (fun( const struct tm *restrict, char *restrict  )):
  let completed_item = {'kind': 'f', 'abbr': 'fun( const struct tm *restrict, char *restrict  )'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(restrict, restrict)'], result

Execute (CMP, kind: m):
  let completed_item = {'word': 'CMP', 'menu': '', 'info': ' CMP( a, b )^@', 'kind': 'm', 'abbr': 'CMP( a, b )'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(a, b)'], result
"}}}

"{{{ deoplete
Execute (fun()):
  let completed_item = {'kind': 'f void', 'abbr': 'fun()', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['()'], result

Execute (fun(int)):
  let completed_item = {'kind': 'f void', 'abbr': 'fun(int)', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(int)'], result

Execute (fun(struct tm *const)):
  let completed_item = {'kind': 'f', 'abbr': 'fun(struct tm *const)', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(const)'], result

Execute (fun(const char *)):
  let completed_item = {'kind': 'f void', 'abbr': 'fun(const char *)', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(char)'], result

Execute (fun(const char **)):
  let completed_item = {'kind': 'f void', 'abbr': 'fun(const char **)', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(char)'], result

Execute (fun(const char *a, int b)):
  let completed_item = {'kind': 'f void', 'abbr': 'fun(const char *a, int b)', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(a, b)'], result

Execute (fun( const struct tm *restrict, char *restrict  )):
  let completed_item = {'kind': 'f void', 'abbr': 'fun( const struct tm *restrict, char *restrict  )', 'word': 'fun', 'menu': '[clang] '}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(restrict, restrict)'], result
"}}}

"{{{ clang_complete
Execute (fun()):
  let completed_item = {'kind': 'f', 'menu': 'void fun()', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['()'], result

Execute (fun(int)):
  let completed_item = {'kind': 'f', 'menu': 'void fun(int)', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(int)'], result

Execute (fun(struct tm *const)):
  let completed_item = {'kind': 'f', 'menu': 'void fun(struct tm *const)', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(const)'], result

Execute (fun(const char *)):
  let completed_item = {'kind': 'f', 'menu': 'void fun(const char *)', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(char)'], result

Execute (fun(const char *a, int b)):
  let completed_item = {'kind': 'f', 'menu': 'void fun(const char *a, int b)', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(a, b)'], result

Execute (fun(const char **)):
  let completed_item = {'kind': 'f', 'menu': 'void fun(const char **)', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(char)'], result

Execute (fun( const struct tm *restrict, char *restrict  )):
  let completed_item = {'kind': 'f', 'menu': 'void fun( const struct tm *restrict, char *restrict  )', 'word': 'fun', 'abbr': 'fun'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(restrict, restrict)'], result

Execute (coc.nvim + ccls):
  let completed_item = {'word': 'fun', 'menu': '[LS]', 'user_data': '{"cid":1578967270,"source":"languageserver.ccls","index":0}', 'info': '', 'kind': 'f', 'abbr': 'fun(int x, int y) -> int~'}
  let result = cm_parser#c#parameters(completed_item)
  AssertEqual ['(x, y)'], result
"}}}
