module Golden.Utils where import Control.Monad (Monad(..)) import Data.Either (Either(..)) import Data.Function (($)) import Data.Semigroup (Semigroup(..)) import Data.String (String) import System.IO (IO, FilePath) import System.IO.Unsafe (unsafePerformIO) import qualified Data.ByteString.Lazy as BSL import qualified Data.IORef as IORef import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy.Encoding as TL import qualified Language.Haskell.TH.Syntax as TH import Paths_symantic_parser getGoldenDir :: FilePath -> FilePath getGoldenDir p = unsafePerformIO $ getDataFileName $ "tests/Golden/" <> p goldenDiff :: FilePath -> FilePath -> [String] goldenDiff ref new = ["diff", "-u", "-w", "-B", ref, new] -- | Resetting 'TH.counter' makes 'makeLetName' deterministic, -- except when GHC or executable flags change, like profiling -- or even --accept unfortunately, -- in those case the golden tests may fail -- due to a different numbering of the 'ref' combinators. -- Hence 'ShowLetName' is used with 'False' there. resetTHNameCounter :: IO () resetTHNameCounter = IORef.writeIORef TH.counter 0 unLeft :: Either String BSL.ByteString -> IO BSL.ByteString unLeft lr = case lr of Left err -> return $ TL.encodeUtf8 $ TL.pack err Right a -> return a