Merge branch 'develop' into externalFunctionsInLibraries

This commit is contained in:
chriseth
2018-03-14 18:07:55 +01:00
committed by GitHub
43 changed files with 213 additions and 48 deletions
+1 -1
View File
@@ -22,7 +22,7 @@
#pragma once
#include <test/TestHelper.h>
#include <test/Options.h>
#include <test/RPCSession.h>
#include <libsolidity/interface/EVMVersion.h>
+15 -1
View File
@@ -19,9 +19,10 @@
* @date 2014
*/
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/interface/EVMVersion.h>
#include <libsolidity/interface/Exceptions.h>
#include <boost/test/framework.hpp>
@@ -71,6 +72,19 @@ Options::Options()
testPath = path;
}
void Options::validate() const
{
solAssert(
!dev::test::Options::get().testPath.empty(),
"No test path specified. The --testpath argument is required."
);
if (!disableIPC)
solAssert(
!dev::test::Options::get().ipcPath.empty(),
"No ipc path specified. The --ipcpath argument is required, unless --no-ipc is used."
);
}
dev::solidity::EVMVersion Options::evmVersion() const
{
if (!evmVersionString.empty())
+1
View File
@@ -41,6 +41,7 @@ struct Options: boost::noncopyable
bool disableIPC = false;
bool disableSMT = false;
void validate() const;
solidity::EVMVersion evmVersion() const;
static Options const& get();
+1 -1
View File
@@ -21,7 +21,7 @@
#include <test/RPCSession.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/interface/EVMVersion.h>
+2 -1
View File
@@ -35,7 +35,7 @@
#pragma GCC diagnostic pop
#include <test/TestHelper.h>
#include <test/Options.h>
#include <test/libsolidity/SyntaxTest.h>
using namespace boost::unit_test;
@@ -55,6 +55,7 @@ test_suite* init_unit_test_suite( int /*argc*/, char* /*argv*/[] )
{
master_test_suite_t& master = framework::master_test_suite();
master.p_name.value = "SolidityTests";
dev::test::Options::get().validate();
solAssert(dev::solidity::test::SyntaxTest::registerTests(
master,
dev::test::Options::get().testPath / "libsolidity",
+1 -1
View File
@@ -22,7 +22,7 @@
#include <libdevcore/Exceptions.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <libdevcore/IndentedWriter.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -21,7 +21,7 @@
#include <libdevcore/JSON.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <libdevcore/StringUtils.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <libdevcore/SwarmHash.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -21,7 +21,7 @@
#include <libdevcore/CommonData.h>
#include <libdevcore/UTF8.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <libdevcore/Whiskers.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -20,7 +20,7 @@
* Tests for the Solidity optimizer.
*/
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libevmasm/CommonSubexpressionEliminator.h>
#include <libevmasm/PeepholeOptimiser.h>
+1 -1
View File
@@ -22,7 +22,7 @@
#include <libevmasm/SourceLocation.h>
#include "../TestHelper.h"
#include <test/Options.h>
namespace dev
{
+1 -1
View File
@@ -21,7 +21,7 @@
#include <test/libjulia/Common.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libjulia/optimiser/Disambiguator.h>
+1 -1
View File
@@ -19,7 +19,7 @@
* Unit tests for parsing Julia.
*/
#include "../TestHelper.h"
#include <test/Options.h>
#include <test/libsolidity/ErrorCheck.h>
+1 -1
View File
@@ -20,7 +20,7 @@
* Unit tests for the LLL compiler.
*/
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libdevcore/FixedHash.h>
+1 -1
View File
@@ -21,7 +21,7 @@
*/
#include <test/liblll/ExecutionFramework.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <boost/test/unit_test.hpp>
+1 -1
View File
@@ -20,7 +20,7 @@
* Tests for the json ast output.
*/
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/interface/Exceptions.h>
#include <libsolidity/interface/CompilerStack.h>
+1 -1
View File
@@ -20,7 +20,7 @@
#include <test/libsolidity/AnalysisFramework.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/interface/CompilerStack.h>
#include <libsolidity/interface/SourceReferenceFormatter.h>
+1 -1
View File
@@ -20,7 +20,7 @@
* Unit tests for Assembly Items from evmasm/Assembly.h
*/
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libevmasm/SourceLocation.h>
#include <libevmasm/Assembly.h>
+1 -1
View File
@@ -21,7 +21,7 @@
*/
#include <test/libsolidity/ErrorCheck.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/interface/Exceptions.h>
#include <libsolidity/interface/CompilerStack.h>
+1 -1
View File
@@ -20,7 +20,7 @@
* Unit tests for inline assembly.
*/
#include "../TestHelper.h"
#include <test/Options.h>
#include <libsolidity/interface/AssemblyStack.h>
#include <libsolidity/parsing/Scanner.h>
+2 -2
View File
@@ -25,8 +25,8 @@
#include <libsolidity/interface/Version.h>
#include <libsolc/libsolc.h>
#include "../Metadata.h"
#include "../TestHelper.h"
#include <test/Metadata.h>
#include <test/Options.h>
using namespace std;
+2 -2
View File
@@ -19,8 +19,8 @@
* Unit tests for the metadata output.
*/
#include "../Metadata.h"
#include "../TestHelper.h"
#include <test/Metadata.h>
#include <test/Options.h>
#include <libsolidity/interface/CompilerStack.h>
#include <libdevcore/SwarmHash.h>
#include <libdevcore/JSON.h>
+1 -1
View File
@@ -25,7 +25,7 @@
#include <tuple>
#include <libsolidity/parsing/Scanner.h>
#include <libsolidity/analysis/SemVerHandler.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
+1 -1
View File
@@ -20,7 +20,7 @@
* Unit tests for the solidity compiler JSON Interface output.
*/
#include "../TestHelper.h"
#include <test/Options.h>
#include <libsolidity/interface/CompilerStack.h>
#include <libdevcore/Exceptions.h>
+70 -1
View File
@@ -23,7 +23,7 @@
#include <test/libsolidity/SolidityExecutionFramework.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/interface/Exceptions.h>
#include <libsolidity/interface/EVMVersion.h>
@@ -1788,6 +1788,23 @@ BOOST_AUTO_TEST_CASE(transfer_ether)
ABI_CHECK(callContractFunction("b(address,uint256)", oogRecipient, 10), encodeArgs());
}
BOOST_AUTO_TEST_CASE(uncalled_blockhash)
{
char const* code = R"(
contract C {
function f() public view returns (bytes32)
{
var x = block.blockhash;
return x(block.number - 1);
}
}
)";
compileAndRun(code, 0, "C");
bytes result = callContractFunction("f()");
BOOST_REQUIRE_EQUAL(result.size(), 32);
BOOST_CHECK(result[0] != 0 || result[1] != 0 || result[2] != 0);
}
BOOST_AUTO_TEST_CASE(log0)
{
char const* sourceCode = R"(
@@ -2879,6 +2896,58 @@ BOOST_AUTO_TEST_CASE(function_modifier_multiple_times_local_vars)
ABI_CHECK(callContractFunction("a()"), encodeArgs(0));
}
BOOST_AUTO_TEST_CASE(function_modifier_library)
{
char const* sourceCode = R"(
library L {
struct S { uint v; }
modifier mod(S storage s) { s.v++; _; }
function libFun(S storage s) mod(s) internal { s.v += 0x100; }
}
contract Test {
using L for *;
L.S s;
function f() public returns (uint) {
s.libFun();
L.libFun(s);
return s.v;
}
}
)";
compileAndRun(sourceCode);
ABI_CHECK(callContractFunction("f()"), encodeArgs(0x202));
}
BOOST_AUTO_TEST_CASE(function_modifier_library_inheritance)
{
// Tests that virtual lookup for modifiers in libraries does not consider
// the current inheritance hierarchy.
char const* sourceCode = R"(
library L {
struct S { uint v; }
modifier mod(S storage s) { s.v++; _; }
function libFun(S storage s) mod(s) internal { s.v += 0x100; }
}
contract Test {
using L for *;
L.S s;
modifier mod(L.S storage) { revert(); _; }
function f() public returns (uint) {
s.libFun();
L.libFun(s);
return s.v;
}
}
)";
compileAndRun(sourceCode);
ABI_CHECK(callContractFunction("f()"), encodeArgs(0x202));
}
BOOST_AUTO_TEST_CASE(crazy_elementary_typenames_on_stack)
{
char const* sourceCode = R"(
@@ -30,7 +30,7 @@
#include <libsolidity/ast/AST.h>
#include <libsolidity/analysis/TypeChecker.h>
#include <libsolidity/interface/ErrorReporter.h>
#include "../TestHelper.h"
#include <test/Options.h>
using namespace std;
@@ -22,7 +22,7 @@
#include <test/libsolidity/AnalysisFramework.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <libsolidity/ast/AST.h>
+1 -1
View File
@@ -20,7 +20,7 @@
* Unit tests for the solidity compiler JSON Interface output.
*/
#include "../TestHelper.h"
#include <test/Options.h>
#include <string>
#include <libdevcore/JSON.h>
#include <libsolidity/interface/CompilerStack.h>
+2 -2
View File
@@ -25,8 +25,8 @@
#include <libsolidity/parsing/Scanner.h>
#include <libsolidity/parsing/Parser.h>
#include <libsolidity/interface/ErrorReporter.h>
#include "../TestHelper.h"
#include "ErrorCheck.h"
#include <test/Options.h>
#include <test/libsolidity/ErrorCheck.h>
using namespace std;
+5 -1
View File
@@ -21,6 +21,7 @@
#include <boost/throw_exception.hpp>
#include <cctype>
#include <fstream>
#include <memory>
#include <stdexcept>
using namespace dev;
@@ -188,6 +189,9 @@ int SyntaxTest::registerTests(
}
else
{
static vector<unique_ptr<string>> filenames;
filenames.emplace_back(new string(_path.string()));
_suite.add(make_test_case(
[fullpath]
{
@@ -196,7 +200,7 @@ int SyntaxTest::registerTests(
BOOST_ERROR("Test expectation mismatch.\n" + errorStream.str());
},
_path.stem().string(),
_path.string(),
*filenames.back(),
0
));
numTestsAdded = 1;
+1 -1
View File
@@ -20,7 +20,7 @@
#include <test/libsolidity/AnalysisFramework.h>
#include <test/TestHelper.h>
#include <test/Options.h>
#include <boost/test/unit_test.hpp>
@@ -0,0 +1,6 @@
contract C {
/// @param id
function vote(uint id) public;
}
// ----
// DocstringParsingError: No description given for param id
@@ -0,0 +1,14 @@
library WithModifier {
modifier mod() { require(msg.value > 10 ether); _; }
function withMod(uint self) mod() internal view { require(self > 0); }
}
contract Test {
using WithModifier for *;
function f(uint _value) public payable {
_value.withMod();
WithModifier.withMod(_value);
}
}
// ----