packages feed

ocaml-export-0.3.0.0: test/Util.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}

module Util where
-- base
import Data.Monoid ((<>))
import Data.Time
-- text
import qualified Data.Text.IO as T
-- filepath
import System.FilePath.Posix ((</>))
-- hspec
import Test.Hspec
-- QuickCheck
import Test.QuickCheck

instance Arbitrary UTCTime where
  arbitrary =
    UTCTime <$> (ModifiedJulianDay <$> (2000 +) <$> arbitrary)
            <*> pure 1.011
--            <*> (fromRational . toRational . (\f -> fromInteger $ round $ f * (10^2) / (10.0^^2)) <$> choose (0:: Double, 86400))

data ADT
  = Options

adtToPath :: ADT -> FilePath
adtToPath Options = "options"

compareFiles :: FilePath -> FilePath -> Bool -> FilePath -> SpecWith ()
compareFiles rootDir categoryDir compareInterfaceAndSpecFiles typeName =
  it typeName $ do
    automated   <- T.readFile (testPath   </> typeName <> ".ml")
    handWritten <- T.readFile (goldenPath </> typeName <> ".ml")
    automated `shouldBe` handWritten
    if compareInterfaceAndSpecFiles
      then do
        automatedI   <- T.readFile (testPath   </> typeName <> ".mli")
        handWrittenI <- T.readFile (goldenPath </> typeName <> ".mli")
        automatedI `shouldBe` handWrittenI
        
        automatedS   <- T.readFile (testSpecPath   </> typeName <> "_spec" <> ".ml")
        handWrittenS <- T.readFile (goldenSpecPath </> typeName <> "_spec" <> ".ml")
        automatedS `shouldBe` handWrittenS
      else pure ()
  where
    testPath   = rootDir </> "temp" </> categoryDir
    goldenPath = rootDir </> "golden" </> categoryDir
    testSpecPath   = rootDir </> "temp" </> "__tests__" </> categoryDir
    goldenSpecPath = rootDir </> "golden" </> "__tests__" </> categoryDir