2018-04-07 00:20:21 +02:00
|
|
|
module TestCommon where
|
|
|
|
|
2018-04-10 02:12:16 +02:00
|
|
|
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
|
2018-04-07 00:20:21 +02:00
|
|
|
|
2018-04-13 09:34:49 +02:00
|
|
|
hnixEvalFile :: FilePath -> [String] -> IO (NValueNF (Lazy IO))
|
|
|
|
hnixEvalFile file incls = do
|
2018-04-07 00:20:21 +02:00
|
|
|
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
|
2018-04-07 00:20:21 +02:00
|
|
|
setEnv "TEST_VAR" "foo"
|
2018-04-14 18:39:03 +02:00
|
|
|
runLazyM $ normalForm =<< evalLoc (Just file) incls expr
|
2018-04-07 00:20:21 +02:00
|
|
|
|
2018-04-13 09:34:49 +02:00
|
|
|
hnixEvalText :: Text -> [String] -> IO (NValueNF (Lazy IO))
|
2018-04-14 18:39:03 +02:00
|
|
|
hnixEvalText src incls = case parseNixText src of
|
2018-04-07 00:20:21 +02:00
|
|
|
Failure err ->
|
2018-04-10 02:12:16 +02:00
|
|
|
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
|
2018-04-07 00:20:21 +02:00
|
|
|
|
|
|
|
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
|
2018-04-07 00:20:21 +02:00
|
|
|
return res
|
|
|
|
|
|
|
|
nixEvalFile :: FilePath -> IO String
|
2018-04-08 00:13:58 +02:00
|
|
|
nixEvalFile fp = readProcess "nix-instantiate" ["--eval", fp] ""
|
2018-04-07 00:20:21 +02:00
|
|
|
|
2018-04-08 09:26:48 +02:00
|
|
|
assertEvalFileMatchesNix :: FilePath -> Assertion
|
|
|
|
assertEvalFileMatchesNix fp = do
|
2018-04-13 09:34:49 +02:00
|
|
|
hnixVal <- (++"\n") . printNix <$> hnixEvalFile fp []
|
2018-04-08 09:26:48 +02:00
|
|
|
nixVal <- nixEvalFile fp
|
|
|
|
assertEqual fp nixVal hnixVal
|
|
|
|
|
2018-04-10 02:12:16 +02:00
|
|
|
assertEvalMatchesNix :: Text -> Assertion
|
2018-04-07 00:20:21 +02:00
|
|
|
assertEvalMatchesNix expr = do
|
2018-04-13 09:34:49 +02:00
|
|
|
hnixVal <- (++"\n") . printNix <$> hnixEvalText expr []
|
2018-04-10 02:12:16 +02:00
|
|
|
nixVal <- nixEvalString expr'
|
|
|
|
assertEqual expr' nixVal hnixVal
|
|
|
|
where
|
|
|
|
expr' = unpack expr
|