mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	patch 8.1.1861: only some assert functions can be used as a method
Problem: Only some assert functions can be used as a method. Solution: Allow using most assert functions as a method.
This commit is contained in:
		| @@ -206,6 +206,9 @@ assert_beeps({cmd})					*assert_beeps()* | |||||||
| 		NOT produce a beep or visual bell. | 		NOT produce a beep or visual bell. | ||||||
| 		Also see |assert_fails()| and |assert-return|. | 		Also see |assert_fails()| and |assert-return|. | ||||||
|  |  | ||||||
|  | 		Can also be used as a |method|: > | ||||||
|  | 			GetCmd()->assert_beeps() | ||||||
|  | < | ||||||
| 							*assert_equal()* | 							*assert_equal()* | ||||||
| assert_equal({expected}, {actual} [, {msg}]) | assert_equal({expected}, {actual} [, {msg}]) | ||||||
| 		When {expected} and {actual} are not equal an error message is | 		When {expected} and {actual} are not equal an error message is | ||||||
| @@ -255,6 +258,9 @@ assert_fails({cmd} [, {error} [, {msg}]])			*assert_fails()* | |||||||
| 		Note that beeping is not considered an error, and some failing | 		Note that beeping is not considered an error, and some failing | ||||||
| 		commands only beep.  Use |assert_beeps()| for those. | 		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()* | assert_false({actual} [, {msg}])				*assert_false()* | ||||||
| 		When {actual} is not false an error message is added to | 		When {actual} is not false an error message is added to | ||||||
| 		|v:errors|, like with |assert_equal()|. | 		|v:errors|, like with |assert_equal()|. | ||||||
| @@ -264,6 +270,9 @@ assert_false({actual} [, {msg}])				*assert_false()* | |||||||
| 		When {msg} is omitted an error in the form | 		When {msg} is omitted an error in the form | ||||||
| 		"Expected False but got {actual}" is produced. | 		"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()* | assert_inrange({lower}, {upper}, {actual} [, {msg}])	 *assert_inrange()* | ||||||
| 		This asserts number and |Float| values.  When {actual}  is lower | 		This asserts number and |Float| values.  When {actual}  is lower | ||||||
| 		than {lower} or higher than {upper} an error message is added | 		than {lower} or higher than {upper} an error message is added | ||||||
| @@ -292,6 +301,9 @@ assert_match({pattern}, {actual} [, {msg}]) | |||||||
| <		Will result in a string to be added to |v:errors|: | <		Will result in a string to be added to |v:errors|: | ||||||
| 	test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ | 	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()* | ||||||
| assert_notequal({expected}, {actual} [, {msg}]) | assert_notequal({expected}, {actual} [, {msg}]) | ||||||
| 		The opposite of `assert_equal()`: add an error message to | 		The opposite of `assert_equal()`: add an error message to | ||||||
| @@ -307,6 +319,9 @@ assert_notmatch({pattern}, {actual} [, {msg}]) | |||||||
| 		|v:errors| when {pattern} matches {actual}. | 		|v:errors| when {pattern} matches {actual}. | ||||||
| 		Also see |assert-return|. | 		Also see |assert-return|. | ||||||
|  |  | ||||||
|  | 		Can also be used as a |method|: > | ||||||
|  | 			getFile()->assert_notmatch('bar.*') | ||||||
|  |  | ||||||
| assert_report({msg})					*assert_report()* | assert_report({msg})					*assert_report()* | ||||||
| 		Report a test failure directly, using {msg}. | 		Report a test failure directly, using {msg}. | ||||||
| 		Always returns one. | 		Always returns one. | ||||||
| @@ -320,5 +335,8 @@ assert_true({actual} [, {msg}])				*assert_true()* | |||||||
| 		When {msg} is omitted an error in the form "Expected True but | 		When {msg} is omitted an error in the form "Expected True but | ||||||
| 		got {actual}" is produced. | 		got {actual}" is produced. | ||||||
|  |  | ||||||
|  | 		Can also be used as a |method|: > | ||||||
|  | 			GetResult()->assert_true() | ||||||
|  | < | ||||||
|  |  | ||||||
|  vim:tw=78:ts=8:noet:ft=help:norl: |  vim:tw=78:ts=8:noet:ft=help:norl: | ||||||
|   | |||||||
| @@ -415,6 +415,7 @@ typedef struct | |||||||
| // values for f_argtype; zero means it cannot be used as a method | // values for f_argtype; zero means it cannot be used as a method | ||||||
| #define FEARG_1    1	    // base is the first argument | #define FEARG_1    1	    // base is the first argument | ||||||
| #define FEARG_2    2	    // base is the second 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 | #define FEARG_LAST 9	    // base is the last argument | ||||||
|  |  | ||||||
| static funcentry_T global_functions[] = | static funcentry_T global_functions[] = | ||||||
| @@ -434,18 +435,18 @@ static funcentry_T global_functions[] = | |||||||
| #ifdef FEAT_FLOAT | #ifdef FEAT_FLOAT | ||||||
|     {"asin",		1, 1, 0,	  f_asin},	// WJMc |     {"asin",		1, 1, 0,	  f_asin},	// WJMc | ||||||
| #endif | #endif | ||||||
|     {"assert_beeps",	1, 2, 0,	  f_assert_beeps}, |     {"assert_beeps",	1, 2, FEARG_1,	  f_assert_beeps}, | ||||||
|     {"assert_equal",	2, 3, FEARG_2,	  f_assert_equal}, |     {"assert_equal",	2, 3, FEARG_2,	  f_assert_equal}, | ||||||
|     {"assert_equalfile", 2, 2, 0,	  f_assert_equalfile}, |     {"assert_equalfile", 2, 2, 0,	  f_assert_equalfile}, | ||||||
|     {"assert_exception", 1, 2, 0,	  f_assert_exception}, |     {"assert_exception", 1, 2, 0,	  f_assert_exception}, | ||||||
|     {"assert_fails",	1, 3, 0,	  f_assert_fails}, |     {"assert_fails",	1, 3, FEARG_1,	  f_assert_fails}, | ||||||
|     {"assert_false",	1, 2, 0,	  f_assert_false}, |     {"assert_false",	1, 2, FEARG_1,	  f_assert_false}, | ||||||
|     {"assert_inrange",	3, 4, 0,	  f_assert_inrange}, |     {"assert_inrange",	3, 4, FEARG_3,	  f_assert_inrange}, | ||||||
|     {"assert_match",	2, 3, 0,	  f_assert_match}, |     {"assert_match",	2, 3, FEARG_2,	  f_assert_match}, | ||||||
|     {"assert_notequal",	2, 3, FEARG_2,	  f_assert_notequal}, |     {"assert_notequal",	2, 3, FEARG_2,	  f_assert_notequal}, | ||||||
|     {"assert_notmatch",	2, 3, 0,	  f_assert_notmatch}, |     {"assert_notmatch",	2, 3, FEARG_2,	  f_assert_notmatch}, | ||||||
|     {"assert_report",	1, 1, 0,	  f_assert_report}, |     {"assert_report",	1, 1, 0,	  f_assert_report}, | ||||||
|     {"assert_true",	1, 2, 0,	  f_assert_true}, |     {"assert_true",	1, 2, FEARG_1,	  f_assert_true}, | ||||||
| #ifdef FEAT_FLOAT | #ifdef FEAT_FLOAT | ||||||
|     {"atan",		1, 1, 0,	  f_atan}, |     {"atan",		1, 1, 0,	  f_atan}, | ||||||
|     {"atan2",		2, 2, 0,	  f_atan2}, |     {"atan2",		2, 2, 0,	  f_atan2}, | ||||||
| @@ -1134,6 +1135,15 @@ call_internal_method( | |||||||
| 	for (i = 1; i < argcount; ++i) | 	for (i = 1; i < argcount; ++i) | ||||||
| 	    argv[i + 1] = argvars[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 |     else | ||||||
|     { |     { | ||||||
| 	// FEARG_1: base value goes first | 	// FEARG_1: base value goes first | ||||||
|   | |||||||
| @@ -3,20 +3,30 @@ | |||||||
| func Test_assert_false() | func Test_assert_false() | ||||||
|   call assert_equal(0, assert_false(0)) |   call assert_equal(0, assert_false(0)) | ||||||
|   call assert_equal(0, assert_false(v:false)) |   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_equal(1, assert_false(123)) | ||||||
|   call assert_match("Expected False but got 123", v:errors[0]) |   call assert_match("Expected False but got 123", v:errors[0]) | ||||||
|   call remove(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 | endfunc | ||||||
|  |  | ||||||
| func Test_assert_true() | func Test_assert_true() | ||||||
|   call assert_equal(0, assert_true(1)) |   call assert_equal(0, assert_true(1)) | ||||||
|   call assert_equal(0, assert_true(123)) |   call assert_equal(0, assert_true(123)) | ||||||
|   call assert_equal(0, assert_true(v:true)) |   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_equal(1, assert_true(0)) | ||||||
|   call assert_match("Expected True but got 0", v:errors[0]) |   call assert_match("Expected True but got 0", v:errors[0]) | ||||||
|   call remove(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 | endfunc | ||||||
|  |  | ||||||
| func Test_assert_equal() | func Test_assert_equal() | ||||||
| @@ -141,6 +151,10 @@ func Test_match() | |||||||
|   call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong')) |   call assert_equal(1, assert_match('bar.*foo', 'foobar', 'wrong')) | ||||||
|   call assert_match('wrong', v:errors[0]) |   call assert_match('wrong', v:errors[0]) | ||||||
|   call remove(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 | endfunc | ||||||
|  |  | ||||||
| func Test_notmatch() | func Test_notmatch() | ||||||
| @@ -150,6 +164,10 @@ func Test_notmatch() | |||||||
|   call assert_equal(1, assert_notmatch('foo', 'foobar')) |   call assert_equal(1, assert_notmatch('foo', 'foobar')) | ||||||
|   call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) |   call assert_match("Pattern 'foo' does match 'foobar'", v:errors[0]) | ||||||
|   call remove(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 | endfunc | ||||||
|  |  | ||||||
| func Test_assert_fail_fails() | func Test_assert_fail_fails() | ||||||
| @@ -164,6 +182,10 @@ func Test_assert_fail_fails() | |||||||
|   call assert_equal(1, assert_fails('echo', '', 'echo command')) |   call assert_equal(1, assert_fails('echo', '', 'echo command')) | ||||||
|   call assert_match("command did not fail: echo command", v:errors[0]) |   call assert_match("command did not fail: echo command", v:errors[0]) | ||||||
|   call remove(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 | endfunc | ||||||
|  |  | ||||||
| func Test_assert_fails_in_try_block() | func Test_assert_fails_in_try_block() | ||||||
| @@ -179,6 +201,12 @@ func Test_assert_beeps() | |||||||
|   call assert_equal(1, assert_beeps('normal 0')) |   call assert_equal(1, assert_beeps('normal 0')) | ||||||
|   call assert_match("command did not beep: normal 0", v:errors[0]) |   call assert_match("command did not beep: normal 0", v:errors[0]) | ||||||
|   call remove(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 |   bwipe | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| @@ -195,6 +223,12 @@ func Test_assert_inrange() | |||||||
|   call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) |   call assert_match("Expected range 5 - 7, but got 8", v:errors[0]) | ||||||
|   call remove(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:') |   call assert_fails('call assert_inrange(1, 1)', 'E119:') | ||||||
|  |  | ||||||
|   if has('float') |   if has('float') | ||||||
|   | |||||||
| @@ -769,6 +769,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     1861, | ||||||
| /**/ | /**/ | ||||||
|     1860, |     1860, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user