aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp66
-rw-r--r--test/libsolidity/SolidityNameAndTypeResolution.cpp13
2 files changed, 79 insertions, 0 deletions
diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp
index 2abd9aa1..1f70a84e 100644
--- a/test/libsolidity/SolidityEndToEndTest.cpp
+++ b/test/libsolidity/SolidityEndToEndTest.cpp
@@ -5681,6 +5681,72 @@ BOOST_AUTO_TEST_CASE(state_variable_under_contract_name)
BOOST_CHECK(callContractFunction("getStateVar()") == encodeArgs(u256(42)));
}
+BOOST_AUTO_TEST_CASE(state_variable_local_variable_mixture)
+{
+ char const* sourceCode = R"(
+ contract A {
+ uint x = 1;
+ uint y = 2;
+ function a() returns (uint x) {
+ x = A.y;
+ }
+ }
+ )";
+
+ compileAndRun(sourceCode);
+ BOOST_CHECK(callContractFunction("a()") == encodeArgs(u256(2)));
+}
+
+BOOST_AUTO_TEST_CASE(inherited_function) {
+ char const* sourceCode = R"(
+ contract A { function f() internal returns (uint) { return 1; } }
+ contract B is A {
+ function f() internal returns (uint) { return 2; }
+ function g() returns (uint) {
+ return A.f();
+ }
+ }
+ )";
+
+ compileAndRun(sourceCode, 0, "B");
+ BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(1)));
+}
+
+BOOST_AUTO_TEST_CASE(inherited_function_from_a_library) {
+ char const* sourceCode = R"(
+ library A { function f() internal returns (uint) { return 1; } }
+ contract B {
+ function f() internal returns (uint) { return 2; }
+ function g() returns (uint) {
+ return A.f();
+ }
+ }
+ )";
+
+ compileAndRun(sourceCode, 0, "B");
+ BOOST_CHECK(callContractFunction("g()") == encodeArgs(u256(1)));
+}
+
+BOOST_AUTO_TEST_CASE(multiple_inherited_state_vars)
+{
+ char const* sourceCode = R"(
+ contract A {
+ uint x = 7;
+ }
+ contract B {
+ uint x = 9;
+ }
+ contract C is A, B {
+ function f() returns (uint) {
+ return A.x;
+ }
+ }
+ )";
+
+ compileAndRun(sourceCode, 0, "C");
+ BOOST_CHECK(callContractFunction("f()") == encodeArgs(u256(7)));
+}
+
BOOST_AUTO_TEST_CASE(constant_string_literal)
{
char const* sourceCode = R"(
diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp
index 44ac1511..b4ab5f8d 100644
--- a/test/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -1036,6 +1036,19 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
BOOST_CHECK_MESSAGE(function == nullptr, "Accessor function of an internal variable should not exist");
}
+BOOST_AUTO_TEST_CASE(missing_state_variable)
+{
+ char const* text = R"(
+ contract Scope {
+ function getStateVar() constant returns (uint stateVar) {
+ stateVar = Scope.stateVar; // should fail.
+ }
+ }
+ )";
+ BOOST_CHECK(expectError(text) == Error::Type::TypeError);
+}
+
+
BOOST_AUTO_TEST_CASE(base_class_state_variable_accessor)
{
// test for issue #1126 https://github.com/ethereum/cpp-ethereum/issues/1126