Skip to content

Commit

Permalink
Tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
chriseth committed Feb 22, 2018
1 parent 04b0d9c commit 5b63eb0
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 0 deletions.
68 changes: 68 additions & 0 deletions test/libsolidity/ABIDecoderTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -786,6 +786,74 @@ BOOST_AUTO_TEST_CASE(complex_struct)
}


BOOST_AUTO_TEST_CASE(return_dynamic_types_cross_call_simple)
{
string sourceCode = R"(
contract C {
function dyn() public returns (bytes) {
return "1234567890123456789012345678901234567890";
}
function f() public returns (bytes) {
return this.dyn();
}
}
)";
BOTH_ENCODERS(
compileAndRun(sourceCode, 0, "C");
ABI_CHECK(callContractFunction("f()"), encodeArgs(0x20, 40, string("1234567890123456789012345678901234567890")));
)
}

BOOST_AUTO_TEST_CASE(return_dynamic_types_cross_call_advanced)
{
string sourceCode = R"(
contract C {
function dyn() public returns (bytes a, uint b, bytes20[] c, uint d) {
a = "1234567890123456789012345678901234567890";
b = uint(-1);
c = new bytes20[](4);
c[0] = bytes20(1234);
c[3] = bytes20(6789);
d = 0x1234;
}
function f() public returns (bytes, uint, bytes20[], uint) {
return this.dyn();
}
}
)";
BOTH_ENCODERS(
compileAndRun(sourceCode, 0, "C");
ABI_CHECK(callContractFunction("f()"), encodeArgs(
0x80, u256(-1), 0xe0, 0x1234,
40, string("1234567890123456789012345678901234567890"),
4, u256(1234) << (8 * (32 - 20)), 0, 0, u256(6789) << (8 * (32 - 20))
));
)
}

BOOST_AUTO_TEST_CASE(return_dynamic_types_cross_call_out_of_range)
{
string sourceCode = R"(
contract C {
function dyn(uint x) public returns (bytes a) {
assembly {
mstore(0, 0x20)
mstore(0x20, 0x21)
return(0, x)
}
}
function f(uint x) public returns (bool) {
this.dyn(x);
return true;
}
}
)";
BOTH_ENCODERS(
compileAndRun(sourceCode, 0, "C");
ABI_CHECK(callContractFunction("f(uint256)", 0x60), encodeArgs());
ABI_CHECK(callContractFunction("f(uint256)", 0x61), encodeArgs(true));
)
}

BOOST_AUTO_TEST_SUITE_END()

Expand Down
17 changes: 17 additions & 0 deletions test/libsolidity/SolidityNameAndTypeResolution.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5946,6 +5946,23 @@ BOOST_AUTO_TEST_CASE(return_structs)
CHECK_SUCCESS(text);
}

BOOST_AUTO_TEST_CASE(read_returned_struct)
{
char const* text = R"(
pragma experimental ABIEncoderV2;
contract A {
struct T {
int x;
int y;
}
function g() public returns (T) {
return this.g();
}
}
)";
CHECK_WARNING(text, "Experimental features");
}

BOOST_AUTO_TEST_CASE(return_recursive_structs)
{
char const* text = R"(
Expand Down

0 comments on commit 5b63eb0

Please sign in to comment.