# HG changeset patch # User Christian Brabandt # Date 1453644904 -3600 # Node ID 4a4f1dd1abe86a1889ea1f8572aa42014a8a6d71 # Parent c0b0e9255b13d4f7b6bb2af9629b1d9eea2140c6 commit https://github.com/vim/vim/commit/6039c7f05376f0e470cf62bf2757e653aea357f3 Author: Bram Moolenaar Date: Sun Jan 24 15:05:32 2016 +0100 patch 7.4.1164 Problem: No tests for comparing special variables. Error in jsondecode() not reported. test_json does not work Japanse system. Solution: Set scriptencoding. (Ken Takata) Add a few more tests. Add error. diff --git a/src/json.c b/src/json.c --- a/src/json.c +++ b/src/json.c @@ -220,7 +220,7 @@ json_decode_array(js_read_T *reader, typ listitem_T *li; if (rettv_list_alloc(res) == FAIL) - goto fail; + goto failsilent; ++reader->js_used; /* consume the '[' */ while (TRUE) @@ -253,6 +253,8 @@ json_decode_array(js_read_T *reader, typ goto fail; } fail: + EMSG(_(e_invarg)); +failsilent: res->v_type = VAR_SPECIAL; res->vval.v_number = VVAL_NONE; } @@ -268,7 +270,7 @@ json_decode_object(js_read_T *reader, ty char_u *key; if (rettv_dict_alloc(res) == FAIL) - goto fail; + goto failsilent; ++reader->js_used; /* consume the '{' */ while (TRUE) @@ -293,7 +295,7 @@ json_decode_object(js_read_T *reader, ty if (key != NULL) EMSG(_(e_emptykey)); clear_tv(&tvkey); - goto fail; + goto failsilent; } json_skip_white(reader); @@ -329,6 +331,8 @@ json_decode_object(js_read_T *reader, ty goto fail; } fail: + EMSG(_(e_invarg)); +failsilent: res->v_type = VAR_SPECIAL; res->vval.v_number = VVAL_NONE; } diff --git a/src/testdir/test_json.vim b/src/testdir/test_json.vim --- a/src/testdir/test_json.vim +++ b/src/testdir/test_json.vim @@ -1,4 +1,5 @@ " Test for JSON functions. +scriptencoding utf-8 let s:json1 = '"str\"in\\g"' let s:var1 = "str\"in\\g" @@ -95,11 +96,25 @@ func Test_decode() call assert_equal(type(v:none), type(jsondecode(''))) call assert_equal("", jsondecode('""')) + call assert_equal({'n': 1}, jsondecode('{"n":1,}')) + call assert_fails('call jsondecode("\"")', "E474:") - call assert_fails('call jsondecode("{-}")', "E474:") call assert_fails('call jsondecode("blah")', "E474:") call assert_fails('call jsondecode("true blah")', "E474:") call assert_fails('call jsondecode("")', "E474:") - call assert_fails('call jsondecode("[foobar]")', "E474:") + + call assert_fails('call jsondecode("{")', "E474:") call assert_fails('call jsondecode("{foobar}")', "E474:") + call assert_fails('call jsondecode("{\"n\",")', "E474:") + call assert_fails('call jsondecode("{\"n\":")', "E474:") + call assert_fails('call jsondecode("{\"n\":1")', "E474:") + call assert_fails('call jsondecode("{\"n\":1,")', "E474:") + call assert_fails('call jsondecode("{\"n\",1}")', "E474:") + call assert_fails('call jsondecode("{-}")', "E474:") + + call assert_fails('call jsondecode("[foobar]")', "E474:") + call assert_fails('call jsondecode("[")', "E474:") + call assert_fails('call jsondecode("[1")', "E474:") + call assert_fails('call jsondecode("[1,")', "E474:") + call assert_fails('call jsondecode("[1 2]")', "E474:") endfunc diff --git a/src/testdir/test_viml.vim b/src/testdir/test_viml.vim --- a/src/testdir/test_viml.vim +++ b/src/testdir/test_viml.vim @@ -946,6 +946,18 @@ func Test_type() call assert_equal('true', '' . v:true) call assert_equal('none', '' . v:none) call assert_equal('null', '' . v:null) + + call assert_true(v:false == 0) + call assert_false(v:false != 0) + call assert_true(v:true == 1) + call assert_false(v:true != 1) + call assert_false(v:true == v:false) + call assert_true(v:true != v:false) + + call assert_true(v:null == 0) + call assert_false(v:null != 0) + call assert_true(v:none == 0) + call assert_false(v:none != 0) endfunc "------------------------------------------------------------------------------- diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1164, +/**/ 1163, /**/ 1162,