packages feed

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

{-# LANGUAGE OverloadedStrings #-}

module Camfort.Analysis.ModFileSpec (spec) where

import Data.Binary (encodeFile)
import Data.List (sort)
import System.Directory (createDirectory)
import System.FilePath ((</>), (<.>))
import System.IO.Temp (withSystemTempDirectory)

import Language.Fortran.Util.ModFile

import Camfort.Analysis.ModFile (getModFiles)

import Test.Hspec hiding (Spec)
import qualified Test.Hspec as Test

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"]