module Util where
-- base
import Data.Monoid ((<>))
import Data.Time
-- text
import qualified Data.Text.IO as T
-- ocaml-export
import OCaml.Export hiding (Options)
import System.Directory (doesFileExist)
-- filepath
import System.FilePath.Posix ((</>))
-- hspec
import Test.Hspec
-- QuickCheck
import Test.QuickCheck
-- quickcheck-arbitrary-adt
import Test.QuickCheck.Arbitrary.ADT
import Test.Aeson.Internal.ADT.GoldenSpecs
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
{-
testOCamlTypeWithInterface :: ADT -> FilePath -> OCamlInterface -> SpecWith ()
testOCamlTypeWithInterface adt typeName ocamlFile =
it typeName $ do
createOCamlFileWithInterface testPath specPath typeName ocamlFile
automated <- T.readFile (testPath <> "/" <> typeName <> ".ml")
handWritten <- T.readFile (goldenPath <> "/" <> typeName <> ".ml")
automated2 <- T.readFile (testPath <> "/" <> typeName <> ".mli")
handWritten2 <- T.readFile (goldenPath <> "/" <> typeName <> ".mli")
automated `shouldBe` handWritten
automated2 `shouldBe` handWritten2
fe <- doesFileExist (specGoldenPath <> "/" <> typeName <> "_spec.ml")
if fe
then do
automated3 <- T.readFile (specPath <> "/" <> typeName <> "_spec.ml")
handWritten3 <- T.readFile (specGoldenPath <> "/" <> typeName <> "_spec.ml")
automated3 `shouldBe` handWritten3
else pure ()
where
adtPath = adtToPath adt
testPath = "test/interface/temp/" <> adtPath
goldenPath = "test/interface/golden/" <> adtPath
specPath = "test/interface/temp/__tests__/" <> adtPath
specGoldenPath = "test/interface/golden/__tests__/" <> adtPath
-}