1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-02-02 13:41:30 -08:00
emacs/test/lisp/apropos-tests.el
Basil L. Contovounesios 9da2efb670 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.
2022-10-22 19:33:12 +03:00

134 lines
5.2 KiB
EmacsLisp

;;; apropos-tests.el --- Tests for apropos.el -*- lexical-binding: t; -*-
;; Copyright (C) 2020-2022 Free Software Foundation, Inc.
;; Author: Simen Heggestøyl <simenheg@gmail.com>
;; Keywords:
;; 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/>.
;;; Commentary:
;;
;;; Code:
(require 'apropos)
(require 'ert)
(ert-deftest apropos-tests-words-to-regexp-1 ()
(let ((re (apropos-words-to-regexp '("foo" "bar") "baz")))
(should (string-match-p re "foobazbar"))
(should (string-match-p re "barbazfoo"))
(should-not (string-match-p re "foo-bar"))
(should-not (string-match-p re "foobazbazbar"))))
(ert-deftest apropos-tests-words-to-regexp-2 ()
(let ((re (apropos-words-to-regexp '("foo" "bar" "baz") "-")))
(should-not (string-match-p re "foo"))
(should-not (string-match-p re "foobar"))
(should (string-match-p re "foo-bar"))
(should (string-match-p re "foo-baz"))))
(ert-deftest apropos-tests-parse-pattern-1 ()
(apropos-parse-pattern '("foo"))
(should (string-match-p apropos-regexp "foo"))
(should (string-match-p apropos-regexp "foo-bar"))
(should (string-match-p apropos-regexp "bar-foo"))
(should (string-match-p apropos-regexp "foo-foo"))
(should-not (string-match-p apropos-regexp "bar")))
(ert-deftest apropos-tests-parse-pattern-2 ()
(apropos-parse-pattern '("foo" "bar"))
(should (string-match-p apropos-regexp "foo-bar"))
(should (string-match-p apropos-regexp "bar-foo"))
(should-not (string-match-p apropos-regexp "foo"))
(should-not (string-match-p apropos-regexp "bar"))
(should-not (string-match-p apropos-regexp "baz"))
(should-not (string-match-p apropos-regexp "foo-foo"))
(should-not (string-match-p apropos-regexp "bar-bar")))
(ert-deftest apropos-tests-parse-pattern-3 ()
(apropos-parse-pattern '("foo" "bar" "baz"))
(should (string-match-p apropos-regexp "foo-bar"))
(should (string-match-p apropos-regexp "foo-baz"))
(should (string-match-p apropos-regexp "bar-foo"))
(should (string-match-p apropos-regexp "bar-baz"))
(should (string-match-p apropos-regexp "baz-foo"))
(should (string-match-p apropos-regexp "baz-bar"))
(should-not (string-match-p apropos-regexp "foo"))
(should-not (string-match-p apropos-regexp "bar"))
(should-not (string-match-p apropos-regexp "baz"))
(should-not (string-match-p apropos-regexp "foo-foo"))
(should-not (string-match-p apropos-regexp "bar-bar"))
(should-not (string-match-p apropos-regexp "baz-baz")))
(ert-deftest apropos-tests-parse-pattern-single-regexp ()
(apropos-parse-pattern "foo+bar")
(should-not (string-match-p apropos-regexp "fobar"))
(should (string-match-p apropos-regexp "foobar"))
(should (string-match-p apropos-regexp "fooobar")))
(ert-deftest apropos-tests-parse-pattern-synonyms ()
(let ((apropos-synonyms '(("find" "open" "edit"))))
(apropos-parse-pattern '("open"))
(should (string-match-p apropos-regexp "find-file"))
(should (string-match-p apropos-regexp "open-file"))
(should (string-match-p apropos-regexp "edit-file"))))
(ert-deftest apropos-tests-calc-scores ()
(let ((str "Return apropos score for string STR."))
(should (equal (apropos-calc-scores str '("apr")) '(7)))
(should (equal (apropos-calc-scores str '("apr" "str")) '(25 7)))
(should (equal (apropos-calc-scores str '("appr" "str")) '(25)))
(should-not (apropos-calc-scores str '("appr" "strr")))))
(ert-deftest apropos-tests-score-str ()
(apropos-parse-pattern '("foo" "bar"))
(should (< (apropos-score-str "baz")
(apropos-score-str "foo baz")
(apropos-score-str "foo bar baz"))))
(ert-deftest apropos-tests-score-doc ()
(apropos-parse-pattern '("foo" "bar"))
(should (< (apropos-score-doc "baz")
(apropos-score-doc "foo baz")
(apropos-score-doc "foo bar baz"))))
(ert-deftest apropos-tests-score-symbol ()
(apropos-parse-pattern '("foo" "bar"))
(should (< (apropos-score-symbol 'baz)
(apropos-score-symbol 'foo-baz)
(apropos-score-symbol 'foo-bar-baz))))
(ert-deftest apropos-tests-true-hit ()
(should-not (apropos-true-hit "foo" '("foo" "bar")))
(should (apropos-true-hit "foo bar" '("foo" "bar")))
(should (apropos-true-hit "foo bar baz" '("foo" "bar"))))
(ert-deftest apropos-tests-format-plist ()
(let ((foo (make-symbol "foo")))
(setplist foo '(a 1 b (2 3) c nil))
(apropos-parse-pattern '("b"))
(should (equal (apropos-format-plist foo ", ")
"a 1, b (2 3), c nil"))
(should (equal (apropos-format-plist foo ", " t)
"b (2 3)"))
(apropos-parse-pattern '("d"))
(should-not (apropos-format-plist foo ", " t))))
(provide 'apropos-tests)
;;; apropos-tests.el ends here