BSD-3-Clause licensed and maintained by Brandon Chinn

Module documentation for 1.0.1

This version can be pinned in stack with:th-test-utils-1.0.1@sha256:1803d3556474c984cbd195d80b313461a9f170f189eb92da3b1283e6022438b2,2083

th-test-utils

CircleCI Hackage

This package contains utility functions for testing Template Haskell code.

Currently, this package only exposes a single function, tryQ (and derivatives), that allows testing whether a given Template Haskell expression fails.

Usage

-- e.g. $(qConcat ["hello", "world"]) generates "helloworld" at compile time
qConcat :: [String] -> Q Exp
qConcat [] = fail "Cannot concat empty list"
qConcat xs = ...

-- e.g. [numberify| one |] generates `1` at compile time
numberify :: QuasiQuoter
numberify = ...
-- example using tasty-hunit
main :: IO ()
main = defaultMain $ testGroup "my-project"
  [ testCase "qConcat 1" $
      $(tryQ $ qConcat ["hello", "world"]) @?= (Right "helloworld" :: Either String String)
  , testCase "qConcat 2" $
      $(tryQ $ qConcat [])                 @?= (Left "Cannot concat empty list" :: Either String String)
  , testCase "numberify 1" $
      $(tryQ $ quoteExp numberify "one")   @?= (Right 1 :: Either String Int)
  , testCase "numberify 2" $
      $(tryQ $ quoteExp numberify "foo")   @?= (Left "not a number" :: Either String Int)

  -- can also return error message as `Maybe String` or `String` (which errors
  -- if the function doesn't error)
  , testCase "numberify 3" $
      $(tryQErr $ quoteExp numberify "foo") @?= Just "not a number"
  , testCase "numberify 4" $
      $(tryQErr' $ quoteExp numberify "foo") @?= "not a number"
  ]

Changes

Upcoming

1.0.1

  • Support GHC 8.8

1.0.0

Initial release:

  • Add tryQ, tryQErr, tryQErr' functions
comments powered byDisqus