mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
Audit some plist uses with new predicate argument
* doc/lispref/lists.texi (Plist Access): Improve description of default predicate. * lisp/emacs-lisp/cl-extra.el (cl-getf, cl--set-getf): Assume plist-member always returns a cons. * lisp/emacs-lisp/gv.el (plist-get): Support new optional predicate argument (bug#47425#91). * lisp/emacs-lisp/map.el: Bump minor version. (map--dispatch): Remove now that bug#58563 is fixed. Break two remaining uses out into corresponding cl-defmethods. (map--plist-p): Add docstring. (map--plist-has-predicate, map--plist-member-1, map--plist-member) (map--plist-put-1, map--plist-put): New definitions for supporting predicate argument backward compatibly. (map-elt): Fix generalized variable getter under a predicate (bug#58531). Use predicate when given a plist. (map-put): Avoid gratuitous warnings when called without the hidden predicate argument. Improve obsoletion message. (map-put!): Use predicate when given a plist. (map-contains-key): Ditto. Declare forgotten advertised-calling-convention (bug#58531#19). (map--put): Group definition in file together with that of map-put!. * lisp/files-x.el (connection-local-normalize-criteria): Simplify using mapcan + plist-get. * lisp/net/eudc.el (eudc--plist-member): New convenience function. (eudc-plist-member, eudc-plist-get, eudc-lax-plist-get): Use it instead of open-coding plist-member. * src/fns.c (Fplist_get, plist_get, Fplist_put, plist_put): Pass the plist element as the first argument to the predicate, for consistency with assoc + alist-get. (Fplist_member, plist_member): Move from widget to plist section. Open-code the EQ case in plist_member, and call it from Fplist_member in that case, rather than the other way around. * test/lisp/apropos-tests.el (apropos-tests-format-plist): Avoid polluting obarray. * test/lisp/emacs-lisp/cl-extra-tests.el (cl-getf): Extend test with generalized variables, degenerate plists, and improper lists. * test/lisp/emacs-lisp/gv-tests.el: Byte-compile file; in the meantime bug#24402 seems to have been fixed or worked around. (gv-setter-edebug): Inhibit printing messages. (gv-plist-get): Avoid modifying constant literals. Also test with a predicate argument. * test/lisp/emacs-lisp/map-tests.el (with-maps-do): Simplify docstring. (test-map-elt-testfn): Rename... (test-map-elt-testfn-alist): ...to this. Also test with a predicate argument. (test-map-elt-testfn-plist, test-map-elt-gv, test-map-elt-signature) (test-map-put!-plist, test-map-put!-signature) (test-map-contains-key-signature, test-map-plist-member) (test-map-plist-put): New tests. (test-map-contains-key-testfn): Also test with a predicate argument. (test-map-setf-alist-overwrite-key, test-map-setf-plist-insert-key) (test-map-setf-plist-overwrite-key): Avoid modifying constant literals. (test-hash-table-setf-insert-key) (test-hash-table-setf-overwrite-key): Fix indentation. (test-setf-map-with-function): Make test more precise. * test/lisp/net/eudc-tests.el: New file. * test/lisp/subr-tests.el (test-plistp): Extend test with circular list. * test/src/fns-tests.el (test-cycle-equal, test-cycle-nconc): Move from plist section to circular list section. (plist-put/odd-number-of-elements): Avoid modifying constant literals. (plist-member/improper-list): Simplify. (test-plist): Move to plist section. Also test with a predicate argument.
This commit is contained in:
parent
f85bdb4992
commit
9da2efb670
14 changed files with 649 additions and 250 deletions
155
test/lisp/net/eudc-tests.el
Normal file
155
test/lisp/net/eudc-tests.el
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
;;; eudc-tests.el --- tests for eudc.el -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Free Software Foundation, Inc.
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'eudc)
|
||||
|
||||
(ert-deftest eudc--plist-member ()
|
||||
"Test `eudc--plist-member' behavior."
|
||||
(dolist (obj '(a (a . a) (a a . a)))
|
||||
(should-error (eudc--plist-member obj nil) :type 'wrong-type-argument))
|
||||
(dolist (plist '((nil) (a) (a a a)))
|
||||
(dolist (key '(nil a))
|
||||
(should (equal (should-error (eudc--plist-member plist key))
|
||||
'(error "Malformed plist")))))
|
||||
(let ((-nil (string ?n ?i ?l))
|
||||
(-a (string ?a)))
|
||||
(should-not (eudc--plist-member () nil))
|
||||
(should-not (eudc--plist-member () 'a))
|
||||
(should-not (eudc--plist-member '(nil nil) 'a))
|
||||
(should-not (eudc--plist-member '(nil a) 'a))
|
||||
(should-not (eudc--plist-member '(a nil) nil))
|
||||
(should-not (eudc--plist-member '(a a) nil))
|
||||
(should-not (eudc--plist-member '("nil" a) nil))
|
||||
(should-not (eudc--plist-member '("nil" a) -nil))
|
||||
(should-not (eudc--plist-member '("a" a) nil))
|
||||
(should-not (eudc--plist-member '("a" a) -a))
|
||||
(should-not (eudc--plist-member '(nil a nil a) 'a))
|
||||
(should-not (eudc--plist-member '(nil a "a" a) -a))
|
||||
(should (equal (eudc--plist-member '(nil nil) nil) '(nil nil)))
|
||||
(should (equal (eudc--plist-member '(nil a) nil) '(nil a)))
|
||||
(should (equal (eudc--plist-member '(a nil) 'a) '(a nil)))
|
||||
(should (equal (eudc--plist-member '(a a) 'a) '(a a)))
|
||||
(should (equal (eudc--plist-member '(nil nil a nil) 'a) '(a nil)))
|
||||
(should (equal (eudc--plist-member '(nil a a a) 'a) '(a a)))
|
||||
(should (equal (eudc--plist-member '(a a a a) 'a) '(a a a a)))))
|
||||
|
||||
(ert-deftest eudc-plist-member ()
|
||||
"Test `eudc-plist-member' behavior."
|
||||
(dolist (obj '(a (a . a) (a a . a)))
|
||||
(should-error (eudc-plist-member obj nil) :type 'wrong-type-argument))
|
||||
(dolist (plist '((nil) (a) (a a a)))
|
||||
(dolist (key '(nil a))
|
||||
(should (equal (should-error (eudc-plist-member plist key))
|
||||
'(error "Malformed plist")))))
|
||||
(let ((-nil (string ?n ?i ?l))
|
||||
(-a (string ?a)))
|
||||
(should-not (eudc-plist-member () nil))
|
||||
(should-not (eudc-plist-member () 'a))
|
||||
(should-not (eudc-plist-member '(nil nil) 'a))
|
||||
(should-not (eudc-plist-member '(nil a) 'a))
|
||||
(should-not (eudc-plist-member '(a nil) nil))
|
||||
(should-not (eudc-plist-member '(a a) nil))
|
||||
(should-not (eudc-plist-member '("nil" a) nil))
|
||||
(should-not (eudc-plist-member '("nil" a) -nil))
|
||||
(should-not (eudc-plist-member '("a" a) nil))
|
||||
(should-not (eudc-plist-member '("a" a) -a))
|
||||
(should-not (eudc-plist-member '(nil a nil a) 'a))
|
||||
(should-not (eudc-plist-member '(nil a "a" a) -a))
|
||||
(should (eq t (eudc-plist-member '(nil nil) nil)))
|
||||
(should (eq t (eudc-plist-member '(nil a) nil)))
|
||||
(should (eq t (eudc-plist-member '(a nil) 'a)))
|
||||
(should (eq t (eudc-plist-member '(a a) 'a)))
|
||||
(should (eq t (eudc-plist-member '(nil nil a nil) 'a)))
|
||||
(should (eq t (eudc-plist-member '(nil a a a) 'a)))
|
||||
(should (eq t (eudc-plist-member '(a a a a) 'a)))))
|
||||
|
||||
(ert-deftest eudc-plist-get ()
|
||||
"Test `eudc-plist-get' behavior."
|
||||
(dolist (obj '(a (a . a) (a a . a)))
|
||||
(should-error (eudc-plist-get obj nil) :type 'wrong-type-argument))
|
||||
(dolist (plist '((nil) (a) (a a a)))
|
||||
(dolist (key '(nil a))
|
||||
(should (equal (should-error (eudc-plist-get plist key))
|
||||
'(error "Malformed plist")))))
|
||||
(let ((-nil (string ?n ?i ?l))
|
||||
(-a (string ?a)))
|
||||
(should-not (eudc-plist-get () nil))
|
||||
(should-not (eudc-plist-get () 'a))
|
||||
(should-not (eudc-plist-get '(nil nil) nil))
|
||||
(should-not (eudc-plist-get '(nil nil) 'a))
|
||||
(should-not (eudc-plist-get '(nil a) 'a))
|
||||
(should-not (eudc-plist-get '(a nil) nil))
|
||||
(should-not (eudc-plist-get '(a nil) 'a))
|
||||
(should-not (eudc-plist-get '(a a) nil))
|
||||
(should-not (eudc-plist-get '("nil" a) nil))
|
||||
(should-not (eudc-plist-get '("nil" a) -nil))
|
||||
(should-not (eudc-plist-get '("a" a) nil))
|
||||
(should-not (eudc-plist-get '("a" a) -a))
|
||||
(should-not (eudc-plist-get '(nil nil nil a) nil))
|
||||
(should-not (eudc-plist-get '(nil a nil a) 'a))
|
||||
(should-not (eudc-plist-get '(nil a "a" a) -a))
|
||||
(should-not (eudc-plist-get '(a nil a a) 'a))
|
||||
(should (eq 'a (eudc-plist-get '(nil a) nil)))
|
||||
(should (eq 'a (eudc-plist-get '(a a) 'a)))
|
||||
(should (eq 'a (eudc-plist-get '(a a a nil) 'a)))
|
||||
(should (eq 'b (eudc-plist-get () nil 'b)))
|
||||
(should (eq 'b (eudc-plist-get () 'a 'b)))
|
||||
(should (eq 'b (eudc-plist-get '(nil a "a" a) -a 'b)))
|
||||
(should (eq 'b (eudc-plist-get '(a nil "nil" nil) -nil 'b)))))
|
||||
|
||||
(ert-deftest eudc-lax-plist-get ()
|
||||
"Test `eudc-lax-plist-get' behavior."
|
||||
(dolist (obj '(a (a . a) (a a . a)))
|
||||
(should-error (eudc-lax-plist-get obj nil) :type 'wrong-type-argument))
|
||||
(dolist (plist '((nil) (a) (a a a)))
|
||||
(dolist (key '(nil a))
|
||||
(should (equal (should-error (eudc-lax-plist-get plist key))
|
||||
'(error "Malformed plist")))))
|
||||
(let ((-nil (string ?n ?i ?l))
|
||||
(-a (string ?a)))
|
||||
(should-not (eudc-lax-plist-get () nil))
|
||||
(should-not (eudc-lax-plist-get () 'a))
|
||||
(should-not (eudc-lax-plist-get '(nil nil) nil))
|
||||
(should-not (eudc-lax-plist-get '(nil nil) 'a))
|
||||
(should-not (eudc-lax-plist-get '(nil a) 'a))
|
||||
(should-not (eudc-lax-plist-get '(a nil) nil))
|
||||
(should-not (eudc-lax-plist-get '(a nil) 'a))
|
||||
(should-not (eudc-lax-plist-get '(a a) nil))
|
||||
(should-not (eudc-lax-plist-get '("nil" a) nil))
|
||||
(should-not (eudc-lax-plist-get '("nil" a) 'a))
|
||||
(should-not (eudc-lax-plist-get '("a" a) nil))
|
||||
(should-not (eudc-lax-plist-get '("a" a) 'a))
|
||||
(should-not (eudc-lax-plist-get '(nil nil nil a) nil))
|
||||
(should-not (eudc-lax-plist-get '(nil a nil a) 'a))
|
||||
(should-not (eudc-lax-plist-get '(nil a "a" a) 'a))
|
||||
(should-not (eudc-lax-plist-get '(a nil a a) 'a))
|
||||
(should (eq 'a (eudc-lax-plist-get '(nil a) nil)))
|
||||
(should (eq 'a (eudc-lax-plist-get '(a a) 'a)))
|
||||
(should (eq 'a (eudc-lax-plist-get '(a a a nil) 'a)))
|
||||
(should (eq 'b (eudc-lax-plist-get () nil 'b)))
|
||||
(should (eq 'b (eudc-lax-plist-get () 'a 'b)))
|
||||
(should (eq 'a (eudc-lax-plist-get '("nil" a) -nil)))
|
||||
(should (eq 'a (eudc-lax-plist-get '("a" a) -a)))
|
||||
(should (eq 'a (eudc-lax-plist-get '(nil a "a" a) -a)))
|
||||
(should (eq 'b (eudc-lax-plist-get '(nil a "a" a) 'a 'b)))
|
||||
(should (eq 'b (eudc-lax-plist-get '(a nil "nil" nil) nil 'b)))))
|
||||
|
||||
;;; eudc-tests.el ends here
|
||||
Loading…
Add table
Add a link
Reference in a new issue