module EVM.Dev where import System.Directory import EVM.Dapp import EVM.Solidity import EVM.UnitTest import qualified EVM.Fetch import qualified EVM.TTY import qualified EVM.Emacs import qualified EVM.Facts as Facts import qualified EVM.Facts.Git as Git import Data.Text (isPrefixOf) import qualified Data.Map as Map loadDappInfo :: String -> String -> IO DappInfo loadDappInfo path file = withCurrentDirectory path $ readSolc file >>= \case Just (contractMap, cache) -> do pure (dappInfo "." contractMap cache) _ -> error "nope, sorry" ghciTest :: String -> String -> Maybe String -> IO [Bool] ghciTest root path state = withCurrentDirectory root $ do loadFacts <- case state of Nothing -> pure id Just repoPath -> do facts <- Git.loadFacts (Git.RepoAt repoPath) pure (flip Facts.apply facts) params <- getParametersFromEnvironmentVariables let opts = UnitTestOptions { oracle = EVM.Fetch.zero , verbose = False , match = "" , vmModifier = loadFacts , testParams = params } readSolc path >>= \case Just (contractMap, cache) -> do let unitTests = findUnitTests ("test" `isPrefixOf`) (Map.elems contractMap) mapM (runUnitTestContract opts contractMap cache) unitTests Nothing -> error ("Failed to read Solidity JSON for `" ++ path ++ "'") ghciTty :: String -> String -> Maybe String -> IO () ghciTty root path state = withCurrentDirectory root $ do loadFacts <- case state of Nothing -> pure id Just repoPath -> do facts <- Git.loadFacts (Git.RepoAt repoPath) pure (flip Facts.apply facts) params <- getParametersFromEnvironmentVariables let testOpts = UnitTestOptions { oracle = EVM.Fetch.zero , verbose = False , match = "" , vmModifier = loadFacts , testParams = params } EVM.TTY.main testOpts root path ghciEmacs :: IO () ghciEmacs = EVM.Emacs.main foo :: IO () foo = ghciEmacs