Also, add a test to make this problem less likely in the future.
* test/Makefile.in (check-no-automated-subdir): New rule.
(check, check-expensive, check-maybe): Depend on it.
* test/automated/data/xref/file1.txt: Rename to ...
* test/data/xref/file1.txt: ... here.
* test/automated/data/xref/file2.txt: Rename to ...
* test/data/xref/file2.txt: ... here.
* test/automated/xref-tests.el: Rename to ...
* test/lisp/progmodes/xref-tests.el: ... here.
(xref-tests-data-dir): Use EMACS_TEST_DIRECTORY.
$(foreach test,${TESTS},$(eval $(call test_template,${test})))
+## Check that there is no 'automated' subdirectory, which would
+## indicate an incomplete merge from an older version of Emacs where
+## the tests were arranged differently.
+.PHONY: check-no-automated-subdir
+check-no-automated-subdir:
+ test ! -d $(srcdir)/automated
+
## Include dependencies between test files and the files they test.
## We could do this without the file and eval directly, but then we
## would have to run Emacs for every make invocation, and it might not
## be available during clean.
-include make-test-deps.mk
## Rerun all default tests.
-check: mostlyclean
+check: mostlyclean check-no-automated-subdir
@${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
## Rerun all default and expensive tests.
.PHONY: check-expensive
-check-expensive: mostlyclean
+check-expensive: mostlyclean check-no-automated-subdir
@${MAKE} check-doit SELECTOR="${SELECTOR_EXPENSIVE}"
## Re-run all tests which are outdated. A test is outdated if its
## determined by a heuristic and does not identify the full dependency
## graph. See make-test-deps.emacs-lisp for details.
.PHONY: check-maybe
-check-maybe:
+check-maybe: check-no-automated-subdir
@${MAKE} check-doit SELECTOR="${SELECTOR_ACTUAL}"
## Run the tests.
+++ /dev/null
-foo foo
-bar
+++ /dev/null
-;;; xref-tests.el --- tests for xref
-
-;; Copyright (C) 2016 Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov <dgutov@yandex.ru>
-
-;; 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 <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;; Code:
-
-(require 'xref)
-(require 'cl-lib)
-
-(defvar xref-tests-data-dir
- (expand-file-name "data/xref/"
- (file-name-directory (or load-file-name (buffer-file-name)))))
-
-(ert-deftest xref-collect-matches-finds-none-for-some-regexp ()
- (should (null (xref-collect-matches "zzz" "*" xref-tests-data-dir nil))))
-
-(ert-deftest xref-collect-matches-finds-some-for-bar ()
- (let* ((matches (xref-collect-matches "bar" "*" xref-tests-data-dir nil))
- (locs (cl-sort (mapcar #'xref-item-location matches)
- #'string<
- :key #'xref-location-group)))
- (should (= 2 (length matches)))
- (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs))))
- (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 1 locs))))))
-
-(ert-deftest xref-collect-matches-finds-two-matches-on-the-same-line ()
- (let* ((matches (xref-collect-matches "foo" "*" xref-tests-data-dir nil))
- (locs (mapcar #'xref-item-location matches)))
- (should (= 2 (length matches)))
- (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs))))
- (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 1 locs))))
- (should (equal 1 (xref-location-line (nth 0 locs))))
- (should (equal 1 (xref-location-line (nth 1 locs))))
- (should (equal 0 (xref-file-location-column (nth 0 locs))))
- (should (equal 4 (xref-file-location-column (nth 1 locs))))))
-
-(ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match ()
- (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil))
- (locs (mapcar #'xref-item-location matches)))
- (should (= 1 (length matches)))
- (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs))))
- (should (equal 1 (xref-location-line (nth 0 locs))))
- (should (equal 0 (xref-file-location-column (nth 0 locs))))))
-
-(ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-1 ()
- (let* ((xrefs (xref-collect-matches "foo" "*" xref-tests-data-dir nil))
- (iter (xref--buf-pairs-iterator xrefs))
- (cons (funcall iter :next)))
- (should (null (funcall iter :next)))
- (should (string-match "file1\\.txt\\'" (buffer-file-name (car cons))))
- (should (= 2 (length (cdr cons))))))
-
-(ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-2 ()
- (let* ((xrefs (xref-collect-matches "bar" "*" xref-tests-data-dir nil))
- (iter (xref--buf-pairs-iterator xrefs))
- (cons1 (funcall iter :next))
- (cons2 (funcall iter :next)))
- (should (null (funcall iter :next)))
- (should-not (equal (car cons1) (car cons2)))
- (should (= 1 (length (cdr cons1))))
- (should (= 1 (length (cdr cons2))))))
-
-(ert-deftest xref--buf-pairs-iterator-cleans-up-markers ()
- (let* ((xrefs (xref-collect-matches "bar" "*" xref-tests-data-dir nil))
- (iter (xref--buf-pairs-iterator xrefs))
- (cons1 (funcall iter :next))
- (cons2 (funcall iter :next)))
- (funcall iter :cleanup)
- (should (null (marker-position (car (nth 0 (cdr cons1))))))
- (should (null (marker-position (cdr (nth 0 (cdr cons1))))))
- (should (null (marker-position (car (nth 0 (cdr cons2))))))
- (should (null (marker-position (cdr (nth 0 (cdr cons2))))))))
--- /dev/null
+foo foo
+bar
--- /dev/null
+;;; xref-tests.el --- tests for xref
+
+;; Copyright (C) 2016 Free Software Foundation, Inc.
+
+;; Author: Dmitry Gutov <dgutov@yandex.ru>
+
+;; 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 <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'xref)
+(require 'cl-lib)
+
+(defvar xref-tests-data-dir
+ (expand-file-name "data/xref/"
+ (getenv "EMACS_TEST_DIRECTORY")))
+
+(ert-deftest xref-collect-matches-finds-none-for-some-regexp ()
+ (should (null (xref-collect-matches "zzz" "*" xref-tests-data-dir nil))))
+
+(ert-deftest xref-collect-matches-finds-some-for-bar ()
+ (let* ((matches (xref-collect-matches "bar" "*" xref-tests-data-dir nil))
+ (locs (cl-sort (mapcar #'xref-item-location matches)
+ #'string<
+ :key #'xref-location-group)))
+ (should (= 2 (length matches)))
+ (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs))))
+ (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 1 locs))))))
+
+(ert-deftest xref-collect-matches-finds-two-matches-on-the-same-line ()
+ (let* ((matches (xref-collect-matches "foo" "*" xref-tests-data-dir nil))
+ (locs (mapcar #'xref-item-location matches)))
+ (should (= 2 (length matches)))
+ (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 0 locs))))
+ (should (string-match-p "file1\\.txt\\'" (xref-location-group (nth 1 locs))))
+ (should (equal 1 (xref-location-line (nth 0 locs))))
+ (should (equal 1 (xref-location-line (nth 1 locs))))
+ (should (equal 0 (xref-file-location-column (nth 0 locs))))
+ (should (equal 4 (xref-file-location-column (nth 1 locs))))))
+
+(ert-deftest xref-collect-matches-finds-an-empty-line-regexp-match ()
+ (let* ((matches (xref-collect-matches "^$" "*" xref-tests-data-dir nil))
+ (locs (mapcar #'xref-item-location matches)))
+ (should (= 1 (length matches)))
+ (should (string-match-p "file2\\.txt\\'" (xref-location-group (nth 0 locs))))
+ (should (equal 1 (xref-location-line (nth 0 locs))))
+ (should (equal 0 (xref-file-location-column (nth 0 locs))))))
+
+(ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-1 ()
+ (let* ((xrefs (xref-collect-matches "foo" "*" xref-tests-data-dir nil))
+ (iter (xref--buf-pairs-iterator xrefs))
+ (cons (funcall iter :next)))
+ (should (null (funcall iter :next)))
+ (should (string-match "file1\\.txt\\'" (buffer-file-name (car cons))))
+ (should (= 2 (length (cdr cons))))))
+
+(ert-deftest xref--buf-pairs-iterator-groups-markers-by-buffers-2 ()
+ (let* ((xrefs (xref-collect-matches "bar" "*" xref-tests-data-dir nil))
+ (iter (xref--buf-pairs-iterator xrefs))
+ (cons1 (funcall iter :next))
+ (cons2 (funcall iter :next)))
+ (should (null (funcall iter :next)))
+ (should-not (equal (car cons1) (car cons2)))
+ (should (= 1 (length (cdr cons1))))
+ (should (= 1 (length (cdr cons2))))))
+
+(ert-deftest xref--buf-pairs-iterator-cleans-up-markers ()
+ (let* ((xrefs (xref-collect-matches "bar" "*" xref-tests-data-dir nil))
+ (iter (xref--buf-pairs-iterator xrefs))
+ (cons1 (funcall iter :next))
+ (cons2 (funcall iter :next)))
+ (funcall iter :cleanup)
+ (should (null (marker-position (car (nth 0 (cdr cons1))))))
+ (should (null (marker-position (cdr (nth 0 (cdr cons1))))))
+ (should (null (marker-position (car (nth 0 (cdr cons2))))))
+ (should (null (marker-position (cdr (nth 0 (cdr cons2))))))))