aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rwxr-xr-xtest/externalTests.sh45
-rw-r--r--test/libjulia/Simplifier.cpp12
-rw-r--r--test/libsolidity/SolidityNameAndTypeResolution.cpp32
-rw-r--r--test/libsolidity/ViewPureChecker.cpp14
4 files changed, 69 insertions, 34 deletions
diff --git a/test/externalTests.sh b/test/externalTests.sh
index f707d6db..2a5ff7ef 100755
--- a/test/externalTests.sh
+++ b/test/externalTests.sh
@@ -36,21 +36,32 @@ fi
SOLJSON="$1"
-DIR=$(mktemp -d)
-(
- echo "Running Zeppelin tests..."
- git clone --depth 1 https://github.com/OpenZeppelin/zeppelin-solidity.git "$DIR"
- cd "$DIR"
+function test_truffle
+{
+ name="$1"
+ repo="$2"
+ echo "Running $name tests..."
+ DIR=$(mktemp -d)
+ (
+ git clone --depth 1 "$repo" "$DIR"
+ cd "$DIR"
+ npm install
+ find . -name soljson.js -exec cp "$SOLJSON" {} \;
+ if [ "$name" == "Zeppelin" ]; then
+ # Fix some things that look like bugs (only seemed to fail on Node 6 and not Node 8)
+ # FIXME: report upstream or to web3.js?
+ sed -i -e 's/let token = await ERC827TokenMock.new();//;' test/token/ERC827/ERC827Token.js
+ sed -i -e 's/CappedCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0)/CappedCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0, this.token.address)/' test/crowdsale/CappedCrowdsale.test.js
+ sed -i -e 's/RefundableCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0, { from: owner })/RefundableCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0, this.token.address, { from: owner })/' test/crowdsale/RefundableCrowdsale.test.js
+ fi
+ if [ "$name" == "Gnosis" ]; then
+ # Replace fixed-version pragmas in Gnosis (part of Consensys best practice)
+ find contracts test -name '*.sol' -type f -print0 | xargs -0 sed -i -e 's/pragma solidity 0/pragma solidity ^0/'
+ fi
+ npm run test
+ )
+ rm -rf "$DIR"
+}
- # Fix some things that look like bugs (only seemed to fail on Node 6 and not Node 8)
- # FIXME: report upstream or to web3.js?
- sed -i -e 's/let token = await ERC827TokenMock.new();//;' test/token/ERC827/ERC827Token.js
- sed -i -e 's/CappedCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0)/CappedCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0, this.token.address)/' test/crowdsale/CappedCrowdsale.test.js
- sed -i -e 's/RefundableCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0, { from: owner })/RefundableCrowdsale.new(this.startTime, this.endTime, rate, wallet, 0, this.token.address, { from: owner })/' test/crowdsale/RefundableCrowdsale.test.js
-
- npm install
- find . -name soljson.js -exec cp "$SOLJSON" {} \;
-
- npm run test
-)
-rm -rf "$DIR"
+test_truffle Gnosis https://github.com/gnosis/gnosis-contracts.git
+test_truffle Zeppelin https://github.com/OpenZeppelin/zeppelin-solidity.git
diff --git a/test/libjulia/Simplifier.cpp b/test/libjulia/Simplifier.cpp
index b48d45c8..4d4e8d53 100644
--- a/test/libjulia/Simplifier.cpp
+++ b/test/libjulia/Simplifier.cpp
@@ -127,4 +127,16 @@ BOOST_AUTO_TEST_CASE(inside_for)
);
}
+BOOST_AUTO_TEST_CASE(mod_and)
+{
+ CHECK(
+ "{ mstore(0, mod(calldataload(0), exp(2, 8))) }",
+ "{ mstore(0, and(calldataload(0), 255)) }"
+ );
+ CHECK(
+ "{ mstore(0, mod(calldataload(0), exp(2, 255))) }",
+ "{ mstore(0, and(calldataload(0), 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)) }"
+ );
+}
+
BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/libsolidity/SolidityNameAndTypeResolution.cpp b/test/libsolidity/SolidityNameAndTypeResolution.cpp
index 4eade7f1..e757c755 100644
--- a/test/libsolidity/SolidityNameAndTypeResolution.cpp
+++ b/test/libsolidity/SolidityNameAndTypeResolution.cpp
@@ -1844,7 +1844,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
}
}
)";
- CHECK_WARNING(sourceCode, "uint8, which can hold values between 0 and 255");
+ CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
+ "uint8, which can hold values between 0 and 255",
+ "Use of the \"var\" keyword is deprecated."
+ }));
sourceCode = R"(
contract test {
function f() pure public {
@@ -1853,7 +1856,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
}
}
)";
- CHECK_WARNING(sourceCode, "uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935");
+ CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
+ "uint256, which can hold values between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935",
+ "Use of the \"var\" keyword is deprecated."
+ }));
sourceCode = R"(
contract test {
function f() pure public {
@@ -1862,7 +1868,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
}
}
)";
- CHECK_WARNING(sourceCode, "int8, which can hold values between -128 and 127");
+ CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
+ "int8, which can hold values between -128 and 127",
+ "Use of the \"var\" keyword is deprecated."
+ }));
sourceCode = R"(
contract test {
function f() pure public {
@@ -1870,7 +1879,10 @@ BOOST_AUTO_TEST_CASE(warn_var_from_zero)
}
}
)";
- CHECK_WARNING(sourceCode, "uint8, which can hold");
+ CHECK_WARNING_ALLOW_MULTI(sourceCode, (std::vector<std::string>{
+ "uint8, which can hold",
+ "Use of the \"var\" keyword is deprecated."
+ }));
}
BOOST_AUTO_TEST_CASE(enum_member_access)
@@ -4887,8 +4899,7 @@ BOOST_AUTO_TEST_CASE(warn_about_callcode)
char const* text = R"(
contract test {
function f() pure public {
- var x = address(0x12).callcode;
- x;
+ address(0x12).callcode;
}
}
)";
@@ -4897,8 +4908,7 @@ BOOST_AUTO_TEST_CASE(warn_about_callcode)
pragma experimental "v0.5.0";
contract test {
function f() pure public {
- var x = address(0x12).callcode;
- x;
+ address(0x12).callcode;
}
}
)";
@@ -6918,7 +6928,7 @@ BOOST_AUTO_TEST_CASE(function_types_sig)
}
}
)";
- CHECK_SUCCESS_NO_WARNINGS(text);
+ CHECK_WARNING(text, "Use of the \"var\" keyword is deprecated.");
text = R"(
contract C {
function h() pure external {
@@ -6941,7 +6951,7 @@ BOOST_AUTO_TEST_CASE(function_types_sig)
}
}
)";
- CHECK_SUCCESS_NO_WARNINGS(text);
+ CHECK_WARNING(text, "Use of the \"var\" keyword is deprecated.");
}
BOOST_AUTO_TEST_CASE(using_this_in_constructor)
@@ -7349,7 +7359,7 @@ BOOST_AUTO_TEST_CASE(warn_about_sha3)
char const* text = R"(
contract test {
function f() pure public {
- var x = sha3(uint8(1));
+ bytes32 x = sha3(uint8(1));
x;
}
}
diff --git a/test/libsolidity/ViewPureChecker.cpp b/test/libsolidity/ViewPureChecker.cpp
index debeb4dc..e91e713c 100644
--- a/test/libsolidity/ViewPureChecker.cpp
+++ b/test/libsolidity/ViewPureChecker.cpp
@@ -136,10 +136,12 @@ BOOST_AUTO_TEST_CASE(environment_access)
}
for (string const& x: pure)
{
- CHECK_WARNING(
+ CHECK_WARNING_ALLOW_MULTI(
"contract C { function f() view public { var x = " + x + "; x; } }",
- "restricted to pure"
- );
+ (std::vector<std::string>{
+ "Function state mutability can be restricted to pure",
+ "Use of the \"var\" keyword is deprecated."
+ }));
}
}
@@ -282,9 +284,9 @@ BOOST_AUTO_TEST_CASE(builtin_functions)
require(this.call());
}
function g() pure public {
- var x = keccak256("abc");
- var y = sha256("abc");
- var z = ecrecover(1, 2, 3, 4);
+ bytes32 x = keccak256("abc");
+ bytes32 y = sha256("abc");
+ address z = ecrecover(1, 2, 3, 4);
require(true);
assert(true);
x; y; z;