To: vim_dev@googlegroups.com Subject: Patch 8.1.1861 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.1861 Problem: Only some assert functions can be used as a method. Solution: Allow using most assert functions as a method. Files: runtime/doc/testing.txt, src/evalfunc.c, src/testdir/test_assert.vim *** ../vim-8.1.1860/runtime/doc/testing.txt 2019-08-04 15:03:33.367303750 +0200 --- runtime/doc/testing.txt 2019-08-16 21:28:23.788106873 +0200 *************** *** 206,211 **** --- 206,214 ---- NOT produce a beep or visual bell. Also see |assert_fails()| and |assert-return|. + Can also be used as a |method|: > + GetCmd()->assert_beeps() + < *assert_equal()* assert_equal({expected}, {actual} [, {msg}]) When {expected} and {actual} are not equal an error message is *************** *** 255,260 **** --- 258,266 ---- Note that beeping is not considered an error, and some failing commands only beep. Use |assert_beeps()| for those. + Can also be used as a |method|: > + GetCmd()->assert_fails('E99:') + assert_false({actual} [, {msg}]) *assert_false()* When {actual} is not false an error message is added to |v:errors|, like with |assert_equal()|. *************** *** 264,269 **** --- 270,278 ---- When {msg} is omitted an error in the form "Expected False but got {actual}" is produced. + Can also be used as a |method|: > + GetResult()->assert_false() + assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* This asserts number and |Float| values. When {actual} is lower than {lower} or higher than {upper} an error message is added *************** *** 292,297 **** --- 301,309 ---- < Will result in a string to be added to |v:errors|: test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ + Can also be used as a |method|: > + getFile()->assert_match('foo.*') + < *assert_notequal()* assert_notequal({expected}, {actual} [, {msg}]) The opposite of `assert_equal()`: add an error message to *************** *** 307,312 **** --- 319,327 ---- |v:errors| when {pattern} matches {actual}. Also see |assert-return|. + Can also be used as a |method|: > + getFile()->assert_notmatch('bar.*') + assert_report({msg}) *assert_report()* Report a test failure directly, using {msg}. Always returns one. *************** *** 320,324 **** --- 335,342 ---- When {msg} is omitted an error in the form "Expected True but got {actual}" is produced. + Can also be used as a |method|: > + GetResult()->assert_true() + < vim:tw=78:ts=8:noet:ft=help:norl: *** ../vim-8.1.1860/src/evalfunc.c 2019-08-15 21:30:26.622085162 +0200 --- src/evalfunc.c 2019-08-16 21:40:20.080691413 +0200 *************** *** 415,420 **** --- 415,421 ---- // values for f_argtype; zero means it cannot be used as a method #define FEARG_1 1 // base is the first argument #define FEARG_2 2 // base is the second argument + #define FEARG_3 3 // base is the third argument #define FEARG_LAST 9 // base is the last argument static funcentry_T global_functions[] = *************** *** 434,451 **** #ifdef FEAT_FLOAT {"asin", 1, 1, 0, f_asin}, // WJMc #endif ! {"assert_beeps", 1, 2, 0, f_assert_beeps}, {"assert_equal", 2, 3, FEARG_2, f_assert_equal}, {"assert_equalfile", 2, 2, 0, f_assert_equalfile}, {"assert_exception", 1, 2, 0, f_assert_exception}, ! {"assert_fails", 1, 3, 0, f_assert_fails}, ! {"assert_false", 1, 2, 0, f_assert_false}, ! {"assert_inrange", 3, 4, 0, f_assert_inrange}, ! {"assert_match", 2, 3, 0, f_assert_match}, {"assert_notequal", 2, 3, FEARG_2, f_assert_notequal}, ! {"assert_notmatch", 2, 3, 0, f_assert_notmatch}, {"assert_report", 1, 1, 0, f_assert_report}, ! {"assert_true", 1, 2, 0, f_assert_true}, #ifdef FEAT_FLOAT {"atan", 1, 1, 0, f_atan}, {"atan2", 2, 2, 0, f_atan2}, --- 435,452 ---- #ifdef FEAT_FLOAT {"asin", 1, 1, 0, f_asin}, // WJMc #endif ! {"assert_beeps", 1, 2, FEARG_1, f_assert_beeps}, {"assert_equal", 2, 3, FEARG_2, f_assert_equal}, {"assert_equalfile", 2, 2, 0, f_assert_equalfile}, {"assert_exception", 1, 2, 0, f_assert_exception}, ! {"assert_fails", 1, 3, FEARG_1, f_assert_fails}, ! {"assert_false", 1, 2, FEARG_1, f_assert_false}, ! {"assert_inrange", 3, 4, FEARG_3, f_assert_inrange}, ! {"assert_match", 2, 3, FEARG_2, f_assert_match}, {"assert_notequal", 2, 3, FEARG_2, f_assert_notequal}, ! {"assert_notmatch", 2, 3, FEARG_2, f_assert_notmatch}, {"assert_report", 1, 1, 0, f_assert_report}, ! {"assert_true", 1, 2, FEARG_1, f_assert_true}, #ifdef FEAT_FLOAT {"atan", 1, 1, 0, f_atan}, {"atan2", 2, 2, 0, f_atan2}, *************** *** 1134,1139 **** --- 1135,1149 ---- for (i = 1; i < argcount; ++i) argv[i + 1] = argvars[i]; } + else if (global_functions[fi].f_argtype == FEARG_3) + { + // base value goes third + argv[0] = argvars[0]; + argv[1] = argvars[1]; + argv[2] = *basetv; + for (i = 2; i < argcount; ++i) + argv[i + 1] = argvars[i]; + } else { // FEARG_1: base value goes first *** ../vim-8.1.1860/src/testdir/test_assert.vim 2019-07-10 22:04:44.960086645 +0200 --- src/testdir/test_assert.vim 2019-08-16 21:42:50.267986848 +0200 *************** *** 3,22 **** --- 3,32 ---- func Test_assert_false() call assert_equal(0, assert_false(0)) call assert_equal(0, assert_false(v:false)) + call assert_equal(0, v:false->assert_false()) call assert_equal(1, assert_false(123)) call assert_match("Expected False but got 123", v:errors[0]) call remove(v:errors, 0) + + call assert_equal(1, 123->assert_false()) + call assert_match("Expected False but got 123", v:errors[0]) + call remove(v:errors, 0) endfunc func Test_assert_true() call assert_equal(0, assert_true(1)) call assert_equal(0, assert_true(123)) call assert_equal(0, assert_true(v:true)) + call assert_equal(0, v:true->assert_true()) call assert_equal(1, assert_true(0)) call assert_match("Expected True but got 0", v:errors[0]) call remove(v:errors, 0) + + call assert_equal(1, 0->assert_true()) + call assert_match("Expected True but got 0", v:errors[0]) + call remove(v:errors, 0) endfunc func Test_assert_equal() *************** *** 141,146 **** --- 151,160 ---- call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong')) call assert_match('wrong', v:errors[0]) call remove(v:errors, 0) + + call assert_equal(1, 'foobar'->assert_match('bar.*foo', 'wrong')) + call assert_match('wrong', v:errors[0]) + call remove(v:errors, 0) endfunc func Test_notmatch() *************** *** 150,155 **** --- 164,173 ---- call assert_equal(1, assert_notmatch('foo', 'foobar')) call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) call remove(v:errors, 0) + + call assert_equal(1, 'foobar'->assert_notmatch('foo')) + call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) + call remove(v:errors, 0) endfunc func Test_assert_fail_fails() *************** *** 164,169 **** --- 182,191 ---- call assert_equal(1, assert_fails('echo', '', 'echo command')) call assert_match("command did not fail: echo command", v:errors[0]) call remove(v:errors, 0) + + call assert_equal(1, 'echo'->assert_fails('', 'echo command')) + call assert_match("command did not fail: echo command", v:errors[0]) + call remove(v:errors, 0) endfunc func Test_assert_fails_in_try_block() *************** *** 179,184 **** --- 201,212 ---- call assert_equal(1, assert_beeps('normal 0')) call assert_match("command did not beep: normal 0", v:errors[0]) call remove(v:errors, 0) + + call assert_equal(0, 'normal h'->assert_beeps()) + call assert_equal(1, 'normal 0'->assert_beeps()) + call assert_match("command did not beep: normal 0", v:errors[0]) + call remove(v:errors, 0) + bwipe endfunc *************** *** 195,200 **** --- 223,234 ---- call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) call remove(v:errors, 0) + call assert_equal(0, 5->assert_inrange(5, 7)) + call assert_equal(0, 7->assert_inrange(5, 7)) + call assert_equal(1, 8->assert_inrange(5, 7)) + call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) + call remove(v:errors, 0) + call assert_fails('call assert_inrange(1, 1)', 'E119:') if has('float') *** ../vim-8.1.1860/src/version.c 2019-08-16 21:47:23.870692859 +0200 --- src/version.c 2019-08-16 21:48:27.062392577 +0200 *************** *** 771,772 **** --- 771,774 ---- { /* Add new patch number below this line */ + /**/ + 1861, /**/ -- hundred-and-one symptoms of being an internet addict: 69. Yahoo welcomes you with your own start page /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///