1 ;;; undo-tests.el --- Tests of primitive-undo
3 ;; Copyright (C) 2012-2013 Free Software Foundation, Inc.
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-test4
()
144 "Test \\[undo] of \\[flush-lines]."
153 ;; Avoid string-equal because ERT will save the `buffer-string'
154 ;; to the explanation. Using `not' will record nil or non-nil.
157 (string-equal (buffer-string)
159 (flush-lines "oddses" (point-min) (point-max))
163 (buffer-string))))))))
165 (ert-deftest undo-test5
()
166 "Test basic redoing with \\[undo] command."
174 (setq buffer-undo-list
(cons '(0.0 bogus
) buffer-undo-list
))
176 (delete-region (save-excursion
184 (setq buffer-undo-list
(cons "bogus" buffer-undo-list
))
189 (if (and (boundp 'undo-test5-error
) (not undo-test5-error
))
191 (should (null (undo-more 2)))
193 ;; Errors are generated by new Lisp version of
194 ;; `primitive-undo' not by built-in C version.
196 (equal (should-error (undo-more 2))
197 '(error "Unrecognized entry in undo list (0.0 bogus)")))
199 (equal (should-error (undo))
200 '(error "Unrecognized entry in undo list \"bogus\""))))
203 ;; http://debbugs.gnu.org/14824
204 (ert-deftest undo-test-buffer-modified
()
205 "Test undoing marks buffer unmodified."
210 (set-buffer-modified-p nil
)
213 (should-not (buffer-modified-p))))
215 (ert-deftest undo-test-file-modified
()
216 "Test undoing marks buffer visiting file unmodified."
217 (let ((tempfile (make-temp-file "undo-test")))
220 (with-current-buffer (find-file-noselect tempfile
)
223 (set-buffer-modified-p nil
)
226 (should-not (buffer-modified-p))))
227 (delete-file tempfile
))))
229 (defun undo-test-all (&optional interactive
)
230 "Run all tests for \\[undo]."
233 (ert-run-tests-interactively "^undo-")
234 (ert-run-tests-batch "^undo-")))
236 (provide 'undo-tests
)
237 ;;; undo-tests.el ends here