1 ;;; undo-tests.el --- Tests of primitive-undo
3 ;; Copyright (C) 2012 Aaron S. Hawley
5 ;; Author: Aaron S. Hawley <aaron.s.hawley@gmail.com>
7 ;; This program is free software: you can redistribute it and/or
8 ;; modify it under the terms of the GNU General Public License as
9 ;; published by the Free Software Foundation, either version 3 of the
10 ;; License, or (at your option) any later version.
12 ;; This program is distributed in the hope that it will be useful, but
13 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 ;; General Public License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with this program. If not, see `http://www.gnu.org/licenses/'.
22 ;; Profiling when the code was translate from C to Lisp on 2012-12-24.
26 ;; (elp-instrument-function 'primitive-undo)
27 ;; (load-file "undo-test.elc")
28 ;; (benchmark 100 '(let ((undo-test5-error nil)) (undo-test-all)))
29 ;; Elapsed time: 305.218000s (104.841000s in 14804 GCs)
31 ;; Function Name Call Count Elapsed Time Average Time
32 ;; primitive-undo 2600 3.4889999999 0.0013419230
36 ;; (load-file "primundo.elc")
37 ;; (elp-instrument-function 'primitive-undo)
38 ;; (benchmark 100 '(undo-test-all))
39 ;; Elapsed time: 295.974000s (104.582000s in 14704 GCs)
41 ;; Function Name Call Count Elapsed Time Average Time
42 ;; primitive-undo 2700 3.6869999999 0.0013655555
48 (ert-deftest undo-test0
()
49 "Test basics of \\[undo]."
55 (unless (string= "No further undo information"
73 (put-text-property (point-min) (point-max) 'face
'bold
)
75 (remove-text-properties (point-min) (point-max) '(face default
))
77 (set-buffer-multibyte (not enable-multibyte-characters
))
81 (equal (should-error (undo-more nil
))
82 '(wrong-type-argument number-or-marker-p nil
)))
84 (should (string-equal "" (buffer-string)))))
86 (ert-deftest undo-test1
()
87 "Test undo of \\[undo] command (redo)."
105 (facemenu-add-face 'bold
(point-min) (point-max))
107 (set-buffer-multibyte (not enable-multibyte-characters
))
110 (string-equal (buffer-string)
118 (ert-deftest undo-test2
()
119 "Test basic redoing with \\[undo] command."
128 (delete-region (save-excursion
137 (string-equal (buffer-string)
143 (ert-deftest undo-test3
()
144 "Test modtime with \\[undo] command."
145 (let ((tmpfile (make-temp-file "undo-test3")))
146 (with-temp-file tmpfile
147 (let ((buffer-file-name tmpfile
))
149 (set (make-local-variable 'make-backup-files
) nil
)
157 (string-equal (buffer-string)
161 (delete-file tmpfile
))))
163 (ert-deftest undo-test4
()
164 "Test \\[undo] of \\[flush-lines]."
173 ;; Avoid string-equal because ERT will save the `buffer-string'
174 ;; to the explanation. Using `not' will record nil or non-nil.
177 (string-equal (buffer-string)
179 (flush-lines "oddses" (point-min) (point-max))
183 (buffer-string))))))))
185 (ert-deftest undo-test5
()
186 "Test basic redoing with \\[undo] command."
194 (setq buffer-undo-list
(cons '(0.0 bogus
) buffer-undo-list
))
196 (delete-region (save-excursion
204 (setq buffer-undo-list
(cons "bogus" buffer-undo-list
))
209 (if (and (boundp 'undo-test5-error
) (not undo-test5-error
))
211 (should (null (undo-more 2)))
213 ;; Errors are generated by new Lisp version of
214 ;; `primitive-undo' not by built-in C version.
216 (equal (should-error (undo-more 2))
217 '(error "Unrecognized entry in undo list (0.0 bogus)")))
219 (equal (should-error (undo))
220 '(error "Unrecognized entry in undo list \"bogus\""))))
223 (defun undo-test-all (&optional interactive
)
224 "Run all tests for \\[undo]."
227 (ert-run-tests-interactively "^undo-")
228 (ert-run-tests-batch "^undo-")))
230 (provide 'undo-tests
)
231 ;;; undo-tests.el ends here