hedgehog-extras 0.4.5.1 → 0.4.5.2
raw patch · 2 files changed
+29/−5 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
hedgehog-extras.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.4 name: hedgehog-extras-version: 0.4.5.1+version: 0.4.5.2 synopsis: Supplemental library for hedgehog description: Supplemental library for hedgehog. category: Test
src/Hedgehog/Extras/Test/Golden.hs view
@@ -4,6 +4,7 @@ ) where import Control.Applicative+import Control.Exception (bracket_) import Control.Monad import Control.Monad.IO.Class (MonadIO (liftIO)) import Data.Algorithm.Diff (PolyDiff (Both), getGroupedDiff)@@ -18,16 +19,30 @@ import Hedgehog (MonadTest) import Hedgehog.Extras.Test.Base (failMessage) import System.FilePath (takeDirectory)-import System.IO (FilePath)+import System.IO (FilePath, IO) +import qualified Control.Concurrent.QSem as IO import qualified Data.List as List import qualified GHC.Stack as GHC import qualified Hedgehog.Extras.Test as H import qualified Hedgehog.Internal.Property as H import qualified System.Directory as IO import qualified System.Environment as IO+import qualified System.IO as IO import qualified System.IO.Unsafe as IO +sem :: IO.QSem+sem = IO.unsafePerformIO $ IO.newQSem 1+{-# NOINLINE sem #-}++semBracket :: IO a -> IO a+semBracket = bracket_ (IO.waitQSem sem) (IO.signalQSem sem)++-- | The file to log whenever a golden file is referenced.+mGoldenFileLogFile :: Maybe FilePath+mGoldenFileLogFile = IO.unsafePerformIO $+ IO.lookupEnv "GOLDEN_FILE_LOG_FILE"+ -- | Whether the test should create the golden files if the file does ont exist. createFiles :: Bool createFiles = IO.unsafePerformIO $ do@@ -35,7 +50,9 @@ return $ value == Just "1" -- | Diff contents against the golden file. If CREATE_GOLDEN_FILES environment is--- set to "1", then should the gold file not exist it would be created.+-- set to "1", then should the gold file not exist it would be created. If+-- GOLDEN_FILE_LOG_FILE is set to a filename, then the golden file path will be+-- logged to the specified file. -- -- Set the environment variable when you intend to generate or re-generate the golden -- file for example when running the test for the first time or if the golden file@@ -53,6 +70,9 @@ -> FilePath -- ^ Reference file -> m () diffVsGoldenFile actualContent referenceFile = GHC.withFrozenCallStack $ do+ forM_ mGoldenFileLogFile $ \logFile ->+ liftIO $ semBracket $ IO.appendFile logFile $ referenceFile <> "\n"+ fileExists <- liftIO $ IO.doesFileExist referenceFile if fileExists@@ -62,7 +82,9 @@ case difference of [] -> pure () [Both{}] -> pure ()- _ -> failMessage callStack $ ppDiff difference+ _ -> do+ H.note_ $ "Golden test failed against golden file: " <> referenceFile+ failMessage callStack $ ppDiff difference else if createFiles then do -- CREATE_GOLDEN_FILES is set, so we create any golden files that don't@@ -80,7 +102,9 @@ actualLines = List.lines actualContent -- | Diff file against the golden file. If CREATE_GOLDEN_FILES environment is--- set to "1", then should the gold file not exist it would be created.+-- set to "1", then should the gold file not exist it would be created. If+-- GOLDEN_FILE_LOG_FILE is set to a filename, then the golden file path will be+-- logged to the specified file. -- -- Set the environment variable when you intend to generate or re-generate the golden -- file for example when running the test for the first time or if the golden file