-- | Utility functions to read sample contracts (for testing). module Test.Util.Contracts ( contractsDir , inContractsDir , () , getIllTypedContracts , getWellTypedContracts , getUnparsableContracts , getWellTypedMichelsonContracts , getWellTypedMorleyContracts , getContractsWithReferences ) where import Data.List (isSuffixOf) import System.Directory (listDirectory) import System.FilePath (addExtension, ()) -- | Directory with sample contracts. contractsDir :: FilePath contractsDir = "../../contracts/" inContractsDir :: FilePath -> FilePath inContractsDir = (contractsDir ) getIllTypedContracts :: IO [FilePath] getIllTypedContracts = concatMapM (\ext -> concatMapM (getContractsWithExtension ext) illTypedContractDirs ) [".tz", ".mtz"] getWellTypedContracts :: IO [FilePath] getWellTypedContracts = getWellTypedMichelsonContracts <> getWellTypedMorleyContracts getUnparsableContracts :: IO [FilePath] getUnparsableContracts = concatMapM (flip getContractsWithExtension (contractsDir "unparsable")) [".tz", ".mtz"] getWellTypedMichelsonContracts :: IO [FilePath] getWellTypedMichelsonContracts = concatMapM (getContractsWithExtension ".tz") wellTypedContractDirs getWellTypedMorleyContracts :: IO [FilePath] getWellTypedMorleyContracts = concatMapM (getContractsWithExtension ".mtz") wellTypedContractDirs getContractsWithExtension :: String -> FilePath -> IO [FilePath] getContractsWithExtension ext dir = mapMaybe convertPath <$> listDirectory dir where convertPath :: FilePath -> Maybe FilePath convertPath fileName | (ext `isSuffixOf` fileName) = Just (dir fileName) | otherwise = Nothing wellTypedContractDirs :: [FilePath] wellTypedContractDirs = contractsDir : map ((contractsDir "tezos_examples") ) [ "attic" , "entrypoints" , "macros" , "mini_scenarios" , "opcodes" ] illTypedContractDirs :: [FilePath] illTypedContractDirs = [ contractsDir "ill-typed" , contractsDir "tezos_examples" "ill_typed" ] getContractsWithReferences :: String -> FilePath -> String -> IO [(FilePath, FilePath)] getContractsWithReferences ext fp refExt = fmap attachPrettyPath <$> getContractsWithExtension ext fp where attachPrettyPath :: FilePath -> (FilePath, FilePath) attachPrettyPath src = (src, addExtension src refExt)