1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
(unless (bound-and-true-p package--initialized)
(setq
package-user-dir (expand-file-name
(format ".cask/%s/elpa" emacs-version)
(file-name-directory load-file-name)))
(package-initialize))
(require 'ert)
(require 'cl)
(require 'bug-hunter)
;; (fset 'bug-hunter--report #'ignore)
;; (fset 'bug-hunter--report-end #'ignore)
(ert-deftest bug-hunter-test ()
(should
(equal [(void-variable not-defined) 5 2 not-defined]
(bug-hunter-hunt
'(((setq test 1) 3 0)
((setq test 2) 4 1)
(not-defined 5 2))
nil)))
(should
(equal [(assertion-triggered t) 2 11 (setq test2 2)]
(bug-hunter-hunt
'(((setq test0 0) 0 9)
((setq test1 1) 1 10)
((setq test2 2) 2 11))
'(ignore-errors (> test2 test1))))))
(ert-deftest bug-hunter-test-nobug ()
(should-error (bug-hunter-hunt
'(((setq test 1) 0 1)
((setq test 2) 0 1))
nil)))
(ert-deftest bug-hunter-test-volcano ()
(should-error
(bug-hunter-hunt nil 'not-defined)))
(ert-deftest bug-hunter-test-interactive ()
(cl-letf (((symbol-function #'y-or-n-p) #'ignore)
((symbol-function #'read-char-choice) #'ignore))
(should-error (bug-hunter-hunt
'(((kill-emacs) 0 1))
'interactive))))
(ert-deftest bug-hunter-looong-hunt ()
(let* ((size 30)
(forms (make-list size '((setq dummy 1) 12 90))))
(dotimes (n size)
(setcar (elt forms (- size n 1)) 'not-defined)
(should
(equal [(void-variable not-defined) 12 90 not-defined]
(bug-hunter-hunt forms nil)))))
(let* ((size 8)
(forms (make-list size '(setq dummy 1))))
(dotimes (n size)
(let ((pos (- size n 1)))
(setf (elt forms pos) 'not-defined)
(should
(equal (vector pos '(bug-caught void-variable not-defined))
(bug-hunter--bisect-start forms nil)))))))
(ert-deftest bug-hunter-reader-error-test ()
(let ((file (expand-file-name "bug-hunter-test-dummy-file"
default-directory)))
(with-temp-file file
(insert "(setq useless 1)\n#\n(setq useless 1)\n"))
(if (< emacs-major-version 30)
(progn
(should
(equal (bug-hunter-file file nil)
[(invalid-read-syntax "#" 3 0) 2 0]))
(should
(equal '(bug-caught (invalid-read-syntax "#" 3 0) 2 0)
(bug-hunter--read-contents file))))
(should
(equal (bug-hunter-file file nil)
[(invalid-read-syntax "#\n" 3 0) 2 0]))
(should
(equal '(bug-caught (invalid-read-syntax "#\n" 3 0) 2 0)
(bug-hunter--read-contents file))))
(with-temp-file file
(insert "(setq useless 1)\n)\n(setq useless 1)\n"))
(should
(equal '(bug-caught (invalid-read-syntax ")" 2 1) 2 0)
(bug-hunter--read-contents file)))
(with-temp-file file
(insert "(setq useless 1)\n(\n(setq useless 1)\n"))
(should
(equal '(bug-caught (end-of-file) 2 0)
(bug-hunter--read-contents file)))))
(provide 'bug-hunter-test)
;;; bug-hunter-test.el ends here
|