hnix-store/hnix-store-core/tests/Derivation.hs
2021-01-14 11:08:42 +01:00

39 lines
1.1 KiB
Haskell

module Derivation where
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.Golden (goldenVsFile)
import System.Nix.Derivation (parseDerivation, buildDerivation)
import qualified Data.Attoparsec.Text.Lazy
import qualified Data.Text.IO
import qualified Data.Text.Lazy
import qualified Data.Text.Lazy.Builder
processDerivation :: FilePath -> FilePath -> IO ()
processDerivation source dest = do
contents <- Data.Text.IO.readFile source
case Data.Attoparsec.Text.Lazy.parseOnly (parseDerivation "/nix/store") contents of
Left e -> error e
Right drv ->
Data.Text.IO.writeFile dest
. Data.Text.Lazy.toStrict
. Data.Text.Lazy.Builder.toLazyText
$ buildDerivation drv
test_derivation :: TestTree
test_derivation = testGroup "golden" $ map mk [0..1]
where
mk :: Int -> TestTree
mk n =
let
fp = "tests/samples/example"
drv = (fp ++ show n ++ ".drv")
act = (fp ++ show n ++ ".actual")
in
goldenVsFile
("derivation roundtrip of " ++ drv)
drv act (processDerivation drv act)