ert: The should Macro

 
 3.1 The ‘should’ Macro
 ======================
 
 Test bodies can include arbitrary code; but to be useful, they need to
 check whether the code being tested (or _code under test_) does what it
 is supposed to do.  The macro ‘should’ is similar to ‘cl-assert’ from
 the cl package (See(cl)Assertions), but analyzes its argument form
 and records information that ERT can display to help debugging.
 
    This test definition
 
      (ert-deftest addition-test ()
        (should (= (+ 1 2) 4)))
 
    will produce this output when run via ‘M-x ert’:
 
      F addition-test
          (ert-test-failed
           ((should
             (=
              (+ 1 2)
              4))
            :form
            (= 3 4)
            :value nil))
 
    In this example, ‘should’ recorded the fact that (= (+ 1 2) 4)
 reduced to (= 3 4) before it reduced to ‘nil’.  When debugging why the
 test failed, it helps to know that the function ‘+’ returned 3 here.
 ERT records the return value for any predicate called directly within
 ‘should’.
 
    In addition to ‘should’, ERT provides ‘should-not’, which checks that
 the predicate returns ‘nil’, and ‘should-error’, which checks that the
 form called within it signals an error.  An example use of
 ‘should-error’:
 
      (ert-deftest test-divide-by-zero ()
        (should-error (/ 1 0)
                      :type 'arith-error))
 
    This checks that dividing one by zero signals an error of type
 ‘arith-error’.  The ‘:type’ argument to ‘should-error’ is optional; if
 absent, any type of error is accepted.  ‘should-error’ returns an error
 description of the error that was signaled, to allow additional checks
 to be made.  The error description has the format ‘(ERROR-SYMBOL .
 DATA)’.
 
    There is no ‘should-not-error’ macro since tests that signal an error
 fail anyway, so ‘should-not-error’ is effectively the default.
 
    SeeUnderstanding Explanations, for more details on what ‘should’
 reports.