diff options
author | chriseth <chris@ethereum.org> | 2017-07-27 20:20:18 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-27 20:20:18 +0800 |
commit | 517a36640469ccf2501f85f763776b04268276c8 (patch) | |
tree | e09534264628a5477470c38dd62572a1b645803b /test | |
parent | 1caa14b0717533dc415d76aa92061235c7aaebfd (diff) | |
parent | 7c7c2baa82ec2fa0535381c2ea3418b8623a9062 (diff) | |
download | dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.tar dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.tar.gz dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.tar.bz2 dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.tar.lz dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.tar.xz dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.tar.zst dexon-solidity-517a36640469ccf2501f85f763776b04268276c8.zip |
Merge pull request #2652 from ethereum/fixMultiModifier
Re-allow multiple modifiers per function.
Diffstat (limited to 'test')
-rw-r--r-- | test/libsolidity/SolidityEndToEndTest.cpp | 28 | ||||
-rw-r--r-- | test/libsolidity/SolidityNameAndTypeResolution.cpp | 2 |
2 files changed, 29 insertions, 1 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 94d3e168..5bcde441 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -2696,6 +2696,34 @@ BOOST_AUTO_TEST_CASE(function_modifier_for_constructor) BOOST_CHECK(callContractFunction("getData()") == encodeArgs(4 | 2)); } +BOOST_AUTO_TEST_CASE(function_modifier_multiple_times) +{ + char const* sourceCode = R"( + contract C { + uint public a; + modifier mod(uint x) { a += x; _; } + function f(uint x) mod(2) mod(5) mod(x) returns(uint) { return a; } + } + )"; + compileAndRun(sourceCode); + BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(2 + 5 + 3)); + BOOST_CHECK(callContractFunction("a()") == encodeArgs(2 + 5 + 3)); +} + +BOOST_AUTO_TEST_CASE(function_modifier_multiple_times_local_vars) +{ + char const* sourceCode = R"( + contract C { + uint public a; + modifier mod(uint x) { uint b = x; a += b; _; a -= b; assert(b == x); } + function f(uint x) mod(2) mod(5) mod(x) returns(uint) { return a; } + } + )"; + compileAndRun(sourceCode); + BOOST_CHECK(callContractFunction("f(uint256)", u256(3)) == encodeArgs(2 + 5 + 3)); + BOOST_CHECK(callContractFunction("a()") == encodeArgs(0)); +} + BOOST_AUTO_TEST_CASE(crazy_elementary_typenames_on_stack) { char const* sourceCode = R"( diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp index 48fe4d24..accf86c6 100644 --- a/test/libsolidity/SolidityNameAndTypeResolution.cpp +++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp @@ -1115,7 +1115,7 @@ BOOST_AUTO_TEST_CASE(function_modifier_double_invocation) modifier mod(uint a) { if (a > 0) _; } } )"; - CHECK_ERROR(text, DeclarationError, "Modifier already used for this function"); + success(text); } BOOST_AUTO_TEST_CASE(base_constructor_double_invocation) |