]> granicus.if.org Git - vim/commitdiff
patch 8.1.0742: not all Blob operations are tested v8.1.0742
authorBram Moolenaar <Bram@vim.org>
Sun, 13 Jan 2019 18:10:33 +0000 (19:10 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 13 Jan 2019 18:10:33 +0000 (19:10 +0100)
Problem:    Not all Blob operations are tested.
Solution:   Add more testing for Blob.

src/evalfunc.c
src/testdir/test_blob.vim
src/testdir/test_eval_stuff.vim
src/version.c

index c1c8c23bd5441685a90fc66a8d819775ee6f27d3..066716a9130902d63892b9ef6bd0ac2ce271be42 100644 (file)
@@ -1258,8 +1258,14 @@ f_add(typval_T *argvars, typval_T *rettv)
                && !tv_check_lock(b->bv_lock,
                                         (char_u *)N_("add() argument"), TRUE))
        {
-           ga_append(&b->bv_ga, (char_u)tv_get_number(&argvars[1]));
-           copy_tv(&argvars[0], rettv);
+           int         error = FALSE;
+           varnumber_T n = tv_get_number_chk(&argvars[1], &error);
+
+           if (!error)
+           {
+               ga_append(&b->bv_ga, (int)n);
+               copy_tv(&argvars[0], rettv);
+           }
        }
     }
     else
@@ -3196,7 +3202,6 @@ f_empty(typval_T *argvars, typval_T *rettv)
 
        case VAR_BLOB:
            n = argvars[0].vval.v_blob == NULL
-               || argvars[0].vval.v_blob->bv_ga.ga_data == NULL
                || argvars[0].vval.v_blob->bv_ga.ga_len == 0;
            break;
 
@@ -7029,6 +7034,13 @@ f_index(typval_T *argvars, typval_T *rettv)
        b = argvars[0].vval.v_blob;
        if (b == NULL)
            return;
+       if (start < 0)
+       {
+           start = blob_len(b) + start;
+           if (start < 0)
+               start = 0;
+       }
+
        for (idx = start; idx < blob_len(b); ++idx)
        {
            tv.v_type = VAR_NUMBER;
index 550b8f1b9f98e1e892843bacff686dcb724fcbbc..ec3de89d1ed379bf5f1773e053f99b30fac94753 100644 (file)
@@ -96,6 +96,8 @@ func Test_blob_compare()
   call assert_true(b1 != b2)
   call assert_true(b1 != b3)
   call assert_true(b1 == 0z0011)
+  call assert_fails('echo b1 == 9', 'E977:')
+  call assert_fails('echo b1 != 9', 'E977:')
 
   call assert_false(b1 is b2)
   let b2 = b1
@@ -145,6 +147,22 @@ func Test_blob_concatenate()
   call assert_equal(0zDEADBEEF, b)
 endfunc
 
+func Test_blob_add()
+  let b = 0z0011
+  call add(b, 0x22)
+  call assert_equal(0z001122, b)
+  call add(b, '51')
+  call assert_equal(0z00112233, b)
+
+  call assert_fails('call add(b, [9])', 'E745:')
+endfunc
+
+func Test_blob_empty()
+  call assert_false(empty(0z001122))
+  call assert_true(empty(0z))
+  call assert_true(empty(test_null_blob()))
+endfunc
+
 " Test removing items in blob
 func Test_blob_func_remove()
   " Test removing 1 element
@@ -198,11 +216,19 @@ func Test_blob_map()
   let b = 0zDEADBEEF
   call map(b, 'v:val + 1')
   call assert_equal(0zDFAEBFF0, b)
+
+  call assert_fails("call map(b, '[9]')", 'E978:')
 endfunc
 
 func Test_blob_index()
   call assert_equal(2, index(0zDEADBEEF, 0xBE))
   call assert_equal(-1, index(0zDEADBEEF, 0))
+  call assert_equal(2, index(0z11111111, 0x11, 2))
+  call assert_equal(3, index(0z11110111, 0x11, 2))
+  call assert_equal(2, index(0z11111111, 0x11, -2))
+  call assert_equal(3, index(0z11110111, 0x11, -2))
+
+  call assert_fails('call index("asdf", 0)', 'E714:')
 endfunc
 
 func Test_blob_insert()
@@ -213,6 +239,10 @@ func Test_blob_insert()
   let b = 0zDEADBEEF
   call insert(b, 0x33, 2)
   call assert_equal(0zDEAD33BEEF, b)
+
+  call assert_fails('call insert(b, -1)', 'E475:')
+  call assert_fails('call insert(b, 257)', 'E475:')
+  call assert_fails('call insert(b, 0, [9])', 'E745:')
 endfunc
 
 func Test_blob_reverse()
index dc3cb8919d94590bc1b5ac5e6aeb43f729d7b49e..c7b970a2c772969e1b08a5b9da1d175aec70b577 100644 (file)
@@ -69,3 +69,21 @@ func Test_for_invalid()
   call assert_fails("for x in 'asdf'", 'E714:')
   call assert_fails("for x in {'a': 9}", 'E714:')
 endfunc
+
+func Test_readfile_binary()
+  new
+  call setline(1, ['one', 'two', 'three'])
+  setlocal ff=dos
+  write XReadfile
+  let lines = readfile('XReadfile')
+  call assert_equal(['one', 'two', 'three'], lines)
+  let lines = readfile('XReadfile', '', 2)
+  call assert_equal(['one', 'two'], lines)
+  let lines = readfile('XReadfile', 'b')
+  call assert_equal(["one\r", "two\r", "three\r", ""], lines)
+  let lines = readfile('XReadfile', 'b', 2)
+  call assert_equal(["one\r", "two\r"], lines)
+
+  bwipe!
+  call delete('XReadfile')
+endfunc
index a7ed174cf02f2118f9562ee8b9e618d0079ee667..ec50b498e1f9a56529bc6c26a7df0fc347739afb 100644 (file)
@@ -795,6 +795,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    742,
 /**/
     741,
 /**/