annotate lisp/test-harness.el @ 5157:1fae11d56ad2

redo memory-usage mechanism, add way of dynamically initializing Lisp objects -------------------- ChangeLog entries follow: -------------------- lisp/ChangeLog addition: 2010-03-18 Ben Wing <ben@xemacs.org> * diagnose.el (show-memory-usage): Rewrite to take into account API changes in memory-usage functions. src/ChangeLog addition: 2010-03-18 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (disksave_object_finalization_1): * alloc.c (lisp_object_storage_size): * alloc.c (listu): * alloc.c (listn): * alloc.c (Fobject_memory_usage_stats): * alloc.c (compute_memusage_stats_length): * alloc.c (Fobject_memory_usage): * alloc.c (Ftotal_object_memory_usage): * alloc.c (malloced_storage_size): * alloc.c (common_init_alloc_early): * alloc.c (reinit_alloc_objects_early): * alloc.c (reinit_alloc_early): * alloc.c (init_alloc_once_early): * alloc.c (syms_of_alloc): * alloc.c (reinit_vars_of_alloc): * buffer.c: * buffer.c (struct buffer_stats): * buffer.c (compute_buffer_text_usage): * buffer.c (compute_buffer_usage): * buffer.c (buffer_memory_usage): * buffer.c (buffer_objects_create): * buffer.c (syms_of_buffer): * buffer.c (vars_of_buffer): * console-impl.h (struct console_methods): * dynarr.c (Dynarr_memory_usage): * emacs.c (main_1): * events.c (clear_event_resource): * extents.c: * extents.c (compute_buffer_extent_usage): * extents.c (extent_objects_create): * extents.h: * faces.c: * faces.c (compute_face_cachel_usage): * faces.c (face_objects_create): * faces.h: * general-slots.h: * glyphs.c: * glyphs.c (compute_glyph_cachel_usage): * glyphs.c (glyph_objects_create): * glyphs.h: * lisp.h: * lisp.h (struct usage_stats): * lrecord.h: * lrecord.h (enum lrecord_type): * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (MAKE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (MAKE_MODULE_LISP_OBJECT): * lrecord.h (INIT_LISP_OBJECT): * lrecord.h (INIT_MODULE_LISP_OBJECT): * lrecord.h (UNDEF_LISP_OBJECT): * lrecord.h (UNDEF_MODULE_LISP_OBJECT): * lrecord.h (DECLARE_LISP_OBJECT): * lrecord.h (DECLARE_MODULE_API_LISP_OBJECT): * lrecord.h (DECLARE_MODULE_LISP_OBJECT): * lstream.c: * lstream.c (syms_of_lstream): * lstream.c (vars_of_lstream): * marker.c: * marker.c (compute_buffer_marker_usage): * mc-alloc.c (mc_alloced_storage_size): * mc-alloc.h: * mule-charset.c: * mule-charset.c (struct charset_stats): * mule-charset.c (compute_charset_usage): * mule-charset.c (charset_memory_usage): * mule-charset.c (mule_charset_objects_create): * mule-charset.c (syms_of_mule_charset): * mule-charset.c (vars_of_mule_charset): * redisplay.c: * redisplay.c (compute_rune_dynarr_usage): * redisplay.c (compute_display_block_dynarr_usage): * redisplay.c (compute_glyph_block_dynarr_usage): * redisplay.c (compute_display_line_dynarr_usage): * redisplay.c (compute_line_start_cache_dynarr_usage): * redisplay.h: * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage): * scrollbar-x.c (x_compute_scrollbar_instance_usage): * scrollbar.c (compute_scrollbar_instance_usage): * scrollbar.h: * symbols.c: * symbols.c (reinit_symbol_objects_early): * symbols.c (init_symbols_once_early): * symbols.c (reinit_symbols_early): * symbols.c (defsymbol_massage_name_1): * symsinit.h: * ui-gtk.c: * ui-gtk.c (emacs_gtk_object_getprop): * ui-gtk.c (emacs_gtk_object_putprop): * ui-gtk.c (ui_gtk_objects_create): * unicode.c (compute_from_unicode_table_size_1): * unicode.c (compute_to_unicode_table_size_1): * unicode.c (compute_from_unicode_table_size): * unicode.c (compute_to_unicode_table_size): * window.c: * window.c (struct window_stats): * window.c (compute_window_mirror_usage): * window.c (compute_window_usage): * window.c (window_memory_usage): * window.c (window_objects_create): * window.c (syms_of_window): * window.c (vars_of_window): * window.h: Redo memory-usage mechanism, make it general; add way of dynamically initializing Lisp object types -- OBJECT_HAS_METHOD(), similar to CONSOLE_HAS_METHOD(). (1) Create OBJECT_HAS_METHOD(), OBJECT_HAS_PROPERTY() etc. for specifying that a Lisp object type has a particular method or property. Call such methods with OBJECT_METH, MAYBE_OBJECT_METH, OBJECT_METH_OR_GIVEN; retrieve properties with OBJECT_PROPERTY. Methods that formerly required a DEFINE_*GENERAL_LISP_OBJECT() to specify them (getprop, putprop, remprop, plist, disksave) now instead use the dynamic-method mechanism. The main benefit of this is that new methods or properties can be added without requiring that the declaration statements of all existing methods be modified. We have to make the `struct lrecord_implementation' non-const, but I don't think this should have any effect on speed -- the only possible method that's really speed-critical is the mark method, and we already extract those out into a separate (non-const) array for increased cache locality. Object methods need to be reinitialized after pdump, so we put them in separate functions such as face_objects_create(), extent_objects_create() and call them appropriately from emacs.c The only current object property (`memusage_stats_list') that objects can specify is a Lisp object and gets staticpro()ed so it only needs to be set during dump time, but because it references symbols that might not exist in a syms_of_() function, we initialize it in vars_of_(). There is also an object property (`num_extra_memusage_stats') that is automatically initialized based on `memusage_stats_list'; we do that in reinit_vars_of_alloc(), which is called after all vars_of_() functions are called. `disksaver' method was renamed `disksave' to correspond with the name normally given to the function (e.g. disksave_lstream()). (2) Generalize the memory-usage mechanism in `buffer-memory-usage', `window-memory-usage', `charset-memory-usage' into an object-type- specific mechanism called by a single function `object-memory-usage'. (Former function `object-memory-usage' renamed to `total-object-memory-usage'). Generalize the mechanism of different "slices" so that we can have different "classes" of memory described and different "slices" onto each class; `t' separates classes, `nil' separates slices. Currently we have three classes defined: the memory of an object itself, non-Lisp-object memory associated with the object (e.g. arrays or dynarrs stored as fields in the object), and Lisp-object memory associated with the object (other internal Lisp objects stored in the object). This isn't completely finished yet and we might need to further separate the "other internal Lisp objects" class into two classes. The memory-usage mechanism uses a `struct usage_stats' (renamed from `struct overhead_stats') to describe a malloc-view onto a set of allocated memory (listing how much was requested and various types of overhead) and a more general `struct generic_usage_stats' (with a `struct usage_stats' in it) to hold all statistics about object memory. `struct generic_usage_stats' contains an array of 32 Bytecounts, which are statistics of unspecified semantics. The intention is that individual types declare a corresponding struct (e.g. `struct window_stats') with the same structure but with specific fields in place of the array, corresponding to specific statistics. The number of such statistics is an object property computed from the list of tags (Lisp symbols describing the statistics) stored in `memusage_stats_list'. The idea here is to allow particular object types to customize the number and semantics of the statistics where completely avoiding consing. This doesn't matter so much yet, but the intention is to have the memory usage of all objects computed at the end of GC, at the same time as other statistics are currently computed. The values for all statistics for a single type would be added up to compute aggregate values for all objects of a specific type. To make this efficient, we can't allow any memory allocation at all. (3) Create some additional functions for creating lists that specify the elements directly as args rather than indirectly through an array: listn() (number of args given), listu() (list terminated by Qunbound). (4) Delete a bit of remaining unused C window_config stuff, also unused lrecord_type_popup_data.
author Ben Wing <ben@xemacs.org>
date Thu, 18 Mar 2010 10:50:06 -0500
parents 0f66906b6e37
children ecdd1daab447
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;; test-harness.el --- Run Emacs Lisp test suites.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
1751
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
3 ;;; Copyright (C) 1998, 2002, 2003 Free Software Foundation, Inc.
4856
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
4 ;;; Copyright (C) 2002, 2010 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Author: Martin Buchholz
1761
db7c7e251153 [xemacs-hg @ 2003-10-23 12:48:45 by stephent]
stephent
parents: 1758
diff changeset
7 ;; Maintainer: Stephen J. Turnbull <stephen@xemacs.org>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Keywords: testing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;; along with XEmacs; see the file COPYING. If not, write to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 ;; Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 ;;; Synched up with: Not in FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 ;;; A test suite harness for testing XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;;; The actual tests are in other files in this directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 ;;; Basically you just create files of emacs-lisp, and use the
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
34 ;;; Assert, Check-Error, Check-Message, and Check-Error-Message functions
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
35 ;;; to create tests. See `test-harness-from-buffer' below.
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
36 ;;; Don't suppress tests just because they're due to known bugs not yet
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
37 ;;; fixed -- use the Known-Bug-Expect-Failure and
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
38 ;;; Implementation-Incomplete-Expect-Failure wrapper macros to mark them.
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
39 ;;; A lot of the tests we run push limits; suppress Ebola message with the
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
40 ;;; Ignore-Ebola wrapper macro.
3472
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
41 ;;; Some noisy code will call `message'. Output from `message' can be
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
42 ;;; suppressed with the Silence-Message macro. Functions that are known to
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
43 ;;; issue messages include `write-region', `find-tag', `tag-loop-continue',
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
44 ;;; `insert', and `mark-whole-buffer'. N.B. The Silence-Message macro
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
45 ;;; currently does not suppress the newlines printed by `message'.
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
46 ;;; Definitely do not use Silence-Message with Check-Message.
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
47 ;;; In general it should probably only be used on code that prepares for a
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
48 ;;; test, not on tests.
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
49 ;;;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 ;;; You run the tests using M-x test-emacs-test-file,
5069
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
51 ;;; or $(EMACS) -batch -l test-harness -f batch-test-emacs file ...
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 ;;; which is run for you by the `make check' target in the top-level Makefile.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 (require 'bytecomp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55
3471
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
56 (defvar unexpected-test-suite-failures 0
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
57 "Cumulative number of unexpected failures since test-harness was loaded.
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
58
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
59 \"Unexpected failures\" are those caught by a generic handler established
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
60 outside of the test context. As such they involve an abort of the test
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
61 suite for the file being tested.
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
62
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
63 They often occur during preparation of a test or recording of the results.
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
64 For example, an executable used to generate test data might not be present
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
65 on the system, or a system error might occur while reading a data file.")
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
66
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
67 (defvar unexpected-test-suite-failure-files nil
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
68 "List of test files causing unexpected failures.")
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
69
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
70 ;; Declared for dynamic scope; _do not_ initialize here.
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
71 (defvar unexpected-test-file-failures)
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
72
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
73 (defvar test-harness-bug-expected nil
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
74 "Non-nil means a bug is expected; backtracing/debugging should not happen.")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
75
1758
90502933fb98 [xemacs-hg @ 2003-10-21 08:21:00 by stephent]
stephent
parents: 1751
diff changeset
76 (defvar test-harness-test-compiled nil
4366
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
77 "Non-nil means the test code was compiled before execution.
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
78
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
79 You probably should not make tests depend on compilation.
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
80 However, it can be useful to conditionally change messages based on whether
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
81 the code was compiled or not. For example, the case that motivated the
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
82 implementation of this variable:
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
83
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
84 \(when test-harness-test-compiled
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
85 ;; this ha-a-ack depends on the failing compiled test coming last
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
86 \(setq test-harness-failure-tag
7b628daa39d4 Move debugging code to usage example.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4323
diff changeset
87 \"KNOWN BUG - fix reverted; after 2003-10-31 notify stephen\n\"))")
1758
90502933fb98 [xemacs-hg @ 2003-10-21 08:21:00 by stephent]
stephent
parents: 1751
diff changeset
88
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 (defvar test-harness-verbose
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 (and (not noninteractive) (> (device-baud-rate) search-slow-speed))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 "*Non-nil means print messages describing progress of emacs-tester.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
93 (defvar test-harness-unexpected-error-enter-debugger debug-on-error
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
94 "*Non-nil means enter debugger when an unexpected error occurs.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
95 Only applies interactively. Normally true if `debug-on-error' has been set.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
96 See also `test-harness-assertion-failure-enter-debugger' and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
97 `test-harness-unexpected-error-show-backtrace'.")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
98
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
99 (defvar test-harness-assertion-failure-enter-debugger debug-on-error
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
100 "*Non-nil means enter debugger when an assertion failure occurs.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
101 Only applies interactively. Normally true if `debug-on-error' has been set.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
102 See also `test-harness-unexpected-error-enter-debugger' and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
103 `test-harness-assertion-failure-show-backtrace'.")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
104
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
105 (defvar test-harness-unexpected-error-show-backtrace t
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
106 "*Non-nil means show backtrace upon unexpected error.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
107 Only applies when debugger is not entered. Normally true by default. See also
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
108 `test-harness-unexpected-error-enter-debugger' and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
109 `test-harness-assertion-failure-show-backtrace'.")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
110
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
111 (defvar test-harness-assertion-failure-show-backtrace stack-trace-on-error
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
112 "*Non-nil means show backtrace upon assertion failure.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
113 Only applies when debugger is not entered. Normally true if
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
114 `stack-trace-on-error' has been set. See also
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
115 `test-harness-assertion-failure-enter-debugger' and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
116 `test-harness-unexpected-error-show-backtrace'.")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
117
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
118 (defvar test-harness-file-results-alist nil
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
119 "Each element is a list (FILE SUCCESSES TESTS).
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
120 The order is the reverse of the order in which tests are run.
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
121
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
122 FILE is a string naming the test file.
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
123 SUCCESSES is a non-negative integer, the number of successes.
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
124 TESTS is a non-negative integer, the number of tests run.")
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
125
1425
74cb069b8417 [xemacs-hg @ 2003-04-23 15:42:44 by stephent]
stephent
parents: 1413
diff changeset
126 (defvar test-harness-risk-infloops nil
74cb069b8417 [xemacs-hg @ 2003-04-23 15:42:44 by stephent]
stephent
parents: 1413
diff changeset
127 "*Non-nil to run tests that may loop infinitely in buggy implementations.")
74cb069b8417 [xemacs-hg @ 2003-04-23 15:42:44 by stephent]
stephent
parents: 1413
diff changeset
128
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 (defvar test-harness-current-file nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 (defvar emacs-lisp-file-regexp (purecopy "\\.el\\'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 "*Regexp which matches Emacs Lisp source files.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133
1751
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
134 (defconst test-harness-file-summary-template
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
135 (format "%%-%ds %%%dd of %%%dd tests successful (%%3d%%%%)."
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
136 (length "byte-compiler-tests.el:") ; use the longest file name
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
137 5
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
138 5)
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
139 "Format for summary lines printed after each file is run.")
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
140
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
141 (defconst test-harness-null-summary-template
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
142 (format "%%-%ds No tests run."
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
143 (length "byte-compiler-tests.el:")) ; use the longest file name
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
144 "Format for \"No tests\" lines printed after a file is run.")
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
145
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
146 (defconst test-harness-aborted-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
147 (format "%%-%ds %%%dd tests completed (aborted)."
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
148 (length "byte-compiler-tests.el:") ; use the longest file name
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
149 5)
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
150 "Format for summary lines printed after a test run on a file was aborted.")
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
151
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 ;;;###autoload
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 (defun test-emacs-test-file (filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 "Test a file of Lisp code named FILENAME.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 The output file's name is made by appending `c' to the end of FILENAME."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 (let ((file buffer-file-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (file-name nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 (file-dir nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 (and file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 (eq (cdr (assq 'major-mode (buffer-local-variables)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 'emacs-lisp-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 (setq file-name (file-name-nondirectory file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 file-dir (file-name-directory file)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (list (read-file-name "Test file: " file-dir nil nil file-name))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 ;; Expand now so we get the current buffer's defaults
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 (setq filename (expand-file-name filename))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 ;; If we're testing a file that's in a buffer and is modified, offer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 ;; to save it first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 (or noninteractive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 (let ((b (get-file-buffer (expand-file-name filename))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 (if (and b (buffer-modified-p b)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 (y-or-n-p (format "save buffer %s first? " (buffer-name b))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 (save-excursion (set-buffer b) (save-buffer)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 (if (or noninteractive test-harness-verbose)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 (message "Testing %s..." filename))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 (let ((test-harness-current-file filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 input-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 (setq input-buffer (get-buffer-create " *Test Input*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 (set-buffer input-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 (erase-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 (insert-file-contents filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 ;; Run hooks including the uncompression hook.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 ;; If they change the file name, then change it for the output also.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 (let ((buffer-file-name filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 (default-major-mode 'emacs-lisp-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 (enable-local-eval nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 (normal-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 (setq filename buffer-file-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 (test-harness-from-buffer input-buffer filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 (kill-buffer input-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196
5110
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
197 (defsubst test-harness-backtrace ()
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
198 "Display a reasonable-size backtrace."
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
199 (let ((print-escape-newlines t)
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
200 (print-length 50))
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
201 (backtrace nil t)))
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
202
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
203 (defsubst test-harness-assertion-failure-do-debug (error-info)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
204 "Maybe enter debugger or display a backtrace on assertion failure.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
205 ERROR-INFO is a cons of the args (SIG . DATA) that were passed to `signal'.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
206 The debugger will be entered if noninteractive and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
207 `test-harness-unexpected-error-enter-debugger' is non-nil; else, a
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
208 backtrace will be displayed if `test-harness-unexpected-error-show-backtrace'
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
209 is non-nil."
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
210 (when (not test-harness-bug-expected)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
211 (cond ((and (not noninteractive)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
212 test-harness-assertion-failure-enter-debugger)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
213 (funcall debugger 'error error-info))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
214 (test-harness-assertion-failure-show-backtrace
5110
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
215 (test-harness-backtrace)))))
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
216
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
217 (defsubst test-harness-unexpected-error-do-debug (error-info)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
218 "Maybe enter debugger or display a backtrace on unexpected error.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
219 ERROR-INFO is a cons of the args (SIG . DATA) that were passed to `signal'.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
220 The debugger will be entered if noninteractive and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
221 `test-harness-unexpected-error-enter-debugger' is non-nil; else, a
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
222 backtrace will be displayed if `test-harness-unexpected-error-show-backtrace'
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
223 is non-nil."
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
224 (when (not test-harness-bug-expected)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
225 (cond ((and (not noninteractive)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
226 test-harness-unexpected-error-enter-debugger)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
227 (funcall debugger 'error error-info))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
228 (test-harness-unexpected-error-show-backtrace
5110
b24cf478a45e make test backtraces smaller
Ben Wing <ben@xemacs.org>
parents: 5069
diff changeset
229 (test-harness-backtrace)))))
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
230
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
231 (defsubst test-harness-unexpected-error-condition-handler (error-info context-msg)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
232 "Condition handler for when unexpected errors occur.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
233 Useful in conjunction with `call-with-condition-handler'. ERROR-INFO is the
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
234 value passed to the condition handler. CONTEXT-MSG is a string indicating
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
235 the context in which the unexpected error occurred. A message is outputted
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
236 including CONTEXT-MSG in it, `unexpected-test-file-failures' is incremented,
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
237 and `test-harness-unexpected-error-do-debug' is called, which may enter the
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
238 debugger or output a backtrace, depending on the settings of
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
239 `test-harness-unexpected-error-enter-debugger' and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
240 `test-harness-unexpected-error-show-backtrace'.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
241
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
242 The function returns normally, which causes error-handling processing to
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
243 continue; if you want to catch the error, you also need to wrap everything
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
244 in `condition-case'. See also `test-harness-error-wrap', which does this
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
245 wrapping."
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
246 (incf unexpected-test-file-failures)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
247 (princ (format "Unexpected error %S while %s\n"
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
248 error-info context-msg))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
249 (message "Unexpected error %S while %s." error-info context-msg)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
250 (test-harness-unexpected-error-do-debug error-info))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
251
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
252 (defmacro test-harness-error-wrap (context-msg abort-msg &rest body)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
253 "Wrap BODY so that unexpected errors are caught.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
254 The debugger will be entered if noninteractive and
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
255 `test-harness-unexpected-error-enter-debugger' is non-nil; else, a backtrace
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
256 will be displayed if `test-harness-unexpected-error-show-backtrace' is
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
257 non-nil. CONTEXT-MSG is displayed as part of a message shown before entering
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
258 the debugger or showing a backtrace, and ABORT-MSG, if non-nil, is displayed
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
259 afterwards. See "
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
260 `(condition-case nil
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
261 (call-with-condition-handler
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
262 #'(lambda (error-info)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
263 (test-harness-unexpected-error-condition-handler
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
264 error-info ,context-msg))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
265 #'(lambda ()
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
266 ,@body))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
267 (error ,(if abort-msg `(message ,abort-msg) nil))))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
268
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 (defun test-harness-read-from-buffer (buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 "Read forms from BUFFER, and turn it into a lambda test form."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 (let ((body nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 (goto-char (point-min) buffer)
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
273 (condition-case nil
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
274 (call-with-condition-handler
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
275 #'(lambda (error-info)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
276 ;; end-of-file is expected, so don't output error or backtrace
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
277 ;; or enter debugger in this case.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
278 (unless (eq 'end-of-file (car error-info))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
279 (test-harness-unexpected-error-condition-handler
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
280 error-info "reading forms from buffer")))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
281 #'(lambda ()
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
282 (while t
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
283 (setq body (cons (read buffer) body)))))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
284 (error nil))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 `(lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 (defvar passes)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 (defvar assertion-failures)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 (defvar no-error-failures)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 (defvar wrong-error-failures)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 (defvar missing-message-failures)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 (defvar other-failures)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 (defvar trick-optimizer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 ,@(nreverse body))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 (defun test-harness-from-buffer (inbuffer filename)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 "Run tests in buffer INBUFFER, visiting FILENAME."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 (defvar trick-optimizer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 (let ((passes 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 (assertion-failures 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 (no-error-failures 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 (wrong-error-failures 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 (missing-message-failures 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 (other-failures 0)
3471
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
306 (unexpected-test-file-failures 0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
973
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
308 ;; #### perhaps this should be a defvar, and output at the very end
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
309 ;; OTOH, this way AC types can use a null EMACSPACKAGEPATH to find
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
310 ;; what stuff is needed, and ways to avoid using them
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
311 (skipped-test-reasons (make-hash-table :test 'equal))
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
312
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 (trick-optimizer nil)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
314 (debug-on-error t)
5064
501b5e84f5a7 remove unused var in test-harness
Ben Wing <ben@xemacs.org>
parents: 5040
diff changeset
315 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 (with-output-to-temp-buffer "*Test-Log*"
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
317 (princ (format "Testing %s...\n\n" filename))
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
318
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
319 (defconst test-harness-failure-tag "FAIL")
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
320 (defconst test-harness-success-tag "PASS")
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
321
4891
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
322 ;;;;; BEGIN DEFINITION OF MACROS USEFUL IN TEST CODE
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
323
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
324 (defmacro Known-Bug-Expect-Failure (&rest body)
4891
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
325 "Wrap a BODY that consists of tests that are known to fail.
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
326 This causes messages to be printed on failure indicating that this is expected,
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
327 and on success indicating that this is unexpected."
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
328 `(let ((test-harness-bug-expected t)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
329 (test-harness-failure-tag "KNOWN BUG")
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
330 (test-harness-success-tag "PASS (FAILURE EXPECTED)"))
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
331 ,@body))
4323
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
332
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
333 (defmacro Known-Bug-Expect-Error (expected-error &rest body)
4891
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
334 "Wrap a BODY that consists of tests that are known to trigger an error.
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
335 This causes messages to be printed on failure indicating that this is expected,
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
336 and on success indicating that this is unexpected."
4323
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
337 (let ((quoted-body (if (= 1 (length body))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
338 `(quote ,(car body)) `(quote (progn ,@body)))))
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
339 `(let ((test-harness-bug-expected t)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
340 (test-harness-failure-tag "KNOWN BUG")
4323
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
341 (test-harness-success-tag "PASS (FAILURE EXPECTED)"))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
342 (condition-case error-info
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
343 (progn
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
344 (setq trick-optimizer (progn ,@body))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
345 (Print-Pass
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
346 "%S executed successfully, but expected error %S"
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
347 ,quoted-body
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
348 ',expected-error)
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
349 (incf passes))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
350 (,expected-error
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
351 (Print-Failure "%S ==> error %S, as expected"
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
352 ,quoted-body ',expected-error)
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
353 (incf no-error-failures))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
354 (error
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
355 (Print-Failure "%S ==> expected error %S, got error %S instead"
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
356 ,quoted-body ',expected-error error-info)
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
357 (incf wrong-error-failures))))))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
358
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
359 (defmacro Implementation-Incomplete-Expect-Failure (&rest body)
4891
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
360 "Wrap a BODY containing tests that are known to fail due to incomplete code.
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
361 This causes messages to be printed on failure indicating that the
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
362 implementation is incomplete (and hence the failure is expected); and on
732c35cdded8 fix failing-case output of Assert-test, add Assert-test-not
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
363 success indicating that this is unexpected."
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
364 `(let ((test-harness-bug-expected t)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
365 (test-harness-failure-tag "IMPLEMENTATION INCOMPLETE")
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
366 (test-harness-success-tag "PASS (FAILURE EXPECTED)"))
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
367 ,@body))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
368
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
369 (defun Print-Failure (fmt &rest args)
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
370 (setq fmt (format "%s: %s" test-harness-failure-tag fmt))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
371 (if (noninteractive) (apply #'message fmt args))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
372 (princ (concat (apply #'format fmt args) "\n")))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
373
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
374 (defun Print-Pass (fmt &rest args)
1413
aa15a2bbba1a [xemacs-hg @ 2003-04-15 15:56:56 by stephent]
stephent
parents: 1231
diff changeset
375 (setq fmt (format "%s: %s" test-harness-success-tag fmt))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
376 (and test-harness-verbose
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
377 (princ (concat (apply #'format fmt args) "\n"))))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
378
973
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
379 (defun Print-Skip (test reason &optional fmt &rest args)
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
380 (setq fmt (concat "SKIP: %S BECAUSE %S" fmt))
973
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
381 (princ (concat (apply #'format fmt test reason args) "\n")))
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
382
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
383 (defmacro Skip-Test-Unless (condition reason description &rest body)
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
384 "Unless CONDITION is satisfied, skip test BODY.
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
385 REASON is a description of the condition failure, and must be unique (it
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
386 is used as a hash key). DESCRIPTION describes the tests that were skipped.
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
387 BODY is a sequence of expressions and may contain several tests."
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
388 `(if (not ,condition)
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
389 (let ((count (gethash ,reason skipped-test-reasons)))
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
390 (puthash ,reason (if (null count) 1 (1+ count))
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
391 skipped-test-reasons)
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
392 (Print-Skip ,description ,reason))
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
393 ,@body))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394
4747
294a86d29f99 Eliminate C asserts from c-tests.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4415
diff changeset
395 (defmacro Assert (assertion &optional failing-case description)
294a86d29f99 Eliminate C asserts from c-tests.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 4415
diff changeset
396 "Test passes if ASSERTION is true.
4856
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
397 Optional FAILING-CASE describes the particular failure. Optional
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
398 DESCRIPTION describes the assertion; by default, the unevalated assertion
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
399 expression is given. FAILING-CASE and DESCRIPTION are useful when Assert
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
400 is used in a loop."
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
401 (let ((test-assertion assertion)
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
402 (negated nil))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
403 (when (and (listp test-assertion)
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
404 (= 2 (length test-assertion))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
405 (memq (car test-assertion) '(not null)))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
406 (setq test-assertion (cadr test-assertion))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
407 (setq negated t))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
408 (when (and (listp test-assertion)
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
409 (= 3 (length test-assertion))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
410 (member (car test-assertion)
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
411 '(eq eql equal equalp = string= < <= > >=)))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
412 (let* ((test (car test-assertion))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
413 (testval (second test-assertion))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
414 (expected (third test-assertion))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
415 (failmsg `(format ,(if negated
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
416 "%S shouldn't be `%s' to %S but is"
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
417 "%S should be `%s' to %S but isn't")
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
418 ,testval ',test ,expected)))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
419 (setq failing-case (if failing-case
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
420 `(concat
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
421 (format "%S, " ,failing-case)
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
422 ,failmsg)
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 5110
diff changeset
423 failmsg)))))
4856
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
424 (let ((description
9bf09492cff7 Clean up macro Assert
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
425 (or description `(quote ,assertion))))
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
426 `(condition-case nil
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
427 (call-with-condition-handler
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
428 #'(lambda (error-info)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
429 (if (eq 'cl-assertion-failed (car error-info))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
430 (progn
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
431 (Print-Failure
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
432 (if ,failing-case
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
433 "Assertion failed: %S; failing case = %S"
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
434 "Assertion failed: %S")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
435 ,description ,failing-case)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
436 (incf assertion-failures)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
437 (test-harness-assertion-failure-do-debug error-info))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
438 (Print-Failure
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
439 (if ,failing-case
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
440 "%S ==> error: %S; failing case = %S"
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
441 "%S ==> error: %S")
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
442 ,description error-info ,failing-case)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
443 (incf other-failures)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
444 (test-harness-unexpected-error-do-debug error-info)))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
445 #'(lambda ()
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
446 (assert ,assertion)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
447 (Print-Pass "%S" ,description)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
448 (incf passes)))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
449 (cl-assertion-failed nil))))
2056
ab71063baf27 [xemacs-hg @ 2004-05-03 15:08:41 by james]
james
parents: 1761
diff changeset
450
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 (defmacro Check-Error (expected-error &rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 (let ((quoted-body (if (= 1 (length body))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 `(quote ,(car body)) `(quote (progn ,@body)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 `(condition-case error-info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (setq trick-optimizer (progn ,@body))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
457 (Print-Failure "%S executed successfully, but expected error %S"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 ,quoted-body
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
459 ',expected-error)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 (incf no-error-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 (,expected-error
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
462 (Print-Pass "%S ==> error %S, as expected"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
463 ,quoted-body ',expected-error)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 (incf passes))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 (error
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
466 (Print-Failure "%S ==> expected error %S, got error %S instead"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
467 ,quoted-body ',expected-error error-info)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (incf wrong-error-failures)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
470 (defmacro Check-Error-Message (expected-error expected-error-regexp
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
471 &rest body)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 (let ((quoted-body (if (= 1 (length body))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 `(quote ,(car body)) `(quote (progn ,@body)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 `(condition-case error-info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 (setq trick-optimizer (progn ,@body))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
477 (Print-Failure "%S executed successfully, but expected error %S"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
478 ,quoted-body ',expected-error)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 (incf no-error-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 (,expected-error
4199
3660d327399f [xemacs-hg @ 2007-10-01 08:07:39 by stephent]
stephent
parents: 3472
diff changeset
481 ;; #### Damn, this binding doesn't capture frobs, eg, for
3660d327399f [xemacs-hg @ 2007-10-01 08:07:39 by stephent]
stephent
parents: 3472
diff changeset
482 ;; invalid_argument() ... you only get the REASON. And for
3660d327399f [xemacs-hg @ 2007-10-01 08:07:39 by stephent]
stephent
parents: 3472
diff changeset
483 ;; wrong_type_argument(), there's no reason only FROBs.
3660d327399f [xemacs-hg @ 2007-10-01 08:07:39 by stephent]
stephent
parents: 3472
diff changeset
484 ;; If this gets fixed, fix tests in regexp-tests.el.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 (let ((error-message (second error-info)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 (if (string-match ,expected-error-regexp error-message)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 (progn
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
488 (Print-Pass "%S ==> error %S %S, as expected"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
489 ,quoted-body error-message ',expected-error)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 (incf passes))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
491 (Print-Failure "%S ==> got error %S as expected, but error message %S did not match regexp %S"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
492 ,quoted-body ',expected-error error-message ,expected-error-regexp)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 (incf wrong-error-failures))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 (error
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
495 (Print-Failure "%S ==> expected error %S, got error %S instead"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
496 ,quoted-body ',expected-error error-info)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 (incf wrong-error-failures)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498
3472
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
499 ;; Do not use this with Silence-Message.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 (defmacro Check-Message (expected-message-regexp &rest body)
5069
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
501 (let ((quoted-body (if (= 1 (length body))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
502 `(quote ,(car body))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
503 `(quote (progn ,@body)))))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
504 `(Skip-Test-Unless (fboundp 'defadvice) "can't defadvice"
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
505 expected-message-regexp
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
506 (let ((messages ""))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
507 (defadvice message (around collect activate)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
508 (defvar messages)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
509 (let ((msg-string (apply 'format (ad-get-args 0))))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
510 (setq messages (concat messages msg-string))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
511 msg-string))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
512 (ignore-errors
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
513 (call-with-condition-handler
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
514 #'(lambda (error-info)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
515 (Print-Failure "%S ==> unexpected error %S"
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
516 ,quoted-body error-info)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
517 (incf other-failures)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
518 (test-harness-unexpected-error-do-debug error-info))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
519 #'(lambda ()
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
520 (setq trick-optimizer (progn ,@body))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
521 (if (string-match ,expected-message-regexp messages)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
522 (progn
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
523 (Print-Pass
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
524 "%S ==> value %S, message %S, matching %S, as expected"
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
525 ,quoted-body trick-optimizer messages
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
526 ',expected-message-regexp)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
527 (incf passes))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
528 (Print-Failure
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
529 "%S ==> value %S, message %S, NOT matching expected %S"
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
530 ,quoted-body trick-optimizer messages
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
531 ',expected-message-regexp)
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
532 (incf missing-message-failures)))))
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
533 (ad-unadvise 'message)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534
3472
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
535 ;; #### Perhaps this should override `message' itself, too?
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
536 (defmacro Silence-Message (&rest body)
4323
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
537 `(flet ((append-message (&rest args) ())
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
538 (clear-message (&rest args) ()))
94509abd0ef0 Commit a forgotten chunk of 4d0f773d5e21.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4199
diff changeset
539 ,@body))
3472
43b4a54fbf66 [xemacs-hg @ 2006-06-24 14:30:36 by stephent]
stephent
parents: 3471
diff changeset
540
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 (defmacro Ignore-Ebola (&rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 `(let ((debug-issue-ebola-notices -42)) ,@body))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 (defun Int-to-Marker (pos)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 (set-buffer standard-output)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 (goto-char pos)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 (point-marker))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 (princ "Testing Interpreted Lisp\n\n")
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
552
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
553 (test-harness-error-wrap
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
554 "executing interpreted code"
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
555 "Test suite execution aborted."
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
556 (funcall (test-harness-read-from-buffer inbuffer)))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
557
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 (princ "\nTesting Compiled Lisp\n\n")
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
559
1758
90502933fb98 [xemacs-hg @ 2003-10-21 08:21:00 by stephent]
stephent
parents: 1751
diff changeset
560 (let (code
90502933fb98 [xemacs-hg @ 2003-10-21 08:21:00 by stephent]
stephent
parents: 1751
diff changeset
561 (test-harness-test-compiled t))
5040
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
562 (test-harness-error-wrap
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
563 "byte-compiling code" nil
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
564 (setq code
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
565 ;; our lisp code is often intentionally dubious,
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
566 ;; so throw away _all_ the byte compiler warnings.
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
567 (letf (((symbol-function 'byte-compile-warn)
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
568 'ignore))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
569 (byte-compile (test-harness-read-from-buffer
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
570 inbuffer))))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
571 )
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
572
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
573 (test-harness-error-wrap "executing byte-compiled code"
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
574 "Test suite execution aborted."
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
575 (if code (funcall code)))
3daf9fc57cd4 fixes to test harness to allow backtracing/debugging of failures
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
576 )
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 446
diff changeset
577 (princ (format "\nSUMMARY for %s:\n" filename))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 (princ (format "\t%5d passes\n" passes))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 (princ (format "\t%5d assertion failures\n" assertion-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 (princ (format "\t%5d errors that should have been generated, but weren't\n" no-error-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 (princ (format "\t%5d wrong-error failures\n" wrong-error-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 (princ (format "\t%5d missing-message failures\n" missing-message-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 (princ (format "\t%5d other failures\n" other-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 (let* ((total (+ passes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 assertion-failures
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 no-error-failures
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 wrong-error-failures
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 missing-message-failures
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 other-failures))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 (basename (file-name-nondirectory filename))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 (summary-msg
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
592 (cond ((> unexpected-test-file-failures 0)
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
593 (format test-harness-aborted-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
594 (concat basename ":") total))
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
595 ((> total 0)
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
596 (format test-harness-file-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
597 (concat basename ":")
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
598 passes total (/ (* 100 passes) total)))
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
599 (t
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
600 (format test-harness-null-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
601 (concat basename ":")))))
973
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
602 (reasons ""))
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
603 (maphash (lambda (key value)
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
604 (setq reasons
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
605 (concat reasons
1095
0d33547d9ed3 [xemacs-hg @ 2002-11-11 15:39:03 by stephent]
stephent
parents: 973
diff changeset
606 (format "\n %d tests skipped because %s."
973
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
607 value key))))
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
608 skipped-test-reasons)
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
609 (when (> (length reasons) 1)
ea6a06f7bf2c [xemacs-hg @ 2002-08-22 14:56:23 by stephent]
stephent
parents: 928
diff changeset
610 (setq summary-msg (concat summary-msg reasons "
4415
bceb3e285ae7 case-tests.el: fix it on non-DEBUG_XEMACS; save standard-case-table, use it
Aidan Kehoe <kehoea@parhasard.net>
parents: 4366
diff changeset
611 It may be that XEmacs cannot find your installed packages. Set
bceb3e285ae7 case-tests.el: fix it on non-DEBUG_XEMACS; save standard-case-table, use it
Aidan Kehoe <kehoea@parhasard.net>
parents: 4366
diff changeset
612 EMACSPACKAGEPATH to the package hierarchy root or configure with
bceb3e285ae7 case-tests.el: fix it on non-DEBUG_XEMACS; save standard-case-table, use it
Aidan Kehoe <kehoea@parhasard.net>
parents: 4366
diff changeset
613 --package-path to enable the skipped tests.")))
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
614 (setq test-harness-file-results-alist
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
615 (cons (list filename passes total)
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
616 test-harness-file-results-alist))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 (message "%s" summary-msg))
3471
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
618 (when (> unexpected-test-file-failures 0)
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
619 (setq unexpected-test-suite-failure-files
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
620 (cons filename unexpected-test-suite-failure-files))
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
621 (setq unexpected-test-suite-failures
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
622 (+ unexpected-test-suite-failures unexpected-test-file-failures))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 (message "Test suite execution failed unexpectedly."))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 (fmakunbound 'Assert)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 (fmakunbound 'Check-Error)
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 826
diff changeset
626 (fmakunbound 'Check-Message)
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 826
diff changeset
627 (fmakunbound 'Check-Error-Message)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 (fmakunbound 'Ignore-Ebola)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 (fmakunbound 'Int-to-Marker)
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
630 (and noninteractive
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
631 (message "%s" (buffer-substring-no-properties
1751
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
632 nil nil "*Test-Log*")))
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
633 )))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 (defvar test-harness-results-point-max nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 (defmacro displaying-emacs-test-results (&rest body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 `(let ((test-harness-results-point-max test-harness-results-point-max))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 ;; Log the file name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 (test-harness-log-file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 ;; Record how much is logged now.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 ;; We will display the log buffer if anything more is logged
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 ;; before the end of BODY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 (or test-harness-results-point-max
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 (set-buffer (get-buffer-create "*Test-Log*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 (setq test-harness-results-point-max (point-max))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 (unwind-protect
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 (condition-case error-info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 (progn ,@body)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 (error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 (test-harness-report-error error-info)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 ;; If there were compilation warnings, display them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 (set-buffer "*Test-Log*")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 (if (= test-harness-results-point-max (point-max))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 (if temp-buffer-show-function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 (let ((show-buffer (get-buffer-create "*Test-Log-Show*")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 (set-buffer show-buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 (setq buffer-read-only nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 (erase-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 (copy-to-buffer show-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 (goto-char test-harness-results-point-max)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 (forward-line -1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 (point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 (point-max))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 (funcall temp-buffer-show-function show-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 (select-window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 (prog1 (selected-window)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 (select-window (display-buffer (current-buffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 (goto-char test-harness-results-point-max)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 (recenter 1)))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 (defun batch-test-emacs-1 (file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 (condition-case error-info
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 (progn (test-emacs-test-file file) t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 (error
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 (princ ">>Error occurred processing ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 (princ file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 (princ ": ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 (display-error error-info nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 (defun batch-test-emacs ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 "Run `test-harness' on the files remaining on the command line.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 Use this from the command line, with `-batch';
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 it won't work in an interactive Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 Each file is processed even if an error occurred previously.
5069
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
692 A directory can be given as well, and all files will be processed.
4948
8b230c53075b fix some tests in `make check', also add our own file-tests
Ben Wing <ben@xemacs.org>
parents: 4856
diff changeset
693 For example, invoke \"xemacs -batch -f batch-test-emacs tests\""
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 ;; command-line-args-left is what is left of the command line (from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 ;; startup.el)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 (defvar command-line-args-left) ;Avoid 'free variable' warning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 (defvar debug-issue-ebola-notices)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 (if (not noninteractive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 (error "`batch-test-emacs' is to be used only with -batch"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 (let ((error nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 (dolist (file command-line-args-left)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 (if (file-directory-p file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 (dolist (file-in-dir (directory-files file t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 (when (and (string-match emacs-lisp-file-regexp file-in-dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 (not (or (auto-save-file-name-p file-in-dir)
5069
14f0dd1fabdb move test-harness to lisp/ directory so it gets byte-compiled
Ben Wing <ben@xemacs.org>
parents: 5064
diff changeset
706 (backup-file-name-p file-in-dir))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 (or (batch-test-emacs-1 file-in-dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 (setq error t))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 (or (batch-test-emacs-1 file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 (setq error t))))
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
711 (let ((namelen 0)
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
712 (succlen 0)
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
713 (testlen 0)
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
714 (results test-harness-file-results-alist))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
715 ;; compute maximum lengths of variable components of report
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
716 ;; probably should just use (length "byte-compiler-tests.el")
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
717 ;; and 5-place sizes -- this will also work for the file-by-file
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
718 ;; printing when Adrian's kludge gets reverted
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
719 (flet ((print-width (i)
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
720 (let ((x 10) (y 1))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
721 (while (>= i x)
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
722 (setq x (* 10 x) y (1+ y)))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
723 y)))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
724 (while results
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
725 (let* ((head (car results))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
726 (nn (length (file-name-nondirectory (first head))))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
727 (ss (print-width (second head)))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
728 (tt (print-width (third head))))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
729 (when (> nn namelen) (setq namelen nn))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
730 (when (> ss succlen) (setq succlen ss))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
731 (when (> tt testlen) (setq testlen tt)))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
732 (setq results (cdr results))))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
733 ;; create format and print
1751
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
734 (let ((results (reverse test-harness-file-results-alist)))
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
735 (while results
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
736 (let* ((head (car results))
1751
5a9a66ba67ca [xemacs-hg @ 2003-10-15 08:56:35 by stephent]
stephent
parents: 1722
diff changeset
737 (basename (file-name-nondirectory (first head)))
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
738 (nsucc (second head))
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
739 (ntest (third head)))
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
740 (cond ((member (first head) unexpected-test-suite-failure-files)
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
741 (message test-harness-aborted-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
742 (concat basename ":")
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
743 ntest))
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
744 ((> ntest 0)
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
745 (message test-harness-file-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
746 (concat basename ":")
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
747 nsucc
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
748 ntest
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
749 (/ (* 100 nsucc) ntest)))
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
750 (t
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
751 (message test-harness-null-summary-template
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4891
diff changeset
752 (concat basename ":"))))
3471
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
753 (setq results (cdr results)))))
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
754 (when (> unexpected-test-suite-failures 0)
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
755 (message "\n***** There %s %d unexpected test suite %s in %s:"
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
756 (if (= unexpected-test-suite-failures 1) "was" "were")
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
757 unexpected-test-suite-failures
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
758 (if (= unexpected-test-suite-failures 1) "failure" "failures")
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
759 (if (= (length unexpected-test-suite-failure-files) 1)
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
760 "file"
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
761 "files"))
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
762 (while unexpected-test-suite-failure-files
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
763 (let ((line (pop unexpected-test-suite-failure-files)))
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
764 (while (and (< (length line) 61)
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
765 unexpected-test-suite-failure-files)
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
766 (setq line
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
767 (concat line " "
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
768 (pop unexpected-test-suite-failure-files))))
3b1f8220a65e [xemacs-hg @ 2006-06-24 13:50:19 by stephent]
stephent
parents: 2056
diff changeset
769 (message line)))))
1719
d9c4b6e360d8 [xemacs-hg @ 2003-09-27 06:51:16 by stephent]
stephent
parents: 1717
diff changeset
770 (message "\nDone")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 (kill-emacs (if error 1 0))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 (provide 'test-harness)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 ;;; test-harness.el ends here