camfort-0.900: tests/Camfort/Transformation/CommonSpec.hs
module Camfort.Transformation.CommonSpec (spec) where
import System.FilePath
import System.Directory
import Test.Hspec
import Camfort.Helpers
import Camfort.Functionality
samplesBase :: FilePath
samplesBase = "tests" </> "Camfort" </> "Transformation" </> "samples"
data Example = Example FilePath FilePath
examples =
[ Example "common.f90" "common.expected.f90" ]
readSample :: FilePath -> IO String
readSample filename = do
let path = samplesBase </> filename
readFile path
removeSample filename = do
let path = samplesBase </> filename
removeFile path
spec :: Spec
spec =
describe "Common block integration test" $
context "common.f90 into common.expect.f90 and foo.f90" $ do
expected <- runIO $ readSample "common.expected.f90"
expectedMod <- runIO $ readSample "cmn.expected.f90"
let outFile = samplesBase </> "common.f90.out"
runIO $ common (samplesBase </> "common.f90") [] outFile ()
actual <- runIO $ readSample "common.f90.out"
actualMod <- runIO $ readSample "cmn.f90"
runIO $ removeSample "common.f90.out"
runIO $ removeSample "cmn.f90"
it "it eliminates common statement" $
actual `shouldBe` expected
it "it produces a correct module file" $
actualMod `shouldBe` expectedMod