packages feed

hnix-store-core-0.3.0.0: tests/Derivation.hs

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 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 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)