polysemy-test: Polysemy effects for testing

[ library, test ] [ Propose Tags ]

Please see the README on Github at https://github.com/tek/polysemy-test

[Skip to Readme]
Versions [RSS] [faq],,,,,,, (info)
Change log changelog.md
Dependencies base (>=4.12 && <5), containers, either, hedgehog (>=1.0.2 && <1.1), path (>=0.7 && <0.9), path-io (>=0.2 && <1.7), polysemy (>=1.3 && <1.6), polysemy-plugin (>=0.2.5), relude (>=0.7 && <1.2), string-interpolate (>=0.1 && <0.4), tasty (>=1.1 && <1.5), tasty-hedgehog (>= && <1.2), template-haskell, text, transformers [details]
License BSD-2-Clause-Patent
Copyright 2020 Torsten Schmits
Author Torsten Schmits
Maintainer tek@tryp.io
Category Test
Uploaded by tek at 2021-04-16T18:20:21Z
Distributions NixOS:
Downloads 554 total (17 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]


[Index] [Quick Jump]

  • Polysemy
    • Polysemy.Test
      • Data
        • Polysemy.Test.Data.Hedgehog
        • Polysemy.Test.Data.Test
        • Polysemy.Test.Data.TestError
      • Polysemy.Test.Files
      • Polysemy.Test.Hedgehog
      • Polysemy.Test.Prelude
      • Polysemy.Test.Run


Maintainer's Corner

For package maintainers and hackage trustees


Readme for polysemy-test-

[back to package description]


This package provides utilities for testing Polysemy programs:

  • An effect, Test, that gives access to temporary files and fixtures
  • An effect, Hedgehog, for lifted Hedgehog assertions


import Path (relfile)
import Polysemy.Test
import Test.Tasty (defaultMain)

test_fixture :: UnitTest
test_fixture =
  runTestAuto do
    fixContent1 <- fixtureLines fixRel
    fixPath <- Test.fixturePath fixRel
    fixContent2 <- Text.lines <$> embed (Text.readFile (toFilePath fixPath))
    fixContent1 === fixContent2
    fixContent1 === ["file", "content"]
    fixRel =

main :: IO ()
main =
  defaultMain (unitTest test_fixture)


Any file that is located below the subdirectory fixtures inside the test directory can be accessed using the constructors Test.fixturePath, Test.fixture and Text.fixtureLines.

You can override the path used to look for the fixtures directory by using runTest instead of runTestAuto. The latter analyzes the call stack to determine the test directory.

Temp Files

The constructors Test.tempDir, Test.tempFile, Test.tempFileContent and Test.tempFileLines allow you to create and read files in the temp directory within the test directory.


All paths are of type Path from the package path.

You can construct them using the quasiquoters reldir, absdir etc. or the functions parseRelDir, parseAbsDir etc.