From: Paul Eggert Date: Fri, 6 May 2016 17:09:13 +0000 (-0700) Subject: Port xref-tests to master branch X-Git-Tag: emacs-26.0.90~1991 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=81204b276f849b577a0ccd0b6175353dfa9e2a07;p=emacs.git Port xref-tests to master branch 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. --- diff --git a/test/Makefile.in b/test/Makefile.in index 26d7e591c7a..7ebc0ded4e7 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -148,18 +148,25 @@ endef $(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 @@ -168,7 +175,7 @@ check-expensive: mostlyclean ## 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. diff --git a/test/automated/data/xref/file1.txt b/test/automated/data/xref/file1.txt deleted file mode 100644 index 5d7cc544443..00000000000 --- a/test/automated/data/xref/file1.txt +++ /dev/null @@ -1,2 +0,0 @@ -foo foo -bar diff --git a/test/automated/data/xref/file2.txt b/test/automated/data/xref/file2.txt deleted file mode 100644 index 9f075f26004..00000000000 --- a/test/automated/data/xref/file2.txt +++ /dev/null @@ -1,2 +0,0 @@ - -bar diff --git a/test/automated/xref-tests.el b/test/automated/xref-tests.el deleted file mode 100644 index 079b196aa8b..00000000000 --- a/test/automated/xref-tests.el +++ /dev/null @@ -1,91 +0,0 @@ -;;; xref-tests.el --- tests for xref - -;; Copyright (C) 2016 Free Software Foundation, Inc. - -;; Author: Dmitry Gutov - -;; 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 . - -;;; 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)))))))) diff --git a/test/data/xref/file1.txt b/test/data/xref/file1.txt new file mode 100644 index 00000000000..5d7cc544443 --- /dev/null +++ b/test/data/xref/file1.txt @@ -0,0 +1,2 @@ +foo foo +bar diff --git a/test/data/xref/file2.txt b/test/data/xref/file2.txt new file mode 100644 index 00000000000..9f075f26004 --- /dev/null +++ b/test/data/xref/file2.txt @@ -0,0 +1,2 @@ + +bar diff --git a/test/lisp/progmodes/xref-tests.el b/test/lisp/progmodes/xref-tests.el new file mode 100644 index 00000000000..2b745816c62 --- /dev/null +++ b/test/lisp/progmodes/xref-tests.el @@ -0,0 +1,91 @@ +;;; xref-tests.el --- tests for xref + +;; Copyright (C) 2016 Free Software Foundation, Inc. + +;; Author: Dmitry Gutov + +;; 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 . + +;;; 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))))))))