Skip to content

Commit

Permalink
testsuite: allow accepting of fine grained results [skip ci]
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Mistuke committed Mar 31, 2018
1 parent 4de585a commit ca535f9
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
10 changes: 6 additions & 4 deletions testsuite/driver/testglobals.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#
#
# (c) Simon Marlow 2002
#

Expand All @@ -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.

Expand All @@ -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 = ''
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -109,7 +111,7 @@ def __init__(self):
# the timeout program
self.timeout_prog = ''
self.timeout = 300

# threads
self.threads = 1
self.use_threads = 0
Expand Down
14 changes: 12 additions & 2 deletions testsuite/driver/testlib.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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)
Expand Down
12 changes: 12 additions & 0 deletions testsuite/mk/test.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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.
#
# -----------------------------------------------------------------------------

Expand Down Expand Up @@ -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
Expand Down

0 comments on commit ca535f9

Please sign in to comment.