packages feed

camfort-1.0: tests/Camfort/Analysis/ModFileSpec.hs

{-# LANGUAGE OverloadedStrings #-}

module Camfort.Analysis.ModFileSpec (spec) where

import           Camfort.Analysis.ModFile (getModFiles)
import           Data.Binary (encodeFile)
import           Data.List (sort)
import           Language.Fortran.Util.ModFile
import           System.FilePath ((</>), (<.>))
import           System.IO.Temp (withSystemTempDirectory)
import qualified Test.Hspec as Test
import           Test.Hspec hiding (Spec)

spec :: Test.Spec
spec =
  describe "getModFiles" $
    it "correctly retrieves ModFiles" $
      withSystemTempDirectory "camfort-modfilespec"
        (\dir -> do
          let mkMod name = alterModFileData (const $ Just name) "mfs-name" emptyModFile
              mod1       = mkMod "file-a"
              mod2       = mkMod "file-b"
          encodeFile (dir </> "moda" <.> modFileSuffix) [mod1]
          encodeFile (dir </> "modb" <.> modFileSuffix) [mod2]
          fmap (sort . fmap (lookupModFileData "mfs-name")) . getModFiles $ dir)
        `shouldReturn` [Just "file-a", Just "file-b"]