aboutsummaryrefslogtreecommitdiffstats
path: root/test/libsolidity/SolidityEndToEndTest.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-08-07 23:20:05 +0800
committerGitHub <noreply@github.com>2018-08-07 23:20:05 +0800
commitd7756322c07634fa2ca0649a33585fc167079786 (patch)
tree2b28b52fe554d187c30787a34b84ea0dba56faf3 /test/libsolidity/SolidityEndToEndTest.cpp
parent901550e473f001d2c6666870d71dbf0b9ff8c1ff (diff)
parent34a711a14daf9874061a83401bf28a57b3abf1b1 (diff)
downloaddexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.tar
dexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.tar.gz
dexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.tar.bz2
dexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.tar.lz
dexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.tar.xz
dexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.tar.zst
dexon-solidity-d7756322c07634fa2ca0649a33585fc167079786.zip
Merge pull request #4731 from ethereum/interface-enum
Allow enums in interfaces
Diffstat (limited to 'test/libsolidity/SolidityEndToEndTest.cpp')
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index bd1d9de7..a6c1372b 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -4577,6 +4577,50 @@ BOOST_AUTO_TEST_CASE(constructing_enums_from_ints)
ABI_CHECK(callContractFunction("test()"), encodeArgs(1));
}
+BOOST_AUTO_TEST_CASE(enum_referencing)
+{
+ char const* sourceCode = R"(
+ interface I {
+ enum Direction { A, B, Left, Right }
+ }
+ library L {
+ enum Direction { Left, Right }
+ function f() public pure returns (Direction) {
+ return Direction.Right;
+ }
+ function g() public pure returns (I.Direction) {
+ return I.Direction.Right;
+ }
+ }
+ contract C is I {
+ function f() public pure returns (Direction) {
+ return Direction.Right;
+ }
+ function g() public pure returns (I.Direction) {
+ return I.Direction.Right;
+ }
+ function h() public pure returns (L.Direction) {
+ return L.Direction.Right;
+ }
+ function x() public pure returns (L.Direction) {
+ return L.f();
+ }
+ function y() public pure returns (I.Direction) {
+ return L.g();
+ }
+ }
+ )";
+ compileAndRun(sourceCode, 0, "L");
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
+ compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"L", m_contractAddress}});
+ ABI_CHECK(callContractFunction("f()"), encodeArgs(3));
+ ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
+ ABI_CHECK(callContractFunction("h()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("x()"), encodeArgs(1));
+ ABI_CHECK(callContractFunction("y()"), encodeArgs(3));
+}
+
BOOST_AUTO_TEST_CASE(inline_member_init)
{
char const* sourceCode = R"(