tests: don’t be so strict about timestamps
[debian/gzip] / tests / timestamp
index 7acfe5de6588facb7db113d738fb355ba9b9d0b9..8ef69019e85a47672aea64cb8497bd38e12b5087 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Exercise timestamps.
 
-# Copyright 2016 Free Software Foundation, Inc.
+# Copyright 2016-2017 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # GNU General Public License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
 # limit so don't run it by default.
 
 . "${srcdir=.}/init.sh"; path_prepend_ ..
 
 TZ=UTC0
 export TZ
+oldIFS=$IFS
 
-# On platforms supporting time stamps outside gzip's range,
+# On platforms supporting timestamps outside gzip's range,
 # test that gzip warns when converting them to gzip format.
-for time in 190101010000 196912312359.59 197001010000 210602070628.16; do
+for time_date in \
+    '190101010000~Jan  1  1901' \
+    '196912312359.59~Dec 31  1969' \
+    '197001010000~Jan  1  1970' \
+    '210602070628.16~Feb  7  2106'
+do
+  IFS='~'
+  set $time_date
+  time=$1
+  date=$2
+  IFS=$oldIFS
   if touch -t $time in; then
-     gzip in
-     test $? = 2 || fail=1
+    ls_l=$(ls -l in)
+    case $ls_l in
+      *"$date"*) returns_ 2 gzip in || fail=1;;
+    esac
   fi
   rm -f in.gz in
 done
 
-# Test that time stamps in range for gzip do not generate warnings.
-for time in 197001010000.01 203801190314.07 203801190314.08 210602070628.15; do
+# Test that timestamps in range for gzip do not generate warnings.
+for time_date in \
+    '197001010000.01~Jan  1  1970' \
+    '203801190314.07~Jan 19  2038' \
+    '203801190314.08~Jan 19  2038' \
+    '210602070628.15~Feb  7  2106'
+do
+  IFS='~'
+  set $time_date
+  time=$1
+  date=$2
+  IFS=$oldIFS
   if touch -t $time in; then
-     gzip in || fail=1
+    ls_l=$(ls -l in)
+    case $ls_l in
+      *"$date"*) gzip in || fail=1;;
+    esac
   fi
   rm -f in.gz in
 done
 
-# On platforms that fail to support time stamps within gzip's range,
-# test that gzip warns when converting them from gzip format.
-touch -t 210602070628.15 in || {
-  printf '\037\213\10\0\377\377\377\377\0\377\3\0\0\0\0\0\0\0\0\0' >y2106.gz ||
-    framework_failure_
-  gzip -Nlv <y2106.gz
-  test $? = 2 || fail=1
-}
+# Test that gzip succeeds when converting timestamps from gzip format,
+# or warns that the timestamp is out of time_t range.
+printf '\037\213\10\0\377\377\377\377\0\377\3\0\0\0\0\0\0\0\0\0' >y2106.gz ||
+  framework_failure_
+gzip -Nlv <y2106.gz
+status=$?
+test $status -eq 0 || test $status -eq 2 || fail=1
+
+# Ensure that --no-name does not provoke a timestamp warning.
+: | gzip --no-name > k || fail=1
 
 Exit $fail