aboutsummaryrefslogtreecommitdiff
path: root/compat-tests.el
diff options
context:
space:
mode:
Diffstat (limited to 'compat-tests.el')
-rw-r--r--compat-tests.el81
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