"{{{ycm
Execute (error menu):
  let completed_item = {'menu': 'number'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual [], result

Execute (fn()):
  let completed_item = {'menu': 'fn()'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['()'], result

Execute (fn(other: [?])):
  let completed_item = {'menu': 'fn(other: [?])'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['(other)'], result

Execute (fn(other?: string) -> string):
  let completed_item = {'menu': 'fn(other?: string) -> string'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['(other)'], result

Execute (fn(other: ?) -> string):
  let completed_item = {'menu': 'fn(other: ?) -> string'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['(other)'], result


Execute (fn(test: fn(elt: ?, i: number, array: Array) -> bool, context?: ?) -> bool):
  let completed_item = {'menu': 'fn(test: fn(elt: ?, i: number, array: Array) -> bool, context?: ?) -> bool'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['(test, context)'], result

Execute (fn(test: {elt: string, i: number, array: Array}, context?: ?) -> bool):
  let completed_item = {'menu': 'fn(test: fn(elt: ?, i: number, array: Array) -> bool, context?: ?) -> bool'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['(test, context)'], result

Execute (fn(options: {compressible: bool, extensions: [?], register: ?, source: string, type: string})):
  let completed_item = {'menu': 'fn(options: {compressible: bool, extensions: [?], register: ?, source: string, type: string})'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['({compressible, extensions, register, source, type})'], result

Execute (fn({compressible, extensions, register, source, type}: {compressible: bool, extensions: [?], register: ?, source: string, type: string})):
  let completed_item = {'menu': 'fn(options: {compressible: bool, extensions: [?], register: ?, source: string, type: string})'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['({compressible, extensions, register, source, type})'], result

Execute (add(, omni):
  let completed_item = {'word': 'add(', 'menu': 'a, b', 'info': '', 'kind': 'f', 'abbr': ''}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['(a, b)'], result
"}}}

"{{{ deoplete
Execute (error menu):
  let completed_item = {"info": "number"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual [], result

Execute (fn()):
  let completed_item = {"info": "fn()\nfsaf"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ["()"], result

Execute (fn(other: [?])):
  let completed_item = {"info": "fn(other: [?]\n)->faf"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ["(other)"], result

Execute (fn(other?: string) -> string):
  let completed_item = {"info": "fn(other?: string\n) -> string"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ["(other)"], result

Execute (fn(other: ?) -> string):
  let completed_item = {"info": "fn(other: ?) -> string"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ["(other)"], result


Execute (fn(test: fn(elt: ?, i: number, array: Array) -> bool, context?: ?) -> bool):
  let completed_item = {"info": "fn(test: fn(elt: ?, i: number, array: Array) -> bool, \ncontext?: ?) -> bool"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ["(test, context)"], result

Execute (fn(test: {elt: number, i: number, array: Array}, context?: ?) -> bool):
  let completed_item = {"info": "fn(test: fn(elt: ?, i: number, array: Array) -> bool, \ncontext?: ?) -> bool"}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ["(test, context)"], result

Execute (fn(options: {compressible: bool, extensions: [?], register: ?, source: string, type: string})):
  let completed_item = {'info': 'fn(options: {compressible: bool, extensions: [?], register: ?, source: string, type: string})'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['({compressible, extensions, register, source, type})'], result

Execute (fn({compressible, extensions, register, source, type}: {compressible: bool, extensions: [?], register: ?, source: string, type: string})):
  let completed_item = {'info': 'fn(options: {compressible: bool, extensions: [?], register: ?, source: string, type: string})'}
  let result = cm_parser#javascript#parameters(completed_item)
  AssertEqual ['({compressible, extensions, register, source, type})'], result
"}}}