hnix/tests/TestCommon.hs

55 lines
1.6 KiB
Haskell
Raw Normal View History

module TestCommon where
import Data.Text (Text, unpack)
2018-04-08 00:13:58 +02:00
import Nix
import System.Environment
import System.IO
import System.Posix.Files
import System.Posix.Temp
import System.Process
import Test.Tasty.HUnit
hnixEvalFile :: FilePath -> [String] -> IO (NValueNF (Lazy IO))
hnixEvalFile file incls = do
parseResult <- parseNixFileLoc file
case parseResult of
Failure err ->
error $ "Parsing failed for file `" ++ file ++ "`.\n" ++ show err
2018-04-14 18:39:03 +02:00
Success expr -> do
setEnv "TEST_VAR" "foo"
2018-04-14 18:39:03 +02:00
runLazyM $ normalForm =<< evalLoc (Just file) incls expr
hnixEvalText :: Text -> [String] -> IO (NValueNF (Lazy IO))
2018-04-14 18:39:03 +02:00
hnixEvalText src incls = case parseNixText src of
Failure err ->
error $ "Parsing failed for expressien `"
2018-04-14 18:39:03 +02:00
++ unpack src ++ "`.\n" ++ show err
Success expr ->
runLazyM $ normalForm =<< eval Nothing incls expr
nixEvalString :: String -> IO String
nixEvalString expr = do
(fp,h) <- mkstemp "nix-test-eval"
hPutStr h expr
hClose h
res <- nixEvalFile fp
2018-04-08 00:13:58 +02:00
removeLink fp
return res
nixEvalFile :: FilePath -> IO String
2018-04-08 00:13:58 +02:00
nixEvalFile fp = readProcess "nix-instantiate" ["--eval", fp] ""
2018-04-08 09:26:48 +02:00
assertEvalFileMatchesNix :: FilePath -> Assertion
assertEvalFileMatchesNix fp = do
hnixVal <- (++"\n") . printNix <$> hnixEvalFile fp []
2018-04-08 09:26:48 +02:00
nixVal <- nixEvalFile fp
assertEqual fp nixVal hnixVal
assertEvalMatchesNix :: Text -> Assertion
assertEvalMatchesNix expr = do
hnixVal <- (++"\n") . printNix <$> hnixEvalText expr []
nixVal <- nixEvalString expr'
assertEqual expr' nixVal hnixVal
where
expr' = unpack expr