goldenVsFile Compare the output file's contents against the golden file's contents after the given action has created the output file.
:: a typeCtrl KGHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27
Moduletasty-golden-2.3.5Haskell2010
To get started with golden testing and this library, see Introduction to golden testing.
This module provides a simplified interface. If you want more, see Test.Tasty.Golden.Advanced.
Filenames are looked up in the usual way, Thus relative
names are relative to the processes current working directory.
It is common to run tests from the package's root directory (via cabal
test or cabal install --enable-tests), so if your test files are under
the tests/ subdirectory, your relative file names should start with
tests/ (even if your test.hs is itself under tests/, too).
The best way to avoid headaches with line endings (when running tests both on UNIX and Windows) is to treat your golden files as binary, even when they are actually textual.
This means:
When writing output files from Haskell code, open them in binary mode
(see openBinaryFile, withBinaryFile and hSetBinaryMode). This will
disable automatic \n -> \r\n conversion on Windows. For convenience, this
module exports writeBinaryFile which is just like writeFile but opens
the file in binary mode. When using ByteStrings note that
Data.ByteString and Data.ByteString.Lazy use binary mode for
writeFile, while Data.ByteString.Char8 and Data.ByteString.Lazy.Char8
use text mode.
Tell your VCS not to do any newline conversion for golden files. For
git check in a .gitattributes file with the following contents (assuming
your golden files have .golden extension):
*.golden -textOn its side, tasty-golden reads and writes files in binary mode, too.
Why not let Haskell/git do automatic conversion on Windows? Well, for
instance, tar will not do the conversion for you when unpacking a release
tarball, so when you run cabal install your-package --enable-tests, the
tests will be broken.
As a last resort, you can strip all \rs from both arguments in your
comparison function when necessary. But most of the time treating the files
as binary does the job.
The test suite should be compiled with -threaded if you want to avoid
blocking any other threads while goldenVsFileDiff and similar functions
wait for the result of the diff command.
When using goldenVsFileDiff or goldenVsStringDiff under Windows the exit
code from the diff program that you specify will not be captured correctly
if that program uses exec.
More specifically, you will get the exit code of the original child
(which always exits with code 0, since it called exec), not the exit
code of the process which carried on with execution after exec.
This is different from the behavior prescribed by POSIX but is the best
approximation that can be realised under the restrictions of the
Windows process model. See System.Process for further details or
https://github.com/haskell/process/pull/168 for even more.
goldenVsFile Compare the output file's contents against the golden file's contents after the given action has created the output file.
goldenVsString :: TestNametest name
-> FilePathpath to the «golden» file (the file that contains correct output)
-> IO ByteStringaction that returns a string
-> TestTreethe test verifies that the returned string is the same as the golden file contents
Compare a given string against the golden file's contents.
goldenVsFileDiff Same as goldenVsFile, but invokes an external diff command.
See the notes at the top of this module regarding linking with
-threaded and Windows-specific issues.
goldenVsStringDiff Same as goldenVsString, but invokes an external diff command.
See the notes at the top of this module regarding linking with
-threaded and Windows-specific issues.
The size, in bytes, such that the (incorrect) test output is not displayed when it exceeds this size. Numeric underscores are accepted for readability.
The default value is 1000 (i.e. 1Kb).
Enum SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalEq SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalIntegral SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalNum SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalOrd SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalReal SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalIsOption SizeCutoffDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalWhen / whether to delete the test output file, when there is a golden file
Eq DeleteOutputFileDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalOrd DeleteOutputFileDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalShow DeleteOutputFileDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalIsOption DeleteOutputFileDefined in tasty-golden-2.3.5 · Test.Tasty.Golden.InternalThis option controls when / whether the test output file is deleted For example, it may be convenient to delete the output file when a test passes, since it will be the same as the golden file.
It does nothing if
running the test or accessing an existing golden value threw an exception.
there is no golden file for the test
Find all files in the given directory and its subdirectories that have the given extensions.
It is typically used to find all test files and produce a golden test per test file.
The returned paths use forward slashes to separate path components, even on Windows. Thus if the file name ends up in a golden file, it will not differ when run on another platform.
The semantics of extensions is the same as in takeExtension. In
particular, non-empty extensions should have the form ".ext".
This function may throw any exception that getDirectoryContents may throw.
It doesn't do anything special to handle symlinks (in particular, it probably won't work on symlink loops).
Nor is it optimized to work with huge directory trees (you'd probably want to use some form of coroutines for that).
Like writeFile, but also create parent directories if they are missing.