camfort-0.905: tests/Camfort/Analysis/ImplicitNoneSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module Camfort.Analysis.ImplicitNoneSpec (spec) where
import Data.Binary (encodeFile)
import Data.List (sort)
import System.Directory (createDirectory)
import System.FilePath ((</>), (<.>))
import System.IO.Temp (withSystemTempDirectory)
import Control.Lens
import Language.Fortran.Util.ModFile
import Language.Fortran.AST (ProgramUnitName(..))
import Camfort.Analysis.ModFile (getModFiles)
import Camfort.Analysis.Simple
import Camfort.Analysis.TestUtils
import Camfort.Analysis hiding (describe)
import Test.Hspec hiding (Spec)
import qualified Test.Hspec as Test
spec :: Test.Spec
spec = do
let f n = testInputSources $ fixturesDir </> n
let g a = (generalizePureAnalysis . checkImplicitNone a)
describe "implicitNone" $ do
it "basic" $ do
testSingleFileAnalysis (f "implicitnone1.f90") (g False) $ \ report ->
let ImplicitNoneReport ls = (report ^?! arResult . _ARSuccess) in
map fst ls `shouldBe` [Named "s"]
it "misplaced statements" $ do
testSingleFileAnalysis (f "implicitnone2.f90") (g False) $ \ report ->
let ImplicitNoneReport ls = (report ^?! arResult . _ARSuccess) in
map fst ls `shouldBe` [Named "implicitnone1", Named "implicitnone2"]
it "interfaces are separate scope" $ do
testSingleFileAnalysis (f "implicitnone3.f90") (g False) $ \ report ->
let ImplicitNoneReport ls = (report ^?! arResult . _ARSuccess) in
map fst ls `shouldBe` [Named "s"]
describe "implicitNoneAll" $ do
it "basic" $ do
testSingleFileAnalysis (f "implicitnone1.f90") (g True) $ \ report ->
let ImplicitNoneReport ls = (report ^?! arResult . _ARSuccess) in
map fst ls `shouldBe` [Named "f", Named "s"]
it "misplaced statements" $ do
testSingleFileAnalysis (f "implicitnone2.f90") (g True) $ \ report ->
let ImplicitNoneReport ls = (report ^?! arResult . _ARSuccess) in
map fst ls `shouldBe` [Named "implicitnone1", Named "f", Named "implicitnone2", Named "f"]
it "interfaces are separate scope" $ do
testSingleFileAnalysis (f "implicitnone3.f90") (g True) $ \ report ->
let ImplicitNoneReport ls = (report ^?! arResult . _ARSuccess) in
map fst ls `shouldBe` [Named "s"]
fixturesDir :: FilePath
fixturesDir = "tests" </> "fixtures"