diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/ChangeLog | 5 | ||||
| -rw-r--r-- | test/automated/files.el | 139 |
2 files changed, 123 insertions, 21 deletions
diff --git a/test/ChangeLog b/test/ChangeLog index c3183406ea2..f523f6f59a9 100644 --- a/test/ChangeLog +++ b/test/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2012-08-28 Chong Yidong <cyd@gnu.org> | ||
| 2 | |||
| 3 | * automated/files.el: Test every combination of values for | ||
| 4 | enable-local-variables and enable-local-eval. | ||
| 5 | |||
| 1 | 2012-08-19 Chong Yidong <cyd@gnu.org> | 6 | 2012-08-19 Chong Yidong <cyd@gnu.org> |
| 2 | 7 | ||
| 3 | * redisplay-testsuite.el (test-redisplay): Use switch-to-buffer. | 8 | * redisplay-testsuite.el (test-redisplay): Use switch-to-buffer. |
diff --git a/test/automated/files.el b/test/automated/files.el index e43d8c32f85..b6011395bfd 100644 --- a/test/automated/files.el +++ b/test/automated/files.el | |||
| @@ -21,32 +21,129 @@ | |||
| 21 | 21 | ||
| 22 | (require 'ert) | 22 | (require 'ert) |
| 23 | 23 | ||
| 24 | (defvar files-test-var1 nil) | 24 | ;; Set to t if the local variable was set, `query' if the query was |
| 25 | ;; triggered. | ||
| 26 | (defvar files-test-result) | ||
| 27 | |||
| 28 | (defvar files-test-safe-result) | ||
| 29 | (put 'files-test-safe-result 'safe-local-variable 'booleanp) | ||
| 25 | 30 | ||
| 26 | (defun files-test-fun1 () | 31 | (defun files-test-fun1 () |
| 27 | (setq files-test-var1 t)) | 32 | (setq files-test-result t)) |
| 28 | 33 | ||
| 29 | (ert-deftest files-test-bug12155 () | 34 | ;; Test combinations: |
| 30 | "Test for http://debbugs.gnu.org/12155 ." | 35 | ;; `enable-local-variables' t, nil, :safe, :all, or something else. |
| 31 | (with-temp-buffer | 36 | ;; `enable-local-eval' t, nil, or something else. |
| 32 | (insert "text\n" | 37 | |
| 33 | ";; Local Variables:\n" | 38 | (defvar files-test-local-variable-data |
| 34 | ";; eval: (files-test-fun1)\n" | 39 | ;; Unsafe eval form |
| 35 | ";; End:\n") | 40 | '((("eval: (files-test-fun1)") |
| 36 | (let ((enable-local-variables :safe) | 41 | (t t (eq files-test-result t)) |
| 37 | (enable-local-eval 'maybe)) | 42 | (t nil (eq files-test-result nil)) |
| 38 | (hack-local-variables) | 43 | (t maybe (eq files-test-result 'query)) |
| 39 | (should (eq files-test-var1 nil))))) | 44 | (nil t (eq files-test-result nil)) |
| 45 | (nil nil (eq files-test-result nil)) | ||
| 46 | (nil maybe (eq files-test-result nil)) | ||
| 47 | (:safe t (eq files-test-result nil)) | ||
| 48 | (:safe nil (eq files-test-result nil)) | ||
| 49 | (:safe maybe (eq files-test-result nil)) | ||
| 50 | (:all t (eq files-test-result t)) | ||
| 51 | (:all nil (eq files-test-result nil)) | ||
| 52 | (:all maybe (eq files-test-result t)) ; This combination is ambiguous. | ||
| 53 | (maybe t (eq files-test-result 'query)) | ||
| 54 | (maybe nil (eq files-test-result 'query)) | ||
| 55 | (maybe maybe (eq files-test-result 'query))) | ||
| 56 | ;; Unsafe local variable value | ||
| 57 | (("files-test-result: t") | ||
| 58 | (t t (eq files-test-result 'query)) | ||
| 59 | (t nil (eq files-test-result 'query)) | ||
| 60 | (t maybe (eq files-test-result 'query)) | ||
| 61 | (nil t (eq files-test-result nil)) | ||
| 62 | (nil nil (eq files-test-result nil)) | ||
| 63 | (nil maybe (eq files-test-result nil)) | ||
| 64 | (:safe t (eq files-test-result nil)) | ||
| 65 | (:safe nil (eq files-test-result nil)) | ||
| 66 | (:safe maybe (eq files-test-result nil)) | ||
| 67 | (:all t (eq files-test-result t)) | ||
| 68 | (:all nil (eq files-test-result t)) | ||
| 69 | (:all maybe (eq files-test-result t)) | ||
| 70 | (maybe t (eq files-test-result 'query)) | ||
| 71 | (maybe nil (eq files-test-result 'query)) | ||
| 72 | (maybe maybe (eq files-test-result 'query))) | ||
| 73 | ;; Safe local variable | ||
| 74 | (("files-test-safe-result: t") | ||
| 75 | (t t (eq files-test-safe-result t)) | ||
| 76 | (t nil (eq files-test-safe-result t)) | ||
| 77 | (t maybe (eq files-test-safe-result t)) | ||
| 78 | (nil t (eq files-test-safe-result nil)) | ||
| 79 | (nil nil (eq files-test-safe-result nil)) | ||
| 80 | (nil maybe (eq files-test-safe-result nil)) | ||
| 81 | (:safe t (eq files-test-safe-result t)) | ||
| 82 | (:safe nil (eq files-test-safe-result t)) | ||
| 83 | (:safe maybe (eq files-test-safe-result t)) | ||
| 84 | (:all t (eq files-test-safe-result t)) | ||
| 85 | (:all nil (eq files-test-safe-result t)) | ||
| 86 | (:all maybe (eq files-test-safe-result t)) | ||
| 87 | (maybe t (eq files-test-result 'query)) | ||
| 88 | (maybe nil (eq files-test-result 'query)) | ||
| 89 | (maybe maybe (eq files-test-result 'query))) | ||
| 90 | ;; Safe local variable with unsafe value | ||
| 91 | (("files-test-safe-result: 1") | ||
| 92 | (t t (eq files-test-result 'query)) | ||
| 93 | (t nil (eq files-test-result 'query)) | ||
| 94 | (t maybe (eq files-test-result 'query)) | ||
| 95 | (nil t (eq files-test-safe-result nil)) | ||
| 96 | (nil nil (eq files-test-safe-result nil)) | ||
| 97 | (nil maybe (eq files-test-safe-result nil)) | ||
| 98 | (:safe t (eq files-test-safe-result nil)) | ||
| 99 | (:safe nil (eq files-test-safe-result nil)) | ||
| 100 | (:safe maybe (eq files-test-safe-result nil)) | ||
| 101 | (:all t (eq files-test-safe-result 1)) | ||
| 102 | (:all nil (eq files-test-safe-result 1)) | ||
| 103 | (:all maybe (eq files-test-safe-result 1)) | ||
| 104 | (maybe t (eq files-test-result 'query)) | ||
| 105 | (maybe nil (eq files-test-result 'query)) | ||
| 106 | (maybe maybe (eq files-test-result 'query)))) | ||
| 107 | "List of file-local variable tests. | ||
| 108 | Each list element should have the form | ||
| 109 | |||
| 110 | (LOCAL-VARS-LIST . TEST-LIST) | ||
| 40 | 111 | ||
| 41 | (ert-deftest files-test-disable-local-variables () | 112 | where LOCAL-VARS-LISTS should be a list of local variable |
| 42 | "Test that setting enable-local-variables to nil works." | 113 | definitions (strings) and TEST-LIST is a list of tests to |
| 114 | perform. Each entry of TEST-LIST should have the form | ||
| 115 | |||
| 116 | (ENABLE-LOCAL-VARIABLES ENABLE-LOCAL-EVAL FORM) | ||
| 117 | |||
| 118 | where ENABLE-LOCAL-VARIABLES is the value to assign to | ||
| 119 | `enable-local-variables', ENABLE-LOCAL-EVAL is the value to | ||
| 120 | assign to `enable-local-eval', and FORM is a desired `should' | ||
| 121 | form.") | ||
| 122 | |||
| 123 | (defun file-test--do-local-variables-test (str test-settings) | ||
| 43 | (with-temp-buffer | 124 | (with-temp-buffer |
| 44 | (insert "text\n" | 125 | (insert str) |
| 45 | ";; Local Variables:\n" | 126 | (let ((enable-local-variables (nth 0 test-settings)) |
| 46 | ";; files-test-var1: t\n" | 127 | (enable-local-eval (nth 1 test-settings)) |
| 47 | ";; End:\n") | 128 | (files-test-result nil) |
| 48 | (let ((enable-local-variables nil)) | 129 | (files-test-queried nil) |
| 130 | (files-test-safe-result nil)) | ||
| 49 | (hack-local-variables) | 131 | (hack-local-variables) |
| 50 | (should (eq files-test-var1 nil))))) | 132 | (eval (nth 2 test-settings))))) |
| 133 | |||
| 134 | (ert-deftest files-test-local-variables () | ||
| 135 | "Test the file-local variables implementation." | ||
| 136 | (unwind-protect | ||
| 137 | (progn | ||
| 138 | (defadvice hack-local-variables-confirm (around files-test activate) | ||
| 139 | (setq files-test-result 'query) | ||
| 140 | nil) | ||
| 141 | (dolist (test files-test-local-variable-data) | ||
| 142 | (let ((str (concat "text\n\n;; Local Variables:\n;; " | ||
| 143 | (mapconcat 'identity (car test) "\n;; ") | ||
| 144 | "\n;; End:\n"))) | ||
| 145 | (dolist (subtest (cdr test)) | ||
| 146 | (should (file-test--do-local-variables-test str subtest)))))) | ||
| 147 | (ad-disable-advice 'hack-local-variables-confirm 'around 'files-test))) | ||
| 51 | 148 | ||
| 52 | ;;; files.el ends here | 149 | ;;; files.el ends here |