diff options
Diffstat (limited to 'test/src/eval-tests.el')
-rw-r--r-- | test/src/eval-tests.el | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/test/src/eval-tests.el b/test/src/eval-tests.el index b62178d9e8b..e4b18ec7849 100644 --- a/test/src/eval-tests.el +++ b/test/src/eval-tests.el @@ -247,4 +247,60 @@ expressions works for identifiers starting with period." (should (equal (string-trim (buffer-string)) expected-messages)))))))) +(defvar-local eval-test--local-var 'global) + +(ert-deftest eval-test--bug62419 () + (with-temp-buffer + (setq eval-test--local-var 'first-local) + (let ((eval-test--local-var t)) + (kill-local-variable 'eval-test--local-var) + (setq eval-test--local-var 'second-local) + (should (eq eval-test--local-var 'second-local))) + ;; FIXME: It's not completely clear if exiting the above `let' + ;; should restore the buffer-local binding to `first-local' + ;; (i.e. reset the value of the second buffer-local binding to the + ;; first's initial value) or should do nothing (on the principle that + ;; the first buffer-local binding doesn't exists any more so there's + ;; nothing to restore). I think both semantics make sense. + ;;(should (eq eval-test--local-var 'first-local)) + ) + (should (eq eval-test--local-var 'global))) + +(ert-deftest eval-tests-defvaralias () + (defvar eval-tests--my-var 'coo) + (defvaralias 'eval-tests--my-var1 'eval-tests--my-var) + (defvar eval-tests--my-var1) + (should (equal eval-tests--my-var 'coo)) + (should (equal eval-tests--my-var1 'coo)) + + (defvaralias 'eval-tests--my-a 'eval-tests--my-b) + (defvaralias 'eval-tests--my-b 'eval-tests--my-c) + + (should-error (defvaralias 'eval-tests--my-c 'eval-tests--my-c) + :type 'cyclic-variable-indirection) + (defvaralias 'eval-tests--my-d 'eval-tests--my-a) + (should-error (defvaralias 'eval-tests--my-c 'eval-tests--my-d) + :type 'cyclic-variable-indirection)) + +(defvar eval-tests/global-var 'value) +(defvar-local eval-tests/buffer-local-var 'value) +(ert-deftest eval-tests/default-value () + ;; `let' overrides the default value for global variables. + (should (default-boundp 'eval-tests/global-var)) + (should (eq 'value (default-value 'eval-tests/global-var))) + (should (eq 'value eval-tests/global-var)) + (let ((eval-tests/global-var 'bar)) + (should (eq 'bar (default-value 'eval-tests/global-var))) + (should (eq 'bar eval-tests/global-var))) + ;; `let' overrides the default value everywhere, but leaves + ;; buffer-local values unchanged in current buffer and in the + ;; buffers where there is no explicitly set buffer-local value. + (should (default-boundp 'eval-tests/buffer-local-var)) + (should (eq 'value (default-value 'eval-tests/buffer-local-var))) + (should (eq 'value eval-tests/buffer-local-var)) + (with-temp-buffer + (let ((eval-tests/buffer-local-var 'bar)) + (should (eq 'bar (default-value 'eval-tests/buffer-local-var))) + (should (eq 'bar eval-tests/buffer-local-var))))) + ;;; eval-tests.el ends here |