[Git][ghc/ghc][wip/warn-and-run] Add warn_and_run test kind

Oleg Grenrus (@phadej) gitlab at gitlab.haskell.org
Wed Jun 21 11:46:13 UTC 2023



Oleg Grenrus pushed to branch wip/warn-and-run at Glasgow Haskell Compiler / GHC


Commits:
0876faad by Oleg Grenrus at 2023-06-21T14:46:00+03:00
Add warn_and_run test kind

This is a compile_and_run variant which also captures the GHC's
stderr. The warn_and_run name is best I can come up with,
as compile_and_run is taken.

This is useful specifically for testing warnings.  We want to test that
when warning triggers, and it's not a false positive, i.e. that the
runtime behaviour is indeed "incorrect".

As an example a single test is altered to use warn_and_run

- - - - -


5 changed files:

- testsuite/driver/testlib.py
- testsuite/tests/rename/should_compile/all.T
- testsuite/tests/rename/should_compile/rn039.stderr → testsuite/tests/rename/should_compile/rn039.ghc.stderr
- testsuite/tests/rename/should_compile/rn039.hs
- + testsuite/tests/rename/should_compile/rn039.stdout


Changes:

=====================================
testsuite/driver/testlib.py
=====================================
@@ -1620,7 +1620,8 @@ async def compile_and_run__(name: TestName,
                       top_mod: Path,
                       extra_mods: List[str],
                       extra_hc_opts: str,
-                      backpack: bool=False
+                      backpack: bool=False,
+                      compile_stderr: bool=False
                       ) -> PassFail:
     # print 'Compile and run, extra args = ', extra_hc_opts
 
@@ -1637,6 +1638,23 @@ async def compile_and_run__(name: TestName,
         if badResult(result):
             return result
 
+        if compile_stderr:
+            expected_stderr_file = find_expected_file(name, 'ghc.stderr')
+            actual_stderr_file = add_suffix(name, 'comp.stderr')
+            diff_file_name = in_testdir(add_suffix(name, 'comp.diff'))
+
+            if not await compare_outputs(way, 'stderr',
+                           join_normalisers(getTestOpts().extra_errmsg_normaliser,
+                                            normalise_errmsg),
+                           expected_stderr_file, actual_stderr_file,
+                           diff_file=diff_file_name,
+                           whitespace_normaliser=getattr(getTestOpts(),
+                                                         "whitespace_normaliser",
+                                                         normalise_whitespace)):
+             stderr = diff_file_name.read_text()
+             diff_file_name.unlink()
+             return failBecause('ghc.stderr mismatch', stderr=stderr)
+#
         cmd = './' + name + exe_extension()
 
         # we don't check the compiler's stderr for a compile-and-run test
@@ -1651,6 +1669,9 @@ async def multimod_compile_and_run( name, way, top_mod, extra_hc_opts ):
 async def multi_compile_and_run( name, way, top_mod, extra_mods, extra_hc_opts ):
     return await compile_and_run__( name, way, top_mod, extra_mods, extra_hc_opts)
 
+async def warn_and_run( name, way, extra_hc_opts ):
+    return await compile_and_run__( name, way, None, [], extra_hc_opts, compile_stderr = True)
+
 def stats( name, way, stats_file ):
     opts = getTestOpts()
     return check_stats(name, way, in_testdir(stats_file), opts.stats_range_fields)


=====================================
testsuite/tests/rename/should_compile/all.T
=====================================
@@ -31,7 +31,7 @@ test('rn037', normal, compile, [''])
 # Missing:
 # test('rn038', normal, compile, [''])
 
-test('rn039', normal, compile, [''])
+test('rn039', normal, warn_and_run, [''])
 test('rn040', normal, compile, ['-fwarn-unused-binds -fwarn-unused-matches'])
 test('rn041', normal, compile, [''])
 test('rn042', [extra_files(['Rn042_A.hs'])], multimod_compile, ['rn042', '-v0'])


=====================================
testsuite/tests/rename/should_compile/rn039.stderr → testsuite/tests/rename/should_compile/rn039.ghc.stderr
=====================================
@@ -1,5 +1,7 @@
+[1 of 2] Compiling Main             ( rn039.hs, rn039.o )
 
-rn039.hs:6:16: warning: [GHC-63397] [-Wname-shadowing (in -Wall)]
+rn039.hs:6:20: warning: [GHC-63397] [-Wname-shadowing (in -Wall)]
     This binding for ‘-’ shadows the existing binding
-      imported from ‘Prelude’ at rn039.hs:2:8-20
+      imported from ‘Prelude’ at rn039.hs:2:8-11
       (and originally defined in ‘GHC.Num’)
+[2 of 2] Linking rn039


=====================================
testsuite/tests/rename/should_compile/rn039.hs
=====================================
@@ -1,6 +1,9 @@
 {-# OPTIONS -fwarn-name-shadowing #-}
-module ShouldCompile where
+module Main (main) where
 
 -- !!! test shadowing of a global name
 
-g = 42 where f -1 = -1  -- shadows (-), probably by accident!
+g = 42 - 1 where f -1 = -1  -- shadows (-), probably by accident!
+
+main :: IO ()
+main = print g


=====================================
testsuite/tests/rename/should_compile/rn039.stdout
=====================================
@@ -0,0 +1 @@
+-1



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0876faadf671f80dd8617508b4f0869ada4c68da

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/0876faadf671f80dd8617508b4f0869ada4c68da
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230621/2a0425d2/attachment-0001.html>


More information about the ghc-commits mailing list