packages feed

fortran-src-extras-0.1.0: src/Language/Fortran/Extras/Test.hs

{-# LANGUAGE OverloadedStrings #-}
module Language.Fortran.Extras.Test where

import qualified Data.ByteString.Lazy.Char8    as BC
import           Language.Fortran.Analysis      ( Analysis )
import           Language.Fortran.AST           ( A0
                                                , ProgramFile
                                                )
import           Language.Fortran.Version       ( FortranVersion(..) )

import           Language.Fortran.Extras.Analysis
                                                ( versionedExpandedProgramAnalysis
                                                )
import           Language.Fortran.Extras.ProgramFile
                                                ( versionedExpandedProgramFile )
import           Language.Fortran.Util.Files
                                                ( flexReadFile )

getTestProgramFile :: String -> IO (ProgramFile A0)
getTestProgramFile p = do
  cts <- flexReadFile p
  versionedExpandedProgramFile Fortran77Legacy [] p cts

getTestProgramFileIncludes :: String -> [String] -> IO (ProgramFile A0)
getTestProgramFileIncludes p incls = do
  cts <- flexReadFile p
  versionedExpandedProgramFile Fortran77Legacy incls p cts

getTestProgramAnalysis :: String -> IO (ProgramFile (Analysis A0))
getTestProgramAnalysis p = do
  cts <- flexReadFile p
  versionedExpandedProgramAnalysis Fortran77Legacy [] p cts

getTestProgramAnalysisIncludes
  :: String -> [String] -> IO (ProgramFile (Analysis A0))
getTestProgramAnalysisIncludes p incls = do
  cts <- flexReadFile p
  versionedExpandedProgramAnalysis Fortran77Legacy incls p cts

-- | Utility function to compare file content
compareFile :: FilePath -> FilePath -> IO Bool
compareFile expected actual = do
  c1 <- BC.readFile expected
  c2 <- BC.readFile actual
  compareByteString c1 c2

compareByteString :: BC.ByteString -> BC.ByteString -> IO Bool
compareByteString expected actual = if expected == actual
  then return True
  else do
    BC.putStrLn "<<<<<<< EXPECTED"
    BC.putStrLn expected
    BC.putStrLn ">>>>>>> ACTUAL"
    BC.putStrLn actual
    return False