mirror of
https://github.com/haskell-nix/hnix-store.git
synced 2024-12-14 19:47:56 +03:00
39 lines
1.1 KiB
Haskell
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)
|
|
|