Mercurial > hg > xemacs-beta
changeset 4891:732c35cdded8
fix failing-case output of Assert-test, add Assert-test-not
-------------------- ChangeLog entries follow: --------------------
tests/ChangeLog addition:
2010-01-27 Ben Wing <ben@xemacs.org>
* automated/test-harness.el (test-harness-from-buffer):
Update doc string of `Assert-test' and change the failing-case
message to be clearer. Also add `Assert-test-not' for asserting
that a comparison should fail.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Wed, 27 Jan 2010 06:00:09 -0600 |
parents | 276e07b3cc93 |
children | d1d4ce10c7b4 db2db229ee82 |
files | tests/ChangeLog tests/automated/test-harness.el |
diffstat | 2 files changed, 52 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/ChangeLog Wed Jan 27 05:58:38 2010 -0600 +++ b/tests/ChangeLog Wed Jan 27 06:00:09 2010 -0600 @@ -1,3 +1,10 @@ +2010-01-27 Ben Wing <ben@xemacs.org> + + * automated/test-harness.el (test-harness-from-buffer): + Update doc string of `Assert-test' and change the failing-case + message to be clearer. Also add `Assert-test-not' for asserting + that a comparison should fail. + 2010-01-27 Ben Wing <ben@xemacs.org> * automated/case-tests.el:
--- a/tests/automated/test-harness.el Wed Jan 27 05:58:38 2010 -0600 +++ b/tests/automated/test-harness.el Wed Jan 27 06:00:09 2010 -0600 @@ -209,12 +209,20 @@ (defconst test-harness-failure-tag "FAIL") (defconst test-harness-success-tag "PASS") +;;;;; BEGIN DEFINITION OF MACROS USEFUL IN TEST CODE + (defmacro Known-Bug-Expect-Failure (&rest body) + "Wrap a BODY that consists of tests that are known to fail. +This causes messages to be printed on failure indicating that this is expected, +and on success indicating that this is unexpected." `(let ((test-harness-failure-tag "KNOWN BUG") (test-harness-success-tag "PASS (FAILURE EXPECTED)")) ,@body)) (defmacro Known-Bug-Expect-Error (expected-error &rest body) + "Wrap a BODY that consists of tests that are known to trigger an error. +This causes messages to be printed on failure indicating that this is expected, +and on success indicating that this is unexpected." (let ((quoted-body (if (= 1 (length body)) `(quote ,(car body)) `(quote (progn ,@body))))) `(let ((test-harness-failure-tag "KNOWN BUG") @@ -237,6 +245,10 @@ (incf wrong-error-failures)))))) (defmacro Implementation-Incomplete-Expect-Failure (&rest body) + "Wrap a BODY containing tests that are known to fail due to incomplete code. +This causes messages to be printed on failure indicating that the +implementation is incomplete (and hence the failure is expected); and on +success indicating that this is unexpected." `(let ((test-harness-failure-tag "IMPLEMENTATION INCOMPLETE") (test-harness-success-tag "PASS (FAILURE EXPECTED)")) ,@body)) @@ -293,17 +305,42 @@ (incf other-failures) )))) +;;;;; BEGIN DEFINITION OF SPECIFIC KINDS OF ASSERT MACROS + (defmacro Assert-test (test testval expected &optional failing-case description) - "Test passes if TESTVAL is equal to EXPECTED, using TEST as comparator. -TEST should be a function such as `eq', `equal', `equalp', `=', `<=', etc. -Optional FAILING-CASE describes the particular failure; any value given -here will be concatenated with a phrase describing the expected and actual -values of the comparison. Optional DESCRIPTION describes the assertion; by -default, the unevalated comparison expressions are given. FAILING-CASE and -DESCRIPTION are useful when Assert is used in a loop." + "Test passes if TESTVAL compares correctly to EXPECTED using TEST. +TEST should be a two-argument predicate (i.e. a function of two arguments +that returns t or nil), such as `eq', `eql', `equal', `equalp', `=', `<=', +'>', 'file-newer-than-file-p' etc. Optional FAILING-CASE describes the +particular failure; any value given here will be concatenated with a phrase +describing the expected and actual values of the comparison. Optional +DESCRIPTION describes the assertion; by default, the unevalated comparison +expressions are given. FAILING-CASE and DESCRIPTION are useful when Assert +is used in a loop." (let* ((assertion `(,test ,testval ,expected)) - (failmsg `(format "expected %S, got %S" ,expected ,testval)) + (failmsg `(format "%S should be `%s' to %S but isn't" + ,testval ',test ,expected)) + (failmsg2 (if failing-case `(concat + (format "%S, " ,failing-case) + ,failmsg) + failmsg))) + `(Assert ,assertion ,failmsg2 ,description))) + + (defmacro Assert-test-not (test testval expected &optional failing-case + description) + "Test passes if TESTVAL does not compare correctly to EXPECTED using TEST. +TEST should be a two-argument predicate (i.e. a function of two arguments +that returns t or nil), such as `eq', `eql', `equal', `equalp', `=', `<=', +'>', 'file-newer-than-file-p' etc. Optional FAILING-CASE describes the +particular failure; any value given here will be concatenated with a phrase +describing the expected and actual values of the comparison. Optional +DESCRIPTION describes the assertion; by default, the unevalated comparison +expressions are given. FAILING-CASE and DESCRIPTION are useful when Assert +is used in a loop." + (let* ((assertion `(,test ,testval ,expected)) + (failmsg `(format "%S shouldn't be `%s' to %S but is" + ,testval ',test ,expected)) (failmsg2 (if failing-case `(concat (format "%S, " ,failing-case) ,failmsg)