summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamar Christina <tamar@zhox.com>2018-03-31 11:14:17 +0100
committerTamar Christina <tamar@zhox.com>2018-03-31 11:54:36 +0100
commitca535f95a742d885c4082c9dc296c151fb3c1e12 (patch)
tree9fb7620e46bf83337822037b3de786a5fe43567c
parent4de585a5c1ac3edc2914cebcac1753b514051a89 (diff)
downloadhaskell-ca535f95a742d885c4082c9dc296c151fb3c1e12.tar.gz
testsuite: allow accepting of fine grained results [skip ci]
Summary: Sometimes we need to be able to mass accept changes that are platform specific and that can't be normalized away using our string formatters. e.g. differences in I/O manager errors or behaviors. This allows one to do so easier than before and less error prone. I have updated the docs and made it clear this should only be used when a normalizer won't work: https://ghc.haskell.org/trac/ghc/wiki/Building/RunningTests/Updating Test Plan: Manually tested while working on new I/O manager Reviewers: bgamari Subscribers: thomie, carter Differential Revision: https://phabricator.haskell.org/D4549
-rw-r--r--testsuite/driver/testglobals.py10
-rw-r--r--testsuite/driver/testlib.py14
-rw-r--r--testsuite/mk/test.mk12
3 files changed, 30 insertions, 6 deletions
diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py
index 44fe125dc5..f6831c9ad8 100644
--- a/testsuite/driver/testglobals.py
+++ b/testsuite/driver/testglobals.py
@@ -1,4 +1,4 @@
-#
+#
# (c) Simon Marlow 2002
#
@@ -9,7 +9,7 @@
# variable config below. The fields of the structure are filled in by
# the appropriate config script(s) for this compiler/platform, in
# ../config.
-#
+#
# Bits of the structure may also be filled in from the command line,
# via the build system, using the '-e' option to runtests.
@@ -28,6 +28,8 @@ class TestConfig:
# Accept new output which differs from the sample?
self.accept = 0
+ self.accept_platform = 0
+ self.accept_os = 0
# File in which to save the summary
self.summary_file = ''
@@ -70,7 +72,7 @@ class TestConfig:
# Flags we always give to this compiler
self.compiler_always_flags = []
-
+
# Which ways to run tests (when compiling and running respectively)
# Other ways are added from the command line if we have the appropriate
# libraries.
@@ -109,7 +111,7 @@ class TestConfig:
# the timeout program
self.timeout_prog = ''
self.timeout = 300
-
+
# threads
self.threads = 1
self.use_threads = 0
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 8bdbedfdcd..f2bb1c9f01 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -1597,7 +1597,17 @@ def compare_outputs(way, kind, normaliser, expected_file, actual_file,
if_verbose(1, 'Test is expected to fail. Not accepting new output.')
return 0
elif config.accept and actual_raw:
- if_verbose(1, 'Accepting new output.')
+ if config.accept_platform:
+ if_verbose(1, 'Accepting new output for platform "'
+ + config.platform + '".')
+ expected_path += '-' + config.platform
+ elif config.accept_os:
+ if_verbose(1, 'Accepting new output for os "'
+ + config.os + '".')
+ expected_path += '-' + config.os
+ else:
+ if_verbose(1, 'Accepting new output.')
+
write_file(expected_path, actual_raw)
return 1
elif config.accept:
@@ -1914,7 +1924,7 @@ def in_srcdir(name, suffix=''):
# Finding the sample output. The filename is of the form
#
-# <test>.stdout[-ws-<wordsize>][-<platform>]
+# <test>.stdout[-ws-<wordsize>][-<platform>|-<os>]
#
def find_expected_file(name, suff):
basename = add_suffix(name, suff)
diff --git a/testsuite/mk/test.mk b/testsuite/mk/test.mk
index a21c4bb16b..1eb8d49c4b 100644
--- a/testsuite/mk/test.mk
+++ b/testsuite/mk/test.mk
@@ -14,6 +14,9 @@
# CONFIG -- use a different configuration file
# COMPILER -- select a configuration file from config/
# THREADS -- run n tests at once
+# PLATFORM -- if accepting a result, accept it for the current platform.
+# OS -- if accepting a result, accept it for all wordsizes of the
+# current os.
#
# -----------------------------------------------------------------------------
@@ -280,6 +283,15 @@ endif
ifeq "$(accept)" "YES"
setaccept = -e config.accept=1
+
+ifeq "$(PLATFORM)" "YES"
+setaccept += -e config.accept_platform=1
+endif
+
+ifeq "$(OS)" "YES"
+setaccept += -e config.accept_os=1
+endif
+
else
setaccept =
endif