Patch 7.4.1092
Problem:    It is not simple to test for an exception and give a proper error
            message.
Solution:   Add assert_exception().
Files:      src/eval.c, runtime/doc/eval.txt


*** ../vim-7.4.1091/src/eval.c  2016-01-09 18:20:41.601002765 +0100
--- src/eval.c  2016-01-15 14:39:41.292690326 +0100
***************
*** 475,480 ****
--- 475,481 ----
  static void f_arglistid __ARGS((typval_T *argvars, typval_T *rettv));
  static void f_argv __ARGS((typval_T *argvars, typval_T *rettv));
  static void f_assert_equal __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_assert_exception __ARGS((typval_T *argvars, typval_T *rettv));
  static void f_assert_false __ARGS((typval_T *argvars, typval_T *rettv));
  static void f_assert_true __ARGS((typval_T *argvars, typval_T *rettv));
  #ifdef FEAT_FLOAT
***************
*** 8088,8093 ****
--- 8089,8095 ----
      {"asin",          1, 1, f_asin},  /* WJMc */
  #endif
      {"assert_equal",  2, 3, f_assert_equal},
+     {"assert_exception", 1, 2, f_assert_exception},
      {"assert_false",  1, 2, f_assert_false},
      {"assert_true",   1, 2, f_assert_true},
  #ifdef FEAT_FLOAT
***************
*** 9270,9275 ****
--- 9272,9306 ----
  }
  
  /*
+  * "assert_exception(string[, msg])" function
+  */
+     static void
+ f_assert_exception(argvars, rettv)
+     typval_T  *argvars;
+     typval_T  *rettv UNUSED;
+ {
+     garray_T  ga;
+     char      *error;
+ 
+     error = (char *)get_tv_string_chk(&argvars[0]);
+     if (vimvars[VV_EXCEPTION].vv_str == NULL)
+     {
+       prepare_assert_error(&ga);
+       ga_concat(&ga, (char_u *)"v:exception is not set");
+       assert_error(&ga);
+       ga_clear(&ga);
+     }
+     else if (strstr((char *)vimvars[VV_EXCEPTION].vv_str, error) == NULL)
+     {
+       prepare_assert_error(&ga);
+       fill_assert_error(&ga, &argvars[1], NULL, &argvars[0],
+                                               &vimvars[VV_EXCEPTION].vv_tv);
+       assert_error(&ga);
+       ga_clear(&ga);
+     }
+ }
+ 
+ /*
   * Common for assert_true() and assert_false().
   */
      static void
*** ../vim-7.4.1091/runtime/doc/eval.txt        2016-01-07 21:24:57.329499581 
+0100
--- runtime/doc/eval.txt        2016-01-15 15:28:08.001417172 +0100
***************
*** 1746,1754 ****
                                Number  argument list id
  argv( {nr})                   String  {nr} entry of the argument list
  argv( )                               List    the argument list
! assert_equal( {exp}, {act} [, {msg}]) none    assert that {exp} equals {act}
! assert_false( {actual} [, {msg}])     none    assert that {actual} is false
! assert_true( {actual} [, {msg}])      none    assert that {actual} is true
  asin( {expr})                 Float   arc sine of {expr}
  atan( {expr})                 Float   arc tangent of {expr}
  atan2( {expr}, {expr})                Float   arc tangent of {expr1} / {expr2}
--- 1750,1759 ----
                                Number  argument list id
  argv( {nr})                   String  {nr} entry of the argument list
  argv( )                               List    the argument list
! assert_equal( {exp}, {act} [, {msg}]) none  assert {exp} equals {act}
! assert_exception({error} [, {msg}])   none  assert {error} is in v:exception
! assert_false( {actual} [, {msg}])     none  assert {actual} is false
! assert_true( {actual} [, {msg}])      none  assert {actual} is true
  asin( {expr})                 Float   arc sine of {expr}
  atan( {expr})                 Float   arc tangent of {expr}
  atan2( {expr}, {expr})                Float   arc tangent of {expr1} / {expr2}
***************
*** 2175,2181 ****
                returned.
  
                                                        *assert_equal()*
! assert_equal({expected}, {actual}, [, {msg}])
                When {expected} and {actual} are not equal an error message is
                added to |v:errors|.
                There is no automatic conversion, the String "4" is different
--- 2180,2186 ----
                returned.
  
                                                        *assert_equal()*
! assert_equal({expected}, {actual} [, {msg}])
                When {expected} and {actual} are not equal an error message is
                added to |v:errors|.
                There is no automatic conversion, the String "4" is different
***************
*** 2189,2206 ****
  <             Will result in a string to be added to |v:errors|:
        test.vim line 12: Expected 'foo' but got 'bar' ~
  
! assert_false({actual}, [, {msg}])                             *assert_false()*
                When {actual} is not false an error message is added to
!               |v:errors|, like with |assert_equal()|..
                A value is false when it is zero. When "{actual}" is not a
                number the assert fails.
                When {msg} is omitted an error in the form "Expected False but
                got {actual}" is produced.
  
! assert_true({actual}, [, {msg}])                              *assert_true()*
                When {actual} is not true an error message is added to
!               |v:errors|, like with |assert_equal()|..
!               A value is true when it is a non-zeron number.  When {actual}
                is not a number the assert fails.
                When {msg} is omitted an error in the form "Expected True but
                got {actual}" is produced.
--- 2194,2224 ----
  <             Will result in a string to be added to |v:errors|:
        test.vim line 12: Expected 'foo' but got 'bar' ~
  
! assert_exception({error} [, {msg}])                   *assert_exception()*
!               When v:exception does not contain the string {error} an error
!               message is added to |v:errors|.
!               This can be used to assert that a command throws an exception.
!               Using the error number, followed by a colon, avoids problems
!               with translations: >
!                       try
!                         commandthatfails
!                         call assert_false(1, 'command should have failed')
!                       catch
!                         call assert_exception('E492:')
!                       endtry
! 
! assert_false({actual} [, {msg}])                              *assert_false()*
                When {actual} is not false an error message is added to
!               |v:errors|, like with |assert_equal()|.
                A value is false when it is zero. When "{actual}" is not a
                number the assert fails.
                When {msg} is omitted an error in the form "Expected False but
                got {actual}" is produced.
  
! assert_true({actual} [, {msg}])                                       
*assert_true()*
                When {actual} is not true an error message is added to
!               |v:errors|, like with |assert_equal()|.
!               A value is true when it is a non-zero number.  When {actual}
                is not a number the assert fails.
                When {msg} is omitted an error in the form "Expected True but
                got {actual}" is produced.
*** ../vim-7.4.1091/src/version.c       2016-01-15 15:16:58.336609048 +0100
--- src/version.c       2016-01-15 15:20:51.614104253 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     1092,
  /**/

-- 
Hanson's Treatment of Time:
        There are never enough hours in a day, but always too
        many days before Saturday.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui