From ca535f95a742d885c4082c9dc296c151fb3c1e12 Mon Sep 17 00:00:00 2001 From: Tamar Christina Date: Sat, 31 Mar 2018 11:14:17 +0100 Subject: [PATCH] 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 --- testsuite/driver/testglobals.py | 10 ++++++---- testsuite/driver/testlib.py | 14 ++++++++++++-- testsuite/mk/test.mk | 12 ++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py index 44fe125dc5b9..f6831c9ad8e1 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 @@ def __init__(self): # 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 @@ def __init__(self): # 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 @@ def __init__(self): # 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 8bdbedfdcd11..f2bb1c9f0110 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 # -# .stdout[-ws-][-] +# .stdout[-ws-][-|-] # def find_expected_file(name, suff): basename = add_suffix(name, suff) diff --git a/testsuite/mk/test.mk b/testsuite/mk/test.mk index a21c4bb16b3f..1eb8d49c4bee 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