mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
BlockWeight: tests refactoring
This commit is contained in:
parent
393fc81dea
commit
bd08a2bbe2
@ -137,7 +137,7 @@ json_spirit::mObject& ImportTest::makeAllFieldsHex(json_spirit::mObject& _o)
|
|||||||
str = value.get_str();
|
str = value.get_str();
|
||||||
else continue;
|
else continue;
|
||||||
|
|
||||||
_o[key] = (str.substr(0, 2) == "0x") ? str : "0x" + toHex(toCompactBigEndian(toInt(str), 1));
|
_o[key] = (str.substr(0, 2) == "0x") ? str : jsonHex(toInt(str));
|
||||||
}
|
}
|
||||||
return _o;
|
return _o;
|
||||||
}
|
}
|
||||||
@ -327,7 +327,7 @@ void ImportTest::checkExpectedState(State const& _stateExpect, State const& _sta
|
|||||||
void ImportTest::exportTest(bytes const& _output, State const& _statePost)
|
void ImportTest::exportTest(bytes const& _output, State const& _statePost)
|
||||||
{
|
{
|
||||||
// export output
|
// export output
|
||||||
m_TestObject["out"] = "0x" + toHex(_output);
|
m_TestObject["out"] = jsonHex(_output);
|
||||||
|
|
||||||
// export logs
|
// export logs
|
||||||
m_TestObject["logs"] = exportLog(_statePost.pending().size() ? _statePost.log(0) : LogEntries());
|
m_TestObject["logs"] = exportLog(_statePost.pending().size() ? _statePost.log(0) : LogEntries());
|
||||||
@ -344,7 +344,7 @@ void ImportTest::exportTest(bytes const& _output, State const& _statePost)
|
|||||||
|
|
||||||
// export post state
|
// export post state
|
||||||
m_TestObject["post"] = fillJsonWithState(_statePost);
|
m_TestObject["post"] = fillJsonWithState(_statePost);
|
||||||
m_TestObject["postStateRoot"] = toHex(_statePost.rootHash().asBytes());
|
m_TestObject["postStateRoot"] = jsonHex(_statePost.rootHash().asBytes());
|
||||||
|
|
||||||
// export pre state
|
// export pre state
|
||||||
m_TestObject["pre"] = fillJsonWithState(m_statePre);
|
m_TestObject["pre"] = fillJsonWithState(m_statePre);
|
||||||
@ -352,29 +352,72 @@ void ImportTest::exportTest(bytes const& _output, State const& _statePost)
|
|||||||
m_TestObject["transaction"] = makeAllFieldsHex(m_TestObject["transaction"].get_obj());
|
m_TestObject["transaction"] = makeAllFieldsHex(m_TestObject["transaction"].get_obj());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string jsonHash(h256 const& _value) { return toString(_value); }
|
||||||
|
std::string jsonHash(Nonce const& _value) { return toString(_value); }
|
||||||
|
std::string jsonHash(LogBloom const& _value) { return toString(_value); }
|
||||||
|
std::string jsonHash(Address const& _value) { return toString(_value); }
|
||||||
|
std::string jsonHex(bytesConstRef _code) { return "0x" + toHex(_code); }
|
||||||
|
std::string jsonHex(bytes const& _code) { return "0x" + toHex(_code); }
|
||||||
|
std::string jsonHex(u256 const& _value, bool _nonempty)
|
||||||
|
{
|
||||||
|
return "0x" + toHex(toCompactBigEndian(_value, _nonempty ? 1 : 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
json_spirit::mObject fillJsonWithTransaction(Transaction _txn)
|
||||||
|
{
|
||||||
|
json_spirit::mObject txObject;
|
||||||
|
txObject["nonce"] = jsonHex(_txn.nonce());
|
||||||
|
txObject["data"] = jsonHex(_txn.data());
|
||||||
|
txObject["gasLimit"] = jsonHex(_txn.gas());
|
||||||
|
txObject["gasPrice"] = jsonHex(_txn.gasPrice());
|
||||||
|
txObject["r"] = jsonHex(_txn.signature().r);
|
||||||
|
txObject["s"] = jsonHex(_txn.signature().s);
|
||||||
|
txObject["v"] = jsonHex(_txn.signature().v + 27);
|
||||||
|
txObject["to"] = _txn.isCreation() ? "" : jsonHash(_txn.receiveAddress());
|
||||||
|
txObject["value"] = jsonHex(_txn.value());
|
||||||
|
return txObject;
|
||||||
|
}
|
||||||
|
|
||||||
json_spirit::mObject fillJsonWithState(State _state)
|
json_spirit::mObject fillJsonWithState(State _state)
|
||||||
{
|
{
|
||||||
// export pre state
|
|
||||||
json_spirit::mObject oState;
|
json_spirit::mObject oState;
|
||||||
|
|
||||||
for (auto const& a: _state.addresses())
|
for (auto const& a: _state.addresses())
|
||||||
{
|
{
|
||||||
json_spirit::mObject o;
|
json_spirit::mObject o;
|
||||||
o["balance"] = "0x" + toHex(toCompactBigEndian(_state.balance(a.first), 1));
|
o["balance"] = jsonHex(_state.balance(a.first));
|
||||||
o["nonce"] = "0x" + toHex(toCompactBigEndian(_state.transactionsFrom(a.first), 1));
|
o["nonce"] = jsonHex(_state.transactionsFrom(a.first));
|
||||||
{
|
{
|
||||||
json_spirit::mObject store;
|
json_spirit::mObject store;
|
||||||
for (auto const& s: _state.storage(a.first))
|
for (auto const& s: _state.storage(a.first))
|
||||||
store["0x"+toHex(toCompactBigEndian(s.first))] = "0x"+toHex(toCompactBigEndian(s.second));
|
store[jsonHex(s.first)] = jsonHex(s.second);
|
||||||
o["storage"] = store;
|
o["storage"] = store;
|
||||||
}
|
}
|
||||||
o["code"] = "0x" + toHex(_state.code(a.first));
|
o["code"] = jsonHex(_state.code(a.first));
|
||||||
|
|
||||||
oState[toString(a.first)] = o;
|
oState[toString(a.first)] = o;
|
||||||
}
|
}
|
||||||
return oState;
|
return oState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
json_spirit::mArray exportLog(eth::LogEntries _logs)
|
||||||
|
{
|
||||||
|
json_spirit::mArray ret;
|
||||||
|
if (_logs.size() == 0) return ret;
|
||||||
|
for (LogEntry const& l: _logs)
|
||||||
|
{
|
||||||
|
json_spirit::mObject o;
|
||||||
|
o["address"] = jsonHash(l.address);
|
||||||
|
json_spirit::mArray topics;
|
||||||
|
for (auto const& t: l.topics)
|
||||||
|
topics.push_back(toString(t));
|
||||||
|
o["topics"] = topics;
|
||||||
|
o["data"] = jsonHex(l.data);
|
||||||
|
o["bloom"] = jsonHash(l.bloom());
|
||||||
|
ret.push_back(o);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
u256 toInt(json_spirit::mValue const& _v)
|
u256 toInt(json_spirit::mValue const& _v)
|
||||||
{
|
{
|
||||||
switch (_v.type())
|
switch (_v.type())
|
||||||
@ -455,25 +498,6 @@ LogEntries importLog(json_spirit::mArray& _a)
|
|||||||
return logEntries;
|
return logEntries;
|
||||||
}
|
}
|
||||||
|
|
||||||
json_spirit::mArray exportLog(eth::LogEntries _logs)
|
|
||||||
{
|
|
||||||
json_spirit::mArray ret;
|
|
||||||
if (_logs.size() == 0) return ret;
|
|
||||||
for (LogEntry const& l: _logs)
|
|
||||||
{
|
|
||||||
json_spirit::mObject o;
|
|
||||||
o["address"] = toString(l.address);
|
|
||||||
json_spirit::mArray topics;
|
|
||||||
for (auto const& t: l.topics)
|
|
||||||
topics.push_back(toString(t));
|
|
||||||
o["topics"] = topics;
|
|
||||||
o["data"] = "0x" + toHex(l.data);
|
|
||||||
o["bloom"] = toString(l.bloom());
|
|
||||||
ret.push_back(o);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void checkOutput(bytes const& _output, json_spirit::mObject& _o)
|
void checkOutput(bytes const& _output, json_spirit::mObject& _o)
|
||||||
{
|
{
|
||||||
int j = 0;
|
int j = 0;
|
||||||
|
@ -161,6 +161,14 @@ void userDefinedTest(std::string testTypeFlag, std::function<void(json_spirit::m
|
|||||||
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj);
|
RLPStream createRLPStreamFromTransactionFields(json_spirit::mObject& _tObj);
|
||||||
eth::LastHashes lastHashes(u256 _currentBlockNumber);
|
eth::LastHashes lastHashes(u256 _currentBlockNumber);
|
||||||
json_spirit::mObject fillJsonWithState(eth::State _state);
|
json_spirit::mObject fillJsonWithState(eth::State _state);
|
||||||
|
json_spirit::mObject fillJsonWithTransaction(eth::Transaction _txn);
|
||||||
|
std::string jsonHash(dev::eth::LogBloom const& _value);
|
||||||
|
std::string jsonHash(Address const& _value);
|
||||||
|
std::string jsonHash(dev::eth::Nonce const& _value);
|
||||||
|
std::string jsonHash(h256 const& _value);
|
||||||
|
std::string jsonHex(u256 const& _value, bool _nonempty = true);
|
||||||
|
std::string jsonHex(bytesConstRef _code);
|
||||||
|
std::string jsonHex(bytes const& _code);
|
||||||
|
|
||||||
template<typename mapType>
|
template<typename mapType>
|
||||||
void checkAddresses(mapType& _expectedAddrs, mapType& _resultAddrs)
|
void checkAddresses(mapType& _expectedAddrs, mapType& _resultAddrs)
|
||||||
|
Loading…
Reference in New Issue
Block a user