1 ;;; xref-tests.el --- tests for xref
3 ;; Copyright (C) 2016 Free Software Foundation, Inc.
5 ;; Author: Dmitry Gutov <dgutov@yandex.ru>
7 ;; This file is part of GNU Emacs.
9 ;; GNU Emacs is free software: you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation, either version 3 of the License, or
12 ;; (at your option) any later version.
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
29 (defvar xref-tests-data-dir
30 (expand-file-name "data/xref/"
31 (file-name-directory (or load-file-name
(buffer-file-name)))))
33 (ert-deftest xref-collect-matches-finds-none-for-some-regexp
()
34 (should (null (xref-collect-matches "zzz" "*" xref-tests-data-dir nil
))))
36 (ert-deftest xref-collect-matches-finds-some-for-bar
()
37 (let* ((matches (xref-collect-matches "bar" "*" xref-tests-data-dir nil
))
38 (locs (cl-sort (mapcar #'xref-item-location matches
)
40 :key
#'xref-location-group
)))
41 (should (= 2 (length matches
)))
42 (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs
))))
43 (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 1 locs
))))))
45 (ert-deftest xref-collect-matches-finds-two-matches-on-the-same-line
()
46 (let* ((matches (xref-collect-matches "foo" "*" xref-tests-data-dir nil
))
47 (locs (mapcar #'xref-item-location matches
)))
48 (should (= 2 (length matches
)))
49 (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs
))))
50 (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 1 locs
))))
51 (should (equal 1 (xref-location-line (nth 0 locs
))))
52 (should (equal 1 (xref-location-line (nth 1 locs
))))
53 (should (equal 0 (xref-file-location-column (nth 0 locs
))))
54 (should (equal 4 (xref-file-location-column (nth 1 locs
))))))
56 (ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match
()
57 (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil
))
58 (locs (mapcar #'xref-item-location matches
)))
59 (should (= 1 (length matches
)))
60 (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs
))))
61 (should (equal 1 (xref-location-line (nth 0 locs
))))
62 (should (equal 0 (xref-file-location-column (nth 0 locs
))))))
64 (ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-1
()
65 (let* ((xrefs (xref-collect-matches "foo" "*" xref-tests-data-dir nil
))
66 (iter (xref--buf-pairs-iterator xrefs
))
67 (cons (funcall iter
:next
)))
68 (should (null (funcall iter
:next
)))
69 (should (string-match "file1\\.txt\\'" (buffer-file-name (car cons
))))
70 (should (= 2 (length (cdr cons
))))))
72 (ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-2
()
73 (let* ((xrefs (xref-collect-matches "bar" "*" xref-tests-data-dir nil
))
74 (iter (xref--buf-pairs-iterator xrefs
))
75 (cons1 (funcall iter
:next
))
76 (cons2 (funcall iter
:next
)))
77 (should (null (funcall iter
:next
)))
78 (should-not (equal (car cons1
) (car cons2
)))
79 (should (= 1 (length (cdr cons1
))))
80 (should (= 1 (length (cdr cons2
))))))
82 (ert-deftest xref--buf-pairs-iterator-cleans-up-markers
()
83 (let* ((xrefs (xref-collect-matches "bar" "*" xref-tests-data-dir nil
))
84 (iter (xref--buf-pairs-iterator xrefs
))
85 (cons1 (funcall iter
:next
))
86 (cons2 (funcall iter
:next
)))
87 (funcall iter
:cleanup
)
88 (should (null (marker-position (car (nth 0 (cdr cons1
))))))
89 (should (null (marker-position (cdr (nth 0 (cdr cons1
))))))
90 (should (null (marker-position (car (nth 0 (cdr cons2
))))))
91 (should (null (marker-position (cdr (nth 0 (cdr cons2
))))))))