hevm-0.16: src/EVM/Dev.hs
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