]> code.delx.au - gnu-emacs/blob - test/automated/imenu-test.el
test/automated/decoder-tests.el: New file
[gnu-emacs] / test / automated / imenu-test.el
1 ;;; imenu-tests.el --- Test suite for imenu.
2
3 ;; Copyright (C) 2013 Free Software Foundation, Inc.
4
5 ;; Author: Masatake YAMATO <yamato@redhat.com>
6 ;; Keywords: tools convenience
7
8 ;; This file is part of GNU Emacs.
9
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation, either version 3 of the License, or
13 ;; (at your option) any later version.
14
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
22
23 ;;; Code:
24
25 (require 'imenu)
26
27 ;; (imenu-simple-scan-deftest-gather-strings-from-list
28 ;; '(nil t 'a (0 . "x") ("c" . "d") ("a" 0 "b") ))
29 ;; => ("b" "a" "d" "c" "x")
30 (defun imenu-simple-scan-deftest-gather-strings-from-list(input)
31 "Gather strings from INPUT, a list."
32 (let ((result ()))
33 (while input
34 (cond
35 ((stringp input)
36 (setq result (cons input result)
37 input nil))
38 ((atom input)
39 (setq input nil))
40 ((listp (car input))
41 (setq result (append
42 (imenu-simple-scan-deftest-gather-strings-from-list (car input))
43 result)
44 input (cdr input)))
45 ((stringp (car input))
46 (setq result (cons (car input) result)
47 input (cdr input)))
48 (t
49 (setq input (cdr input)))))
50 result))
51
52 (defmacro imenu-simple-scan-deftest (name doc major-mode content expected-items)
53 "Generate an ert test for mode-own imenu expression.
54 Run `imenu-create-index-function' at the buffer which content is
55 CONTENT with MAJOR-MODE. A generated test runs `imenu-create-index-function'
56 at the buffer which content is CONTENT with MAJOR-MODE. Then it compares a list
57 of strings which are picked up from the result with EXPECTED-ITEMS."
58 (let ((xname (intern (concat "imenu-simple-scan-deftest-" (symbol-name name)))))
59 `(ert-deftest ,xname ()
60 ,doc
61 (with-temp-buffer
62 (insert ,content)
63 (funcall ',major-mode)
64 (let ((result-items (sort (imenu-simple-scan-deftest-gather-strings-from-list
65 (funcall imenu-create-index-function))
66 #'string-lessp))
67 (expected-items (sort (copy-sequence ,expected-items) #'string-lessp)))
68 (should (equal result-items expected-items))
69 )))))
70
71 (imenu-simple-scan-deftest sh "Test imenu expression for sh-mode." sh-mode "a()
72 {
73 }
74 function b
75 {
76 }
77 function c()
78 {
79 }
80 function ABC_D()
81 {
82 }
83 " '("a" "b" "c" "ABC_D"))
84
85 (provide 'imenu-tests)
86
87 ;;; imenu-tests.el ends here