1 ;;; viper-tests.el --- tests for viper.
3 ;; Copyright (C) 2016 Free Software Foundation, Inc.
5 ;; This file is part of GNU Emacs.
7 ;; GNU Emacs is free software: you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation, either version 3 of the License, or
10 ;; (at your option) any later version.
12 ;; GNU Emacs is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
27 (defun viper-test-undo-kmacro (kmacro)
28 "In a clean viper buffer, run KMACRO and return `buffer-string'.
30 This function makes as many attempts as possible to clean up
31 after itself, although it will leave a buffer called
32 *viper-test-buffer* if it fails (this is deliberate!)."
34 ;; Viper just turns itself off during batch use.
36 ;; Switch off start up message or it will chew the key presses.
37 (viper-inhibit-startup-message 't
)
38 ;; Select an expert-level for the same reason.
39 (viper-expert-level 5)
40 ;; viper loads this even with -q so make sure it's empty!
41 (viper-custom-file-name (make-temp-file "viper-tests" nil
".elc"))
42 (before-buffer (current-buffer)))
45 ;; viper-mode is essentially global, so set it here.
47 ;; We must switch to buffer because we are using a keyboard macro
48 ;; which appears to not go to the current-buffer but what ever is
49 ;; currently taking keyboard events. We use a named buffer because
50 ;; then we can see what it in it if it all goes wrong.
53 "*viper-test-buffer*"))
55 ;; The new buffer fails to enter vi state so set it.
56 (viper-change-state-to-vi)
58 (execute-kbd-macro kmacro
)
60 (buffer-substring-no-properties
63 ;; Kill the buffer iff the macro succeeds.
66 ;; Switch everything off and restore the buffer.
68 (delete-file viper-custom-file-name
)
69 (switch-to-buffer before-buffer
))))
71 (ert-deftest viper-test-go
()
72 "Test that this file is running."
75 (ert-deftest viper-test-fix
()
76 "Test that the viper kmacro fixture is working."
78 (viper-test-undo-kmacro [])))
80 (ert-deftest viper-test-undo-1
()
81 "Test for VI like undo behaviour.
83 Insert 1, then 2 on consecutive lines, followed by undo. This
84 should leave just 1 in the buffer.
90 (viper-test-undo-kmacro
102 (ert-deftest viper-test-undo-2
()
103 "Test for VI like undo behaviour.
105 Insert \"1 2 3 4 5\" then delete the 2, then the 4, and undo.
106 Should restore the 4, but leave the 2 deleted.
112 (viper-test-undo-kmacro
115 ?
1 ? ?
2 ? ?
3 ? ?
4 ? ?
5
122 (ert-deftest viper-test-undo-3
()
123 "Test for VI like undo behaviour.
125 Insert \"1 2 3 4 5 6\", delete the 2, then the 3 4 and 5.
126 Should restore the 3 4 and 5 but not the 2.
132 (viper-test-undo-kmacro
135 ?i ?
1 ? ?
2 ? ?
3 ? ?
4 ? ?
5 ? ?
6
148 (ert-deftest viper-test-undo-4
()
152 (viper-test-undo-kmacro
161 ;;; viper-tests.el ends here