diff --git a/autoload/vital/__vital__/Web/JSON.vim b/autoload/vital/__vital__/Web/JSON.vim index c7e837259..b62f0d789 100644 --- a/autoload/vital/__vital__/Web/JSON.vim +++ b/autoload/vital/__vital__/Web/JSON.vim @@ -180,9 +180,6 @@ function! s:_encode(val, settings) abort return 'false' elseif s:const.null == a:val return 'null' - else - " backward compatibility - return string(a:val) endif elseif t == 3 return s:_encode_list(a:val, a:settings) @@ -200,9 +197,8 @@ function! s:_encode(val, settings) abort return get(s:special_constants, a:val) elseif t == 10 return s:_encode_list(s:bytes.from_blob(a:val), a:settings) - else - return string(a:val) endif + throw 'vital: Web.JSON: Invalid argument: ' . string(a:val) endfunction " @vimlint(EVL102, 1, l:ns) diff --git a/test/Web/JSON.vimspec b/test/Web/JSON.vimspec index 1f15aa335..415af4241 100644 --- a/test/Web/JSON.vimspec +++ b/test/Web/JSON.vimspec @@ -308,5 +308,31 @@ Describe Web.JSON Assert Equals(JSON.encode(0z), '[]') Assert Equals(JSON.encode(0zFF.00.ED.01.5D.AF), '[255,0,237,1,93,175]') End + + It throws exception when encodes funcref + let Funcref = function('get') + Throws /^vital: Web\.JSON: Invalid argument: / JSON.encode(Funcref) + End + + It throws exception when encodes job + if !has('job') + Skip no available job type. + endif + if has('win32') + let job = job_start('cmd /c ""') + else + let job = job_start('true') + endif + Throws /^vital: Web\.JSON: Invalid argument: / JSON.encode(job) + End + + It throws exception when encodes channel + if !has('channel') + Skip no available channel type. + endif + let ch = ch_open('localhost:12345', {'waittime': 0}) + silent! call ch_close(ch) + Throws /^vital: Web\.JSON: Invalid argument: / JSON.encode(ch) + End End End