Subject: Re: bug#30327: 27.0.50; Failures in files-tests.el on macOS

From: Noam Postavsky <[email-masked]>
Date: Sat, 03 Feb 2018 11:29:29 -0500

Alan Third <[email-masked]> writes:

> On Sat, Feb 03, 2018 at 12:47:29AM -0500, Noam Postavsky wrote:
>> Philipp Stephani <[email-masked]> writes:
>> 
>> > The differing element is the last access time. This isn't surprising
>> > given that reading the directory accesses it. Probably the test
>> > should simply ignore the fifth element (the access time). 
>> 
>> Ah, good point.  I went through all the different file handlers pretty
>> quickly when writing these tests, so I missed these details.  It passes
>> for me because I mount with 'relatime'.
>> 
>> Element 9 is "unspecified", so I think we shouldn't check that either.
>
> The patch makes it even worse with two failures now:

Sorry about that, I made some initial fix, then after testing, extended
it, but completely forgot to actually try out the extended version.
Here's a patch actually works on my box (and hopefully on others too).

>From 0276d2e2d438a4f9606e708ef6367800ad7a5bfc Mon Sep 17 00:00:00 2001
From: Noam Postavsky <[email-masked]>
Date: Sat, 3 Feb 2018 00:44:45 -0500
Subject: [PATCH v2] ; Don't require all file-attributes to be equal
 (Bug#30327)

* test/lisp/files-tests.el (files-tests-file-attributes-equal): New
function.
(files-tests-file-name-non-special-directory-files-and-attributes)
(files-tests-file-name-non-special-file-attributes): Use it instead of
`equal'.
---
 test/lisp/files-tests.el | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/test/lisp/files-tests.el b/test/lisp/files-tests.el
index 3879ca8731..2c651c6715 100644
--- a/test/lisp/files-tests.el
+++ b/test/lisp/files-tests.el
@@ -408,10 +408,23 @@ files-tests--with-temp-file
     (should (equal (directory-files nospecial-dir)
                    (directory-files tmpdir)))))
 
+(defun files-tests-file-attributes-equal (attr1 attr2)
+  ;; Element 4 is access time, which may be changed by the act of
+  ;; checking the attributes.
+  (setf (nth 4 attr1) nil)
+  (setf (nth 4 attr2) nil)
+  ;; Element 9 is unspecified.
+  (setf (nth 9 attr1) nil)
+  (setf (nth 9 attr2) nil)
+  (equal attr1 attr2))
+
 (ert-deftest files-tests-file-name-non-special-directory-files-and-attributes ()
   (files-tests--with-temp-non-special (tmpdir nospecial-dir t)
-    (should (equal (directory-files-and-attributes nospecial-dir)
-                   (directory-files-and-attributes tmpdir)))))
+    (cl-loop for (file1 . attr1) in (directory-files-and-attributes nospecial-dir)
+             for (file2 . attr2) in (directory-files-and-attributes tmpdir)
+             do
+             (should (equal file1 file2))
+             (should (files-tests-file-attributes-equal attr1 attr2)))))
 
 (ert-deftest files-tests-file-name-non-special-dired-compress-handler ()
   ;; `dired-compress-file' can get confused by filenames with ":" in
@@ -442,7 +455,8 @@ files-tests--with-temp-file
 
 (ert-deftest files-tests-file-name-non-special-file-attributes ()
   (files-tests--with-temp-non-special (tmpfile nospecial)
-    (should (equal (file-attributes nospecial) (file-attributes tmpfile)))))
+    (should (files-tests-file-attributes-equal
+             (file-attributes nospecial) (file-attributes tmpfile)))))
 
 (ert-deftest files-tests-file-name-non-special-file-directory-p ()
   (files-tests--with-temp-non-special (tmpdir nospecial-dir t)
-- 
2.11.0