ethereum-analyzer-3.3.0: test/Ethereum/Analyzer/Solidity/SimpleSpec.hs
module Ethereum.Analyzer.Solidity.SimpleSpec
( spec
) where
import Protolude hiding (show)
import Compiler.Hoopl
-- import Ethereum.Analyzer.Common
import Ethereum.Analyzer.Solidity
import Ethereum.Analyzer.TestData.Asts
import Ethereum.Analyzer.TestData.StorageJson (storageJson)
-- import GHC.Show (Show(..))
import Test.Hspec
spec :: Spec
spec = do
describe "e2h" $
it "parses storageJson" $ do
let eitherContracts = do
solNodes <- decodeSoleNodes (toS storageJson)
let mContracts = mapM s2sContracts solNodes
let contracts = concat $ runSimpleUniqueMonad mContracts
return contracts
-- GP.pp eitherContracts
eitherContracts `shouldBe`
Right
[ Contract
{ cName = "SimpleStorage"
, cStateVars =
[ VarDecl
{vName = Idfr {unIdfr = "storedData"}, vType = Uint256}
]
, cFunctions =
[ FunDefinition
{ fName = Idfr {unIdfr = "set"}
, fParams =
[VarDecl {vName = Idfr {unIdfr = "x"}, vType = Uint256}]
, fReturns = []
, fBody =
[ StAssign
(JustId (Idfr {unIdfr = "storedData"}))
(ExpLval (JustId (Idfr {unIdfr = "x"})))
]
}
, FunDefinition
{ fName = Idfr {unIdfr = "get"}
, fParams = []
, fReturns =
[VarDecl {vName = Idfr {unIdfr = ""}, vType = Uint256}]
, fBody = [StReturn [JustId (Idfr {unIdfr = "storedData"})]]
}
]
}
]
describe "Simple" $ mapM_ nonEmptySimple testFilepaths
nonEmptySimple :: Text -> SpecWith ()
nonEmptySimple filepath =
context (toS filepath) $
it "converts SolNode to Contracts" $ do
contracts <-
do solNodes <- solNodesOf filepath
let mContracts = mapM s2sContracts solNodes
let contracts = concat $ runSimpleUniqueMonad mContracts
return contracts
length contracts `shouldSatisfy` (0 <)