diff options
Diffstat (limited to 'compat-tests.el')
| -rw-r--r-- | compat-tests.el | 81 |
1 files changed, 69 insertions, 12 deletions
diff --git a/compat-tests.el b/compat-tests.el index 13b400b..74def73 100644 --- a/compat-tests.el +++ b/compat-tests.el @@ -75,13 +75,9 @@ (defmacro should-equal (a b) `(should (equal ,a ,b))) -(defmacro compat-tests--if (cond then &rest else) - (declare (indent 2)) - (if (eval cond t) then (macroexp-progn else))) - (ert-deftest compat-loaded-features () (let ((version 0)) - (while (< version 30) + (while (< version 31) (should-equal (> version emacs-major-version) (featurep (intern (format "compat-%s" version)))) (setq version (1+ version))))) @@ -892,7 +888,7 @@ (should-equal (function-alias-p 'compat-tests--alias-a) '(compat-tests--alias-b compat-tests--alias-c)) ;; Emacs 30 disallows cyclic function aliases - (compat-tests--if (>= emacs-major-version 30) + (static-if (>= emacs-major-version 30) (should-error (progn (defalias 'compat-tests--cyclic-alias-a 'compat-tests--cyclic-alias-b) @@ -1329,8 +1325,8 @@ (list (list) (list) (list) (list))))) (ert-deftest compat-xor () - (should (equal (xor 'a nil) 'a)) - (should (equal (xor nil 'b) 'b)) + (should-equal (xor 'a nil) 'a) + (should-equal (xor nil 'b) 'b) (should-not (xor nil nil)) (should-not (xor 'a 'b))) @@ -1897,7 +1893,7 @@ (should-equal '(" abc" " bcd " "cde ") (string-lines " abc\n bcd \ncde ")) ;; NOTE: Behavior for trailing newline was different on Emacs 28 - (compat-tests--if (= emacs-major-version 28) + (static-if (= emacs-major-version 28) (should-equal '("a" "b" "c" "") (string-lines "a\nb\nc\n")) (should-equal '("a" "b" "c") (string-lines "a\nb\nc\n")) (should-equal '("a\n" "\n" "b\n" "c\n") (string-lines "a\n\nb\nc\n" nil t)) @@ -2222,7 +2218,7 @@ (ert-deftest compat-when-let () ;; FIXME Broken on Emacs 25 - (compat-tests--if (= emacs-major-version 25) + (static-if (= emacs-major-version 25) (should-equal "second" (when-let ((x 3) @@ -2252,7 +2248,7 @@ (ert-deftest compat-if-let () ;; FIXME Broken on Emacs 25 - (compat-tests--if (= emacs-major-version 25) + (static-if (= emacs-major-version 25) (should-equal "then" (if-let ((x 3) @@ -2954,7 +2950,7 @@ (should (directory-name-p dir)) (should (file-directory-p dir))) (ert-with-temp-file file :buffer buffer - (should (equal (current-buffer) buffer)) + (should-equal (current-buffer) buffer) (should-equal buffer-file-name file) (should-not (directory-name-p file)) (should (file-readable-p file)) @@ -3012,5 +3008,66 @@ (with-temp-buffer (should-equal (take 3 (widget-create 'key)) '(key :value "")))) +(ert-deftest compat-copy-tree () + ;; Adapted from Emacs /test/lisp/subr-tests.el + ;; Check that values other than conses, vectors and records are + ;; neither copied nor traversed. + (let ((s (propertize "abc" 'prop (list 11 12))) + (h (make-hash-table :test #'equal))) + (puthash (list 1 2) (list 3 4) h) + (dolist (x (list nil 'a "abc" s h)) + (should (eq (compat-call copy-tree x) x)) + (should (eq (compat-call copy-tree x t) x)))) + + (cl-defstruct compat-tests--rec foo) + (let* ((rec (make-compat-tests--rec :foo 1)) + (lst (list rec rec))) + ;; Plain record + (should-equal (compat-call copy-tree rec) rec) + (should-equal (compat-call copy-tree rec t) rec) + (should (eq (compat-call copy-tree rec) rec)) + (should-not (eq (compat-call copy-tree rec t) rec)) + ;; Record inside list + (should-equal (compat-call copy-tree lst) lst) + (should-not (eq (compat-call copy-tree lst) lst)) + (should (eq (car (compat-call copy-tree lst)) rec)) + (should-not (eq (car (compat-call copy-tree lst t)) rec)) + (should (eq (cadr (compat-call copy-tree lst)) rec)) + (should-not (eq (cadr (compat-call copy-tree lst t)) rec)))) + +;; Use the printer to detect common parts of Lisp values. +(let ((print-circle t)) + (cl-labels ((prn3 (x y z) (prin1-to-string (list x y z))) + (cat3 (x y z) (concat "(" x " " y " " z ")"))) + (let ((x '(a (b ((c) . d) e) (f)))) + (should-equal (prn3 x (compat-call copy-tree x) (compat-call copy-tree x t)) + (cat3 "(a (b ((c) . d) e) (f))" + "(a (b ((c) . d) e) (f))" + "(a (b ((c) . d) e) (f))"))))) + +(ert-deftest compat-static-if () + (should-equal "true" (static-if t "true")) + (should-not (static-if nil "true")) + (should-equal "else2" (static-if nil "true" "else1" "else2"))) + +(ert-deftest compat-completion-lazy-hilit () + (let ((completion-lazy-hilit t) + (completion-lazy-hilit-fn (lambda (x) (concat "<" x ">")))) + (should-equal (completion-lazy-hilit "test") "<test>")) + (should-equal (completion-lazy-hilit "test") "test")) + +(ert-deftest compat-merge-ordered-lists () + (should-equal (merge-ordered-lists + '((B A) (C A) (D B) (E D C)) + (lambda (_) (error "cycle"))) + '(E D B C A)) + (should-equal (merge-ordered-lists + '((E D C) (B A) (C A) (D B)) + (lambda (_) (error "cycle"))) + '(E D C B A)) + (should-error (merge-ordered-lists + '((E C D) (B A) (A C) (D B)) + (lambda (_) (error "cycle"))))) + (provide 'compat-tests) ;;; compat-tests.el ends here |
