Added option to turn on JSON output in Main.hs, removed json logic from Solidity.hs

pull/87/head
Ben Perez 6 years ago
parent d05e9852be
commit d2d8d4f71d
  1. 11
      lib/Echidna/Solidity.hs
  2. 7
      src/Main.hs

@ -22,7 +22,7 @@ import System.IO.Temp (writeSystemTempFile)
import qualified Data.Map as Map (lookup)
import Echidna.ABI (SolSignature)
import Echidna.Config (Config(..), sender, contractAddr, gasLimit, prefix, solcArgs, outputJson)
import Echidna.Config (Config(..), sender, contractAddr, gasLimit, prefix, solcArgs)
import EVM
@ -70,14 +70,11 @@ readContracts filePath = do
-- | reads either the first contract found or the contract named `selectedContractName` within the solidity file at `filepath`
readContract :: (MonadIO m, MonadThrow m, MonadReader Config m) => FilePath -> Maybe Text -> m SolcContract
readContract filePath selectedContractName = do
config <- ask
cs <- readContracts filePath
c <- chooseContract cs selectedContractName
if config ^. outputJson then pure ()
else do
warn (isNothing selectedContractName && 1 < length cs)
"Multiple contracts found in file, only analyzing the first"
liftIO $ print $ "Analyzing contract: " <> c ^. contractName
warn (isNothing selectedContractName && 1 < length cs)
"Multiple contracts found in file, only analyzing the first"
liftIO $ print $ "Analyzing contract: " <> c ^. contractName
return c
where chooseContract :: (MonadThrow m) => [SolcContract] -> Maybe Text -> m SolcContract
chooseContract [] _ = throwM NoContracts

@ -15,7 +15,6 @@ import Data.Semigroup ((<>))
import Echidna.Config
import Echidna.Exec
import Echidna.Solidity
--import Echidna.Internal.ZooRunner as Z
import Hedgehog hiding (checkParallel)
import Hedgehog.Internal.Property (GroupName(..), PropertyName(..))
@ -56,7 +55,9 @@ main = do
-- Read cmd line options and load config
(Options file contract usecov configFile) <- execParser opts
config <- maybe (pure defaultConfig) parseConfig configFile
let f = checkTest (config ^. returnType)
checkGroup = if config ^. outputJson then checkParallelJson else checkParallel
flip runReaderT config $ do
-- Load solidity contract and get VM
@ -65,7 +66,7 @@ main = do
-- Run without coverage
then do
let prop t = ePropertySeq (`f` t) a v >>= \x -> return (PropertyName $ show t, x)
_ <- checkParallel . Group (GroupName file) =<< mapM prop ts
_ <- checkGroup . Group (GroupName file) =<< mapM prop ts
return ()
-- Run with coverage
@ -81,7 +82,7 @@ main = do
_ <- swapMVar y []
return (lastGen,x,y)
checkParallel . Group (GroupName file) =<< mapM prop xs
checkGroup . Group (GroupName file) =<< mapM prop xs
ls <- liftIO $ mapM (readMVar . snd) tests
let ci = foldl' (\acc xs -> unions (acc : map snd xs)) mempty ls

Loading…
Cancel
Save