mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #2935 from ethereum/cleanupTestHelpers
Cleanup test helper macros.
This commit is contained in:
commit
1be33872ba
@ -15,8 +15,6 @@
|
||||
along with solidity. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/** @file TestHelper.h
|
||||
* @author Marko Simovic <markobarko@gmail.com>
|
||||
* @date 2014
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
@ -31,78 +29,6 @@ namespace dev
|
||||
namespace test
|
||||
{
|
||||
|
||||
#if (BOOST_VERSION >= 105900)
|
||||
#define ETH_BOOST_CHECK_IMPL(_message, _requireOrCheck) BOOST_TEST_TOOL_DIRECT_IMPL( \
|
||||
false, \
|
||||
_requireOrCheck, \
|
||||
_message \
|
||||
)
|
||||
#else
|
||||
#define ETH_BOOST_CHECK_IMPL(_message, _requireOrCheck) BOOST_CHECK_IMPL( \
|
||||
false, \
|
||||
_message, \
|
||||
_requireOrCheck, \
|
||||
CHECK_MSG \
|
||||
)
|
||||
#endif
|
||||
|
||||
/// Make sure that no Exception is thrown during testing. If one is thrown show its info and fail the test.
|
||||
/// Our version of BOOST_REQUIRE_NO_THROW()
|
||||
/// @param _statement The statement for which to make sure no exceptions are thrown
|
||||
/// @param _message A message to act as a prefix to the expression's error information
|
||||
#define ETH_TEST_REQUIRE_NO_THROW(_statement, _message) \
|
||||
do \
|
||||
{ \
|
||||
try \
|
||||
{ \
|
||||
BOOST_TEST_PASSPOINT(); \
|
||||
_statement; \
|
||||
} \
|
||||
catch (boost::exception const& _e) \
|
||||
{ \
|
||||
auto msg = std::string(_message " due to an exception thrown by " \
|
||||
BOOST_STRINGIZE(_statement) "\n") + boost::diagnostic_information(_e); \
|
||||
ETH_BOOST_CHECK_IMPL(msg, REQUIRE); \
|
||||
} \
|
||||
catch (...) \
|
||||
{ \
|
||||
ETH_BOOST_CHECK_IMPL( \
|
||||
"Unknown exception thrown by " BOOST_STRINGIZE(_statement), \
|
||||
REQUIRE \
|
||||
); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
/// Check if an Exception is thrown during testing. If one is thrown show its info and continue the test
|
||||
/// Our version of BOOST_CHECK_NO_THROW()
|
||||
/// @param _statement The statement for which to make sure no exceptions are thrown
|
||||
/// @param _message A message to act as a prefix to the expression's error information
|
||||
#define ETH_TEST_CHECK_NO_THROW(_statement, _message) \
|
||||
do \
|
||||
{ \
|
||||
try \
|
||||
{ \
|
||||
BOOST_TEST_PASSPOINT(); \
|
||||
_statement; \
|
||||
} \
|
||||
catch (boost::exception const& _e) \
|
||||
{ \
|
||||
auto msg = std::string(_message " due to an exception thrown by " \
|
||||
BOOST_STRINGIZE(_statement) "\n") + boost::diagnostic_information(_e); \
|
||||
ETH_BOOST_CHECK_IMPL(msg, CHECK); \
|
||||
} \
|
||||
catch (...) \
|
||||
{ \
|
||||
ETH_BOOST_CHECK_IMPL( \
|
||||
"Unknown exception thrown by " BOOST_STRINGIZE(_statement), \
|
||||
CHECK \
|
||||
); \
|
||||
} \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
|
||||
struct Options: boost::noncopyable
|
||||
{
|
||||
std::string ipcPath;
|
||||
|
@ -223,7 +223,7 @@ protected:
|
||||
m_compiler.reset(false);
|
||||
m_compiler.addSource("", registrarCode);
|
||||
m_compiler.setOptimiserSettings(m_optimize, m_optimizeRuns);
|
||||
ETH_TEST_REQUIRE_NO_THROW(m_compiler.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
|
||||
s_compiledRegistrar.reset(new bytes(m_compiler.object("GlobalRegistrar").bytecode));
|
||||
}
|
||||
sendMessage(*s_compiledRegistrar, true);
|
||||
|
@ -136,7 +136,7 @@ protected:
|
||||
m_compiler.reset(false);
|
||||
m_compiler.addSource("", registrarCode);
|
||||
m_compiler.setOptimiserSettings(m_optimize, m_optimizeRuns);
|
||||
ETH_TEST_REQUIRE_NO_THROW(m_compiler.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
|
||||
s_compiledRegistrar.reset(new bytes(m_compiler.object("FixedFeeRegistrar").bytecode));
|
||||
}
|
||||
sendMessage(*s_compiledRegistrar, true);
|
||||
|
@ -451,7 +451,7 @@ protected:
|
||||
m_compiler.reset(false);
|
||||
m_compiler.addSource("", walletCode);
|
||||
m_compiler.setOptimiserSettings(m_optimize, m_optimizeRuns);
|
||||
ETH_TEST_REQUIRE_NO_THROW(m_compiler.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
|
||||
s_compiledWallet.reset(new bytes(m_compiler.object("Wallet").bytecode));
|
||||
}
|
||||
bytes args = encodeArgs(u256(0x60), _required, _dailyLimit, u256(_owners.size()), _owners);
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
m_compiler.reset(false);
|
||||
m_compiler.addSource("", "pragma solidity >=0.0;\n" + _sourceCode);
|
||||
m_compiler.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||
ETH_TEST_REQUIRE_NO_THROW(m_compiler.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
|
||||
|
||||
AssemblyItems const* items = m_compiler.runtimeAssemblyItems("");
|
||||
ASTNode const& sourceUnit = m_compiler.ast();
|
||||
|
@ -46,7 +46,7 @@ BOOST_AUTO_TEST_CASE(metadata_stamp)
|
||||
CompilerStack compilerStack;
|
||||
compilerStack.addSource("", std::string(sourceCode));
|
||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||
ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
|
||||
std::string const& metadata = compilerStack.metadata("test");
|
||||
BOOST_CHECK(dev::test::isValidMetadata(metadata));
|
||||
@ -72,7 +72,7 @@ BOOST_AUTO_TEST_CASE(metadata_stamp_experimental)
|
||||
CompilerStack compilerStack;
|
||||
compilerStack.addSource("", std::string(sourceCode));
|
||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||
ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
|
||||
std::string const& metadata = compilerStack.metadata("test");
|
||||
BOOST_CHECK(dev::test::isValidMetadata(metadata));
|
||||
@ -106,7 +106,7 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources)
|
||||
)";
|
||||
compilerStack.addSource("B", std::string(sourceCode));
|
||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||
ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||
|
||||
std::string const& serialisedMetadata = compilerStack.metadata("A");
|
||||
BOOST_CHECK(dev::test::isValidMetadata(serialisedMetadata));
|
||||
@ -144,7 +144,7 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources_imports)
|
||||
)";
|
||||
compilerStack.addSource("C", std::string(sourceCode));
|
||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||
ETH_TEST_REQUIRE_NO_THROW(compilerStack.compile(), "Compiling contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||
|
||||
std::string const& serialisedMetadata = compilerStack.metadata("C");
|
||||
BOOST_CHECK(dev::test::isValidMetadata(serialisedMetadata));
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
{
|
||||
m_compilerStack.reset(false);
|
||||
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
||||
ETH_TEST_REQUIRE_NO_THROW(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
||||
|
||||
Json::Value generatedInterface = m_compilerStack.contractABI("");
|
||||
Json::Value expectedInterface;
|
||||
|
@ -125,7 +125,7 @@ bytes compileFirstExpression(
|
||||
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
||||
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
||||
{
|
||||
ETH_TEST_REQUIRE_NO_THROW(resolver.resolveNamesAndTypes(*contract), "Resolving names failed");
|
||||
BOOST_REQUIRE_MESSAGE(resolver.resolveNamesAndTypes(*contract), "Resolving names failed");
|
||||
inheritanceHierarchy = vector<ContractDefinition const*>(1, contract);
|
||||
}
|
||||
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
||||
|
@ -47,7 +47,7 @@ public:
|
||||
{
|
||||
m_compilerStack.reset(false);
|
||||
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
||||
ETH_TEST_REQUIRE_NO_THROW(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
||||
BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
||||
|
||||
Json::Value generatedDocumentation;
|
||||
if (_userDocumentation)
|
||||
|
@ -250,7 +250,7 @@ BOOST_AUTO_TEST_CASE(function_natspec_documentation)
|
||||
FunctionDefinition const* function = nullptr;
|
||||
auto functions = contract->definedFunctions();
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "This is a test function");
|
||||
}
|
||||
|
||||
@ -268,7 +268,7 @@ BOOST_AUTO_TEST_CASE(function_normal_comments)
|
||||
ErrorList errors;
|
||||
ASTPointer<ContractDefinition> contract = parseText(text, errors);
|
||||
auto functions = contract->definedFunctions();
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_CHECK_MESSAGE(function->documentation() == nullptr,
|
||||
"Should not have gotten a Natspecc comment for this function");
|
||||
}
|
||||
@ -294,17 +294,17 @@ BOOST_AUTO_TEST_CASE(multiple_functions_natspec_documentation)
|
||||
ASTPointer<ContractDefinition> contract = parseText(text, errors);
|
||||
auto functions = contract->definedFunctions();
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "This is test function 1");
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(1), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(1), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "This is test function 2");
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(2), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(2), "Failed to retrieve function");
|
||||
BOOST_CHECK_MESSAGE(function->documentation() == nullptr,
|
||||
"Should not have gotten natspec comment for functionName3()");
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(3), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(3), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "This is test function 4");
|
||||
}
|
||||
|
||||
@ -323,7 +323,7 @@ BOOST_AUTO_TEST_CASE(multiline_function_documentation)
|
||||
ErrorList errors;
|
||||
ASTPointer<ContractDefinition> contract = parseText(text, errors);
|
||||
auto functions = contract->definedFunctions();
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "This is a test function\n"
|
||||
" and it has 2 lines");
|
||||
}
|
||||
@ -351,10 +351,10 @@ BOOST_AUTO_TEST_CASE(natspec_comment_in_function_body)
|
||||
ASTPointer<ContractDefinition> contract = parseText(text, errors);
|
||||
auto functions = contract->definedFunctions();
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "fun1 description");
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(1), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(1), "Failed to retrieve function");
|
||||
checkFunctionNatspec(function, "This is a test function\n"
|
||||
" and it has 2 lines");
|
||||
}
|
||||
@ -380,7 +380,7 @@ BOOST_AUTO_TEST_CASE(natspec_docstring_between_keyword_and_signature)
|
||||
ASTPointer<ContractDefinition> contract = parseText(text, errors);
|
||||
auto functions = contract->definedFunctions();
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_CHECK_MESSAGE(!function->documentation(),
|
||||
"Shouldn't get natspec docstring for this function");
|
||||
}
|
||||
@ -406,7 +406,7 @@ BOOST_AUTO_TEST_CASE(natspec_docstring_after_signature)
|
||||
ASTPointer<ContractDefinition> contract = parseText(text, errors);
|
||||
auto functions = contract->definedFunctions();
|
||||
|
||||
ETH_TEST_REQUIRE_NO_THROW(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_REQUIRE_MESSAGE(function = functions.at(0), "Failed to retrieve function");
|
||||
BOOST_CHECK_MESSAGE(!function->documentation(),
|
||||
"Shouldn't get natspec docstring for this function");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user