changeset: 4344:2511b50f39c687bf48494cc8a640f532b0544acb
user: Stephen J. Turnbull <stephen(a)xemacs.org>
date: Fri Dec 21 03:31:41 2007 -0800
files: tests/ChangeLog tests/reproduce-bugs.el
description:
Refactor reproduce-bugs.el to usable state.
diff -r fb73a2046d3ebae0ec2e0e8df2aaaa254113a458 -r
2511b50f39c687bf48494cc8a640f532b0544acb tests/ChangeLog
--- a/tests/ChangeLog Thu Dec 20 09:51:51 2007 -0700
+++ b/tests/ChangeLog Fri Dec 21 03:31:41 2007 -0800
@@ -1,3 +1,16 @@ 2007-12-11 Aidan Kehoe <kehoea@parhasa
+2007-12-21 Stephen J. Turnbull <stephen(a)xemacs.org>
+
+ * reproduce-bugs.el: Reorganize. Minor cosmetic improvements.
+ Update to-do list.
+ (defbug): Include status and docstring in value.
+ (bug-hashtable): Document the table format.
+ (reproduce-bug): Handle revised table format. Remove broken
+ autoload cookie.
+ (describe-bug): New function. Pop up description of one bug.
+ (list-bugs): New function. Pop up brief descriptions of all bugs.
+ (1,2,3,4,5,6,7,8,9,10,11): (Re)number all bugs. Move comments to
+ docstrings.
+
2007-12-11 Aidan Kehoe <kehoea(a)parhasard.net>
* automated/syntax-tests.el:
diff -r fb73a2046d3ebae0ec2e0e8df2aaaa254113a458 -r
2511b50f39c687bf48494cc8a640f532b0544acb tests/reproduce-bugs.el
--- a/tests/reproduce-bugs.el Thu Dec 20 09:51:51 2007 -0700
+++ b/tests/reproduce-bugs.el Fri Dec 21 03:31:41 2007 -0800
@@ -1,4 +1,4 @@
-;;; reproduce-bugs.el --- reproduce bugs in XEmacs;
+;;; reproduce-bugs.el --- reproduce bugs in XEmacs
;; Copyright (C) 1997 Free Software Foundation, Inc.
;; Copyright (C) 1997 Sun Microsystems, Inc.
@@ -26,63 +26,126 @@
;;; Commentary:
-;; Reproduce XEmacs bugs, so that they can get fixed.
-;; Especially, make XEmacs crash.
+;; Reproduce XEmacs crashes, so that they can get fixed.
+;; A table of bugs is created. You can list, describe, or reproduce bugs.
+
+;; Non-crash bugs should not be in this file; they should be placed in
+;; an appropriate file in the tests/automated suite.
;; You may need to use a debug version of XEmacs to reproduce some of these.
-;; Several global keybindings are created, each of which exhibits a bug.
-
;; For XEmacs maintainers and other masochists.
-
;; It's a bad idea to rely on code in this file continuing to work in
;; the same way. :-)
;; #### This file should be cleaned up and renamed reproduce-crashes.el.
-;; #### Bugs need docstrings.
-;; #### Fixed bugs should become regression tests.
+;; #### Bugs < 11 need to be tested and versions where they pass recorded.
+;; #### Fixed bugs should become regression tests, maybe?
+;; #### Non-crashes should be copied (not moved) to tests/automatic.
+;; #### Do the autoloads make any sense?
+;; #### `list-bugs' should optionally sort on status.
+;; #### Bugs that depend on features (eg, Mule) should check for them and
+;; document them.
;;; Code:
-(defvar bug-hashtable (make-hashtable 10))
-
-(defmacro defbug (bug-number &rest body)
- `(puthash ,bug-number (lambda () ,@body) bug-hashtable))
-
-(put 'defbug 'lisp-indent-function 'defun)
-
-(defconst bug-buffer
- (save-excursion
- (set-buffer (get-buffer-create "*Bug*"))
- (erase-buffer)
- (current-buffer)))
-
-;;;####autoload
+;; UI entry points
+
(defun reproduce-bug (number)
"Reproduce XEmacs bugs, so that they can get fixed.
Especially, make XEmacs crash.
See reproduce-bugs.el for bug descriptions and bug numbers.
A debug version of XEmacs may be needed to reproduce some bugs."
(interactive "nBug Number: ")
- (funcall (gethash number bug-hashtable)))
-
-;;; Change this to your preferred key-binding
-
-;; (global-set-key [(control ?Z)] 'reproduce-bug)
-
+ (funcall (nth 0 (gethash number bug-hashtable))))
+
+(defun describe-bug (number &optional show-code)
+ "Describe the bug with index NUMBER in a popup window.
+If optional argument SHOW-CODE is non-nil, also display the reproduction code."
+ (interactive "nBug number: \ncShow code? [y/N] ")
+ (setq show-code (cond ((not (interactive-p)) show-code)
+ ((member show-code '(?y ?Y)) t)
+ (t nil)))
+ (with-displaying-temp-buffer (format "Bug %d" number)
+ (let ((bug (gethash number bug-hashtable)))
+ (princ (format "Bug #%d is %s.\n%s\n\n%s"
+ number
+ (nth 1 bug)
+ (nth 2 bug)
+ (if show-code (pp-to-string (nth 0 bug)) ""))))))
+
+(defun list-bugs ()
+ "List bugs most recent first, each with brief description in a popup window.
+Assumes a maximum of 999 bugs and a minimum of 80 column width window."
+ (interactive)
+ (with-displaying-temp-buffer "*Bug list*"
+ (princ " # status description\n")
+ (let (buglist)
+ (maphash (lambda (number bug)
+ (push (format "%3d %-9s %s"
+ number
+ (nth 1 bug)
+ (let ((description (nth 2 bug)))
+ (save-match-data
+ (string-match "\\(.*\\)\\(\n\\|$\\)"
+ description)
+ (match-string 1 description))))
+ buglist))
+ bug-hashtable)
+ (setq buglist (sort buglist (lambda (b1 b2) (string< b2 b1))))
+ (while buglist
+ (let ((bug (pop buglist)))
+ (princ (if (< (length bug) 79) bug (substring bug 0 78)))
+ (terpri))))))
+
+;; Database and utilities (internal)
+
+(defvar bug-hashtable (make-hashtable 10)
+ "Table of bugs, keyed by bug index number.
+The value is a list (LAMBDA STATUS DOCSTRING), where LAMBDA is a lambda
+expression reproducing the bug, and STATUS and DOCSTRING describe the bug.
+For details, see `defbug'.")
+
+(put 'defbug 'lisp-indent-function 'defun)
+(defmacro defbug (bug-number status docstring &rest body)
+ "Record a bug with key BUG-NUMBER and value (LAMBDA STATUS DOCSTRING).
+LAMBDA is a lambda expression which when called executes BODY.
+BUG-NUMBER is the bug's index number, a positive integer.
+STATUS is the current status of the bug, one of
+ fixed The bug has been diagnosed and fixed.
+ diagnosed The bug has been localized but not fixed.
+ current The bug has been reported and reproduced but cause is unknown.
+ legacy The bug is undocumented but presumed fixed.
+DOCSTRING should be a string describing the bug, including any relevant
+descriptive information and references to archived mailing list traffic or
+a BTS issue.
+BODY is a sequence of expressions to execute to reproduce the bug."
+ (let ((body (if (stringp docstring) body (cons docstring body)))
+ (docstring (if (stringp docstring) docstring "[docstring omitted]")))
+ `(puthash ,bug-number
+ '((lambda () ,@body) ,status ,docstring)
+ bug-hashtable)))
+
+(defconst bug-buffer
+ (save-excursion
+ (set-buffer (get-buffer-create "*Bug*"))
+ (erase-buffer)
+ (current-buffer)))
+
+
+;;; ------------------------------------------------------------------
;;;; Bugs follow:
-;;; ------------------------------------------------------------------
-;;; Crash in search due to backward movement
-;;; Need Mule build with error checking in 21.5.28.
-;;; Fatal error: assertion failed,
-;;; file /Users/steve/Software/XEmacs/alioth/xemacs/src/search.c, line 1487,
-;;; (this_pos) > ((Bytebpos) 1) && this_pos <= ((buf)->text->z + 0)
-;;; Reported: <475B104F.2070807(a)barco.com>
-;;; <87hcixwkh4.fsf(a)uwakimon.sk.tsukuba.ac.jp>
-;;; Fixed: <87hcixwkh4.fsf(a)uwakimon.sk.tsukuba.ac.jp>
-(defbug 10
+(defbug 11 fixed
+ "Crash in search due to backward movement.
+Need Mule build with error checking in 21.5.28.
+Fatal error: assertion failed,
+file /Users/steve/Software/XEmacs/alioth/xemacs/src/search.c, line 1487,
+(this_pos) > ((Bytebpos) 1) && this_pos <= ((buf)->text->z + 0)
+Reported: <475B104F.2070807(a)barco.com>
+ <87hcixwkh4.fsf(a)uwakimon.sk.tsukuba.ac.jp>
+Fixed: <87hcixwkh4.fsf(a)uwakimon.sk.tsukuba.ac.jp>"
(switch-to-buffer (get-buffer-create "*crash me*"))
- ;; doozy is the keystroke version of the keyboard macro
+ ;; doozy is the keystroke equivalent of the keyboard macro
;; "IAI" C-b C-b C-s C-x
(let ((doozy [;;(control ?x) ?b ?j ?u ?n ?k return
?I ?A ?I
@@ -91,20 +154,18 @@ A debug version of XEmacs may be needed
(execute-kbd-macro doozy)))
-;;; ------------------------------------------------------------------
-;;; Crash on trace-function
-;;; Fatal error: assertion failed, file src/eval.c, line 1405, abort()
-(defbug 1
+(defbug 10 current
+ "Crash on trace-function
+Fatal error: assertion failed, file src/eval.c, line 1405, abort()"
(trace-function 'record-buffer bug-buffer)
(pop-to-buffer bug-buffer))
-;;; ------------------------------------------------------------------
-;;; Crashes with stack overflow
-;;; Should give error via barf-if-buffer-read-only
-;;; Fatal error: assertion failed, file src/eval.c, line 1874, abort()
-;; This bug has been fixed. -sb
-(defbug 2
+(defbug 9 current
+ "Crashes with stack overflow
+Should give error via barf-if-buffer-read-only
+Fatal error: assertion failed, file src/eval.c, line 1874, abort()
+This bug has been fixed. -sb"
(switch-to-buffer bug-buffer)
;; The following line should contain a number of eight-bit characters
(insert
"²èÌÌËè€Î°ÜÆ°€Ï€Ç€€ë€è€Š€Ë€Ê€ê€Þ€·€¿¡£º£Åـϡ¢²èÌÌ€ÎÃæ€Ç¡¢ÆÃÄê€ÎŸì")
@@ -114,11 +175,10 @@ A debug version of XEmacs may be needed
(garbage-collect))
-;;; ------------------------------------------------------------------
-;;; Crashes in debug version only
-;;; Fatal error: assertion failed, file src/objects.h, line 149,
-;;; RECORD_TYPEP (_obj, lrecord_font_instance) || MARKED_RECORD_P (_obj)
-(defbug 3
+(defbug 8 current
+ "Crashes in debug version only
+Fatal error: assertion failed, file src/objects.h, line 149,
+RECORD_TYPEP (_obj, lrecord_font_instance) || MARKED_RECORD_P (_obj)"
(let (glyph ext)
(make-face 'adobe-symbol-face)
(set-face-font
@@ -131,20 +191,47 @@ A debug version of XEmacs may be needed
(set-extent-property ext 'begin-glyph glyph)))
-;;; ------------------------------------------------------------------
-;;; (maybe?) crash koi8
-;;; ACCL: Invalid command (c)
-;;; With debugging on, crashes as follows:
-;;; Fatal error: assertion failed, file src/lisp.h, line 1227, INTP (obj)
-(defbug 5
+(defbug 7 current
+ "(maybe?) crash koi8
+ACCL: Invalid command (c)
+With debugging on, crashes as follows:
+Fatal error: assertion failed, file src/lisp.h, line 1227, INTP (obj)"
;;(load "cyrillic")
;;(load "cyrillic-hooks")
(princ (decode-coding-string "\xe1" 'koi8)))
-;;; ------------------------------------------------------------------
-;;; Completely Uninterruptible hang in re-search-backward (Was: java-mode)
-(defbug 6
+(defbug 6 current
+ "regexp crash
+This doesn't crash for me. -sb"
+ (string-match "\\(\\s-\\|$\\)" "å"))
+
+
+(defbug 5 legacy
+ "`subst-char-in-region' moves point."
+ (interactive)
+ (with-temp-buffer
+ (insert "abc")
+ (forward-char -1)
+ (subst-char-in-region 1 4 ?b ?\344)
+ (if (not (= (point) 3))
+ (message "Bug! point should equal 3 but is %d" (point)))))
+
+
+(defbug 4 legacy
+ "Infinite recursion crash - Segmentation Fault"
+ (switch-to-buffer bug-buffer)
+ (insert "abcdefg")
+ (setq e (make-extent 1 4))
+ (set-extent-property e 'face 'bold)
+ (set-extent-property e 'duplicable t)
+ (set-extent-property e 'replicating t)
+ (insert (buffer-string))
+ (delete-region 8 9))
+
+
+(defbug 3 current
+ "Completely Uninterruptible hang in re-search-backward (Was: java-mode)"
(switch-to-buffer bug-buffer)
(insert "{
public static void main(String[] args) throws java.io.IOException
@@ -159,62 +246,32 @@ public static void main(String[] args) t
"^\\s(\\|\\(^[
\t]*\\(\\(\\(public\\|protected\\|static\\)\\s-+\\)*\\(\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*[][_$.a-zA-Z0-9]+\\|[[a-zA-Z]\\)\\s-*\\)\\s-+\\)\\)?\\(\\([[a-zA-Z][][_$.a-zA-Z0-9]*\\s-+\\)\\s-*\\)?\\([_a-zA-Z][^][
\t:;.,{}()=]*\\|\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)\\)\\s-*\\(([^);{}]*)\\)?\\([]
\t]*\\)\\(\\s-*\\<throws\\>\\s-*\\(\\([_$a-zA-Z][_$.a-zA-Z0-9]*\\)[,
\t\n\r\f]*\\)+\\)?\\s-*\\)\\s("))
-;;; ------------------------------------------------------------------
-;;; regexp crash
-;; This doesn't crash for me. -sb
-(defbug 7
- (string-match "\\(\\s-\\|$\\)" "å"))
-
-
-;;;; -------------------------------------------------------------------
-;;;; Bugs below this line have been fixed.
-;;;; Keep these for regression testing
-;;;; -------------------------------------------------------------------
-
-
-;;; ------------------------------------------------------------------
-;;; Infinite recursion crash - Segmentation Fault
-(defbug 4
- (switch-to-buffer bug-buffer)
- (insert "abcdefg")
- (setq e (make-extent 1 4))
- (set-extent-property e 'face 'bold)
- (set-extent-property e 'duplicable t)
- (set-extent-property e 'replicating t)
- (insert (buffer-string))
- (delete-region 8 9))
-
-(defbug 5
- (interactive)
- (with-temp-buffer
- (insert "abc")
- (forward-char -1)
- (subst-char-in-region 1 4 ?b ?\344)
- (if (not (= (point) 3))
- (message "Bug! point should equal 3 but is %d" (point)))))
-
-;;; crash popup frames FIXED
-;; defbug 8
-;;(global-set-key
-;; [(alt meta control f12)]
-;; (lambda ()
-;; (interactive)
-;; (let ((f (selected-frame)))
-;; (make-frame `(popup ,(selected-frame)))
-;; (make-frame)
-;; (sit-for 0)
-;; (delete-frame f)
-;; (save-buffers-kill-emacs))))
-
-;;; crash on delete-frame-hook - FIXED!
-;; defbug 9
-;;(global-set-key
-;; [(alt meta control f10)]
-;; (lambda ()
-;; (interactive)
-;; (setq delete-frame-hook
-;; (lambda (frame)
-;; (select-frame frame)
-;; (kill-buffer (window-buffer (frame-selected-window frame)))))))
+(defbug 2 legacy
+ "crash popup frames
+FIXED
+#### This bug is not understood, and may be incomplete. See source."
+ (lambda ()
+ (let ((f (selected-frame)))
+ (make-frame `(popup ,(selected-frame)))
+ (make-frame)
+ (sit-for 0)
+ (delete-frame f)
+ ;; #### Check whether this is needed.
+ ;; (save-buffers-kill-emacs5)
+ )))
+
+
+(defbug 1 legacy
+ "crash on delete-frame-hook
+FIXED!
+#### This bug is not understood, and seems to be incomplete. See source."
+ (lambda ()
+ ;; #### Should this be add-hook instead of setq?
+ (setq delete-frame-hook
+ (lambda (frame)
+ (select-frame frame)
+ (kill-buffer (window-buffer (frame-selected-window frame)))
+ ;; #### Do we need to delete a frame here or something?
+ ))))
;;; reproduce-bugs.el ends here
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches