packages feed

hnix-store-core-0.4.2.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 :: 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" $ fmap mk [0 .. 1]
 where
  mk :: Int -> TestTree
  mk n =
    goldenVsFile
      ("derivation roundtrip of " <> drv)
      drv
      act
      (processDerivation drv act)
   where
    drv = fp <> show n <> ".drv"
    act = fp <> show n <> ".actual"
    fp  = "tests/samples/example"