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)