packages feed

polysemy-plugin-0.2.4.0: test/DoctestSpec.hs

{-# LANGUAGE CPP #-}

module DoctestSpec where

import Test.Hspec
import Test.DocTest

import Build_doctests (flags, pkgs, module_sources)

spec :: Spec
spec = parallel $ describe "Error messages" $ it "should pass the doctest" $ doctest $
  [ "--fast"
  , "-fobject-code"

#if __GLASGOW_HASKELL__ < 806
  , "-XMonadFailDesugaring"
  , "-XTypeInType"
#endif

  , "test/TypeErrors.hs"
  ]
  <> pkgs
  <> removeFlagSearchPathSrc flags

-- | Designed to remove flags that add the "polysemy-plugin/src" directory. For
-- example, it will remove the following flag:
-- "-i/Users/bob/code/polysemy/polysemy-plugin/src".
--
-- This was done because the presence of this flag causes the following error:
--   test/TypeErrors.hs:9: failure in expression `:set -fplugin=Polysemy.Plugin'
--   expected:   
--    but got: attempting to use module ‘main:Polysemy.Plugin’
--    (.../polysemy/polysemy-plugin/src/Polysemy/Plugin.hs) which is not loaded.
--
-- Without this flag, the tests pass as expected. My understanding of GHC isn't
-- great, so feel free to remove this function if you know of some way of making
-- this flag a non-issue.
removeFlagSearchPathSrc :: [String] -> [String]
removeFlagSearchPathSrc = filter (not . isSrcSearchPath)
  where
    isSrcSearchPath flag = isSearchPathFlag flag && isSrcDir flag

    isSearchPathFlag ('-':'i':_) = True
    isSearchPathFlag _           = False

    isSrcDir ('s':'r':c':[]) = True
    isSrcDir (x:xs)          = isSrcDir xs
    isSrcDir []              = False