GNU bug report logs - #25534
26.0; xref ERT tests fail when the source path is mixed case

Previous Next

Package: emacs;

Reported by: Wilfred Hughes <me <at> wilfred.me.uk>

Date: Wed, 25 Jan 2017 22:00:02 UTC

Severity: normal

Merged with 27880

Found in versions 25.2, 26.0

Fixed in version 26.2

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Wilfred Hughes <me <at> wilfred.me.uk>
Subject: bug#25534: closed (Re: bug#25534: 26.0; xref ERT tests fail when
 the source path is mixed case)
Date: Wed, 19 Dec 2018 02:22:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#25534: 26.0; xref ERT tests fail when the source path is mixed case

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 25534 <at> debbugs.gnu.org.

-- 
25534: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=25534
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Glenn Morris <rgm <at> gnu.org>
To: 25534-done <at> debbugs.gnu.org
Subject: Re: bug#25534: 26.0;
 xref ERT tests fail when the source path is mixed case
Date: Tue, 18 Dec 2018 21:21:32 -0500
Version: 26.2

In an effort to reduce the number of distropatches in Debian, specifically

https://sources.debian.org/patches/emacs/1:26.1+1-1/0008-Don-t-downcase-real-xref-in-elisp-mode-tests.patch/

I have applied the following:

commit 4c6c327
Date:   Tue Dec 18 21:18:31 2018 -0500

    Restrict downcasing in elisp xref tests (bug#25534)
    
    The tests happen to not fail at the moment because find-library-name
    now has an extra feature, find-library--from-load-history, which
    happens to do a case-insensitive regexp match; but still it seems
    better not to rely on this.
    
    * test/lisp/progmodes/elisp-mode-tests.el (xref--case-insensitive):
    New variable.
    (xref-elisp-test-run, emacs-test-dir): Only downcase if the
    filesystem seems to be case-insensitive.

diff --git a/test/lisp/progmodes/elisp-mode-tests.el b/test/lisp/progmodes/elisp-mode-tests.el
index 941e85b..97148ef 100644
--- a/test/lisp/progmodes/elisp-mode-tests.el
+++ b/test/lisp/progmodes/elisp-mode-tests.el
@@ -298,6 +298,16 @@ xref-elisp-test-descr-to-target
       )))
 
 
+;; tmp may be on a different filesystem to the tests, but, ehh.
+(defvar xref--case-insensitive
+  (let ((dir (make-temp-file "xref-test" t)))
+    (unwind-protect
+        (progn
+          (with-temp-file (expand-file-name "hElLo" dir) "hello")
+          (file-exists-p (expand-file-name "HELLO" dir)))
+      (delete-directory dir t)))
+  "Non-nil if file system seems to be case-insensitive.")
+
 (defun xref-elisp-test-run (xrefs expected-xrefs)
   (should (= (length xrefs) (length expected-xrefs)))
   (while xrefs
@@ -307,11 +317,13 @@ xref-elisp-test-run
            (expected-source (when (consp expected) (cdr expected))))
 
       ;; Downcase the filenames for case-insensitive file systems.
-      (setf (xref-elisp-location-file (oref xref location))
-            (downcase (xref-elisp-location-file (oref xref location))))
+      (when xref--case-insensitive
+        (setf (xref-elisp-location-file (oref xref location))
+              (downcase (xref-elisp-location-file (oref xref location))))
 
-      (setf (xref-elisp-location-file (oref expected-xref location))
-            (downcase (xref-elisp-location-file (oref expected-xref location))))
+        (setf (xref-elisp-location-file (oref expected-xref location))
+              (downcase (xref-elisp-location-file
+                         (oref expected-xref location)))))
 
       (should (equal xref expected-xref))
 
@@ -346,10 +358,10 @@ xref-elisp-deftest
 ;; `load-path' has the correct case, so this causes the expected test
 ;; values to have the wrong case). This is handled in
 ;; `xref-elisp-test-run'.
-(defconst emacs-test-dir
-  (downcase
-   (file-truename (file-name-directory
-		   (or load-file-name (buffer-file-name))))))
+(defvar emacs-test-dir
+  (funcall (if xref--case-insensitive 'downcase 'identity)
+           (file-truename (file-name-directory
+                           (or load-file-name (buffer-file-name))))))
 
 
 ;; alphabetical by test name

[Message part 3 (message/rfc822, inline)]
From: Wilfred Hughes <me <at> wilfred.me.uk>
To: bug-gnu-emacs <at> gnu.org
Subject: 26.0; xref ERT tests fail when the source path is mixed case
Date: Wed, 25 Jan 2017 21:59:13 +0000
[Message part 4 (text/plain, inline)]
The xref tests fail on case sensitive filesystems if the source directory
is not all lower case.

For example, if I have Emacs checked out in /home/wilfred/src/EMACS, I get
the following test failure:

Test xref-elisp-test-find-defs-defalias-defun-el condition:
    (error "Can't find library /home/wilfred/src/emacs/lisp/buff-menu.el")
   FAILED  12/36  xref-elisp-test-find-defs-defalias-defun-el

Note that the path is incorrectly converted from ~/src/EMACS to
~/src/emacs, which doesn't exist.

This causes the following tests to fail:

   FAILED  xref-elisp-test-find-defs-constructor
   FAILED  xref-elisp-test-find-defs-defalias-defun-el
   FAILED  xref-elisp-test-find-defs-defgeneric-co-located-default
   FAILED  xref-elisp-test-find-defs-defgeneric-el
   FAILED  xref-elisp-test-find-defs-defgeneric-implicit-generic
   FAILED  xref-elisp-test-find-defs-defgeneric-no-default
   FAILED  xref-elisp-test-find-defs-defgeneric-no-methods
   FAILED  xref-elisp-test-find-defs-defgeneric-separate-default
   FAILED  xref-elisp-test-find-defs-define-overload-co-located-default
   FAILED  xref-elisp-test-find-defs-define-overload-no-default
   FAILED  xref-elisp-test-find-defs-define-overload-no-methods
   FAILED  xref-elisp-test-find-defs-define-overload-separate-default
   FAILED  xref-elisp-test-find-defs-defun-defvar-el
   FAILED  xref-elisp-test-find-defs-defun-el
   FAILED  xref-elisp-test-find-defs-defun-el-defvar-c
   FAILED  xref-elisp-test-find-defs-defvar-el
   FAILED  xref-elisp-test-find-defs-face-el
   FAILED  xref-elisp-test-find-defs-feature-el
[Message part 5 (text/html, inline)]

This bug report was last modified 6 years and 160 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.