mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Correctly set evm version in tests
This commit is contained in:
parent
739533e9c7
commit
05cc5f22b2
@ -20,12 +20,16 @@
|
|||||||
* Tests for the json ast output.
|
* Tests for the json ast output.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string>
|
#include <test/TestHelper.h>
|
||||||
#include <boost/test/unit_test.hpp>
|
|
||||||
#include <libsolidity/interface/Exceptions.h>
|
#include <libsolidity/interface/Exceptions.h>
|
||||||
#include <libsolidity/interface/CompilerStack.h>
|
#include <libsolidity/interface/CompilerStack.h>
|
||||||
#include <libsolidity/ast/ASTJsonConverter.h>
|
#include <libsolidity/ast/ASTJsonConverter.h>
|
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace dev
|
namespace dev
|
||||||
@ -41,6 +45,7 @@ BOOST_AUTO_TEST_CASE(smoke_test)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C {}");
|
c.addSource("a", "contract C {}");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -52,6 +57,7 @@ BOOST_AUTO_TEST_CASE(source_location)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { function f() { var x = 2; x++; } }");
|
c.addSource("a", "contract C { function f() { var x = 2; x++; } }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -66,6 +72,7 @@ BOOST_AUTO_TEST_CASE(inheritance_specifier)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C1 {} contract C2 is C1 {}");
|
c.addSource("a", "contract C1 {} contract C2 is C1 {}");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -81,6 +88,7 @@ BOOST_AUTO_TEST_CASE(using_for_directive)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "library L {} contract C { using L for uint; }");
|
c.addSource("a", "library L {} contract C { using L for uint; }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -98,6 +106,7 @@ BOOST_AUTO_TEST_CASE(enum_value)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { enum E { A, B } }");
|
c.addSource("a", "contract C { enum E { A, B } }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -115,6 +124,7 @@ BOOST_AUTO_TEST_CASE(modifier_definition)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { modifier M(uint i) { _; } function F() M(1) {} }");
|
c.addSource("a", "contract C { modifier M(uint i) { _; } function F() M(1) {} }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -129,6 +139,7 @@ BOOST_AUTO_TEST_CASE(modifier_invocation)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { modifier M(uint i) { _; } function F() M(1) {} }");
|
c.addSource("a", "contract C { modifier M(uint i) { _; } function F() M(1) {} }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -145,6 +156,7 @@ BOOST_AUTO_TEST_CASE(event_definition)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { event E(); }");
|
c.addSource("a", "contract C { event E(); }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -159,6 +171,7 @@ BOOST_AUTO_TEST_CASE(array_type_name)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { uint[] i; }");
|
c.addSource("a", "contract C { uint[] i; }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -172,6 +185,7 @@ BOOST_AUTO_TEST_CASE(placeholder_statement)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { modifier M { _; } }");
|
c.addSource("a", "contract C { modifier M { _; } }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -185,6 +199,7 @@ BOOST_AUTO_TEST_CASE(non_utf8)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { function f() { var x = hex\"ff\"; } }");
|
c.addSource("a", "contract C { function f() { var x = hex\"ff\"; } }");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -204,6 +219,7 @@ BOOST_AUTO_TEST_CASE(function_type)
|
|||||||
"contract C { function f(function() external payable returns (uint) x) "
|
"contract C { function f(function() external payable returns (uint) x) "
|
||||||
"returns (function() external constant returns (uint)) {} }"
|
"returns (function() external constant returns (uint)) {} }"
|
||||||
);
|
);
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 1;
|
sourceIndices["a"] = 1;
|
||||||
@ -244,6 +260,7 @@ BOOST_AUTO_TEST_CASE(documentation)
|
|||||||
" /** Some comment on fn.*/ function fn() public {}"
|
" /** Some comment on fn.*/ function fn() public {}"
|
||||||
"}"
|
"}"
|
||||||
);
|
);
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
c.parseAndAnalyze();
|
c.parseAndAnalyze();
|
||||||
map<string, unsigned> sourceIndices;
|
map<string, unsigned> sourceIndices;
|
||||||
sourceIndices["a"] = 0;
|
sourceIndices["a"] = 0;
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
#include <test/libsolidity/AnalysisFramework.h>
|
#include <test/libsolidity/AnalysisFramework.h>
|
||||||
|
|
||||||
|
#include <test/TestHelper.h>
|
||||||
|
|
||||||
#include <libsolidity/interface/CompilerStack.h>
|
#include <libsolidity/interface/CompilerStack.h>
|
||||||
#include <libsolidity/interface/SourceReferenceFormatter.h>
|
#include <libsolidity/interface/SourceReferenceFormatter.h>
|
||||||
|
|
||||||
@ -46,6 +48,7 @@ AnalysisFramework::parseAnalyseAndReturnError(
|
|||||||
{
|
{
|
||||||
m_compiler.reset();
|
m_compiler.reset();
|
||||||
m_compiler.addSource("", _insertVersionPragma ? "pragma solidity >=0.0;\n" + _source : _source);
|
m_compiler.addSource("", _insertVersionPragma ? "pragma solidity >=0.0;\n" + _source : _source);
|
||||||
|
m_compiler.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
if (!m_compiler.parse())
|
if (!m_compiler.parse())
|
||||||
{
|
{
|
||||||
BOOST_ERROR("Parsing contract failed in analysis test suite:" + formatErrors());
|
BOOST_ERROR("Parsing contract failed in analysis test suite:" + formatErrors());
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
* Unit tests for Assembly Items from evmasm/Assembly.h
|
* Unit tests for Assembly Items from evmasm/Assembly.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <test/TestHelper.h>
|
||||||
|
|
||||||
#include <libevmasm/SourceLocation.h>
|
#include <libevmasm/SourceLocation.h>
|
||||||
#include <libevmasm/Assembly.h>
|
#include <libevmasm/Assembly.h>
|
||||||
|
|
||||||
@ -72,7 +74,7 @@ eth::AssemblyItems compileContract(string const& _sourceCode)
|
|||||||
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
||||||
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
||||||
{
|
{
|
||||||
TypeChecker checker(EVMVersion{}, errorReporter);
|
TypeChecker checker(dev::test::Options::get().evmVersion(), errorReporter);
|
||||||
BOOST_REQUIRE_NO_THROW(checker.checkTypeRequirements(*contract));
|
BOOST_REQUIRE_NO_THROW(checker.checkTypeRequirements(*contract));
|
||||||
if (!Error::containsOnlyWarnings(errorReporter.errors()))
|
if (!Error::containsOnlyWarnings(errorReporter.errors()))
|
||||||
return AssemblyItems();
|
return AssemblyItems();
|
||||||
@ -80,7 +82,7 @@ eth::AssemblyItems compileContract(string const& _sourceCode)
|
|||||||
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
||||||
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
||||||
{
|
{
|
||||||
Compiler compiler;
|
Compiler compiler(dev::test::Options::get().evmVersion());
|
||||||
compiler.compileContract(*contract, map<ContractDefinition const*, Assembly const*>{}, bytes());
|
compiler.compileContract(*contract, map<ContractDefinition const*, Assembly const*>{}, bytes());
|
||||||
|
|
||||||
return compiler.runtimeAssemblyItems();
|
return compiler.runtimeAssemblyItems();
|
||||||
|
@ -49,6 +49,7 @@ public:
|
|||||||
m_compiler.reset(false);
|
m_compiler.reset(false);
|
||||||
m_compiler.addSource("", "pragma solidity >=0.0;\n" + _sourceCode);
|
m_compiler.addSource("", "pragma solidity >=0.0;\n" + _sourceCode);
|
||||||
m_compiler.setOptimiserSettings(dev::test::Options::get().optimize);
|
m_compiler.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||||
|
m_compiler.setEVMVersion(m_evmVersion);
|
||||||
BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
|
BOOST_REQUIRE_MESSAGE(m_compiler.compile(), "Compiling contract failed");
|
||||||
|
|
||||||
AssemblyItems const* items = m_compiler.runtimeAssemblyItems(m_compiler.lastContractName());
|
AssemblyItems const* items = m_compiler.runtimeAssemblyItems(m_compiler.lastContractName());
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <test/libsolidity/ErrorCheck.h>
|
#include <test/libsolidity/ErrorCheck.h>
|
||||||
|
#include <test/TestHelper.h>
|
||||||
|
|
||||||
#include <libsolidity/interface/Exceptions.h>
|
#include <libsolidity/interface/Exceptions.h>
|
||||||
#include <libsolidity/interface/CompilerStack.h>
|
#include <libsolidity/interface/CompilerStack.h>
|
||||||
@ -44,6 +45,7 @@ BOOST_AUTO_TEST_CASE(smoke_test)
|
|||||||
{
|
{
|
||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C {} pragma solidity >=0.0;");
|
c.addSource("a", "contract C {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,6 +54,7 @@ BOOST_AUTO_TEST_CASE(regular_import)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C {} pragma solidity >=0.0;");
|
c.addSource("a", "contract C {} pragma solidity >=0.0;");
|
||||||
c.addSource("b", "import \"a\"; contract D is C {} pragma solidity >=0.0;");
|
c.addSource("b", "import \"a\"; contract D is C {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,6 +63,7 @@ BOOST_AUTO_TEST_CASE(import_does_not_clutter_importee)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract C { D d; } pragma solidity >=0.0;");
|
c.addSource("a", "contract C { D d; } pragma solidity >=0.0;");
|
||||||
c.addSource("b", "import \"a\"; contract D is C {} pragma solidity >=0.0;");
|
c.addSource("b", "import \"a\"; contract D is C {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +73,7 @@ BOOST_AUTO_TEST_CASE(import_is_transitive)
|
|||||||
c.addSource("a", "contract C { } pragma solidity >=0.0;");
|
c.addSource("a", "contract C { } pragma solidity >=0.0;");
|
||||||
c.addSource("b", "import \"a\"; pragma solidity >=0.0;");
|
c.addSource("b", "import \"a\"; pragma solidity >=0.0;");
|
||||||
c.addSource("c", "import \"b\"; contract D is C {} pragma solidity >=0.0;");
|
c.addSource("c", "import \"b\"; contract D is C {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +82,7 @@ BOOST_AUTO_TEST_CASE(circular_import)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "import \"b\"; contract C { D d; } pragma solidity >=0.0;");
|
c.addSource("a", "import \"b\"; contract C { D d; } pragma solidity >=0.0;");
|
||||||
c.addSource("b", "import \"a\"; contract D { C c; } pragma solidity >=0.0;");
|
c.addSource("b", "import \"a\"; contract D { C c; } pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,6 +92,7 @@ BOOST_AUTO_TEST_CASE(relative_import)
|
|||||||
c.addSource("a", "import \"./dir/b\"; contract A is B {} pragma solidity >=0.0;");
|
c.addSource("a", "import \"./dir/b\"; contract A is B {} pragma solidity >=0.0;");
|
||||||
c.addSource("dir/b", "contract B {} pragma solidity >=0.0;");
|
c.addSource("dir/b", "contract B {} pragma solidity >=0.0;");
|
||||||
c.addSource("dir/c", "import \"../a\"; contract C is A {} pragma solidity >=0.0;");
|
c.addSource("dir/c", "import \"../a\"; contract C is A {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +101,7 @@ BOOST_AUTO_TEST_CASE(relative_import_multiplex)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
||||||
c.addSource("dir/a/b/c", "import \"../../.././a\"; contract B is A {} pragma solidity >=0.0;");
|
c.addSource("dir/a/b/c", "import \"../../.././a\"; contract B is A {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,6 +110,7 @@ BOOST_AUTO_TEST_CASE(simple_alias)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
||||||
c.addSource("dir/a/b/c", "import \"../../.././a\" as x; contract B is x.A { function() { x.A r = x.A(20); } } pragma solidity >=0.0;");
|
c.addSource("dir/a/b/c", "import \"../../.././a\" as x; contract B is x.A { function() { x.A r = x.A(20); } } pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,6 +120,7 @@ BOOST_AUTO_TEST_CASE(library_name_clash)
|
|||||||
c.addSource("a", "library A {} pragma solidity >=0.0;");
|
c.addSource("a", "library A {} pragma solidity >=0.0;");
|
||||||
c.addSource("b", "library A {} pragma solidity >=0.0;");
|
c.addSource("b", "library A {} pragma solidity >=0.0;");
|
||||||
c.addSource("c", "import {A} from \"./a\"; import {A} from \"./b\";");
|
c.addSource("c", "import {A} from \"./a\"; import {A} from \"./b\";");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +129,7 @@ BOOST_AUTO_TEST_CASE(library_name_clash_with_contract)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
||||||
c.addSource("b", "library A {} pragma solidity >=0.0;");
|
c.addSource("b", "library A {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,6 +139,7 @@ BOOST_AUTO_TEST_CASE(complex_import)
|
|||||||
c.addSource("a", "contract A {} contract B {} contract C { struct S { uint a; } } pragma solidity >=0.0;");
|
c.addSource("a", "contract A {} contract B {} contract C { struct S { uint a; } } pragma solidity >=0.0;");
|
||||||
c.addSource("b", "import \"a\" as x; import {B as b, C as c, C} from \"a\"; "
|
c.addSource("b", "import \"a\" as x; import {B as b, C as c, C} from \"a\"; "
|
||||||
"contract D is b { function f(c.S var1, x.C.S var2, C.S var3) internal {} } pragma solidity >=0.0;");
|
"contract D is b { function f(c.S var1, x.C.S var2, C.S var3) internal {} } pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,14 +148,19 @@ BOOST_AUTO_TEST_CASE(name_clash_in_import)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
c.addSource("a", "contract A {} pragma solidity >=0.0;");
|
||||||
c.addSource("b", "import \"a\"; contract A {} pragma solidity >=0.0;");
|
c.addSource("b", "import \"a\"; contract A {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
c.addSource("b", "import \"a\" as A; contract A {} pragma solidity >=0.0;");
|
c.addSource("b", "import \"a\" as A; contract A {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
c.addSource("b", "import {A as b} from \"a\"; contract b {} pragma solidity >=0.0;");
|
c.addSource("b", "import {A as b} from \"a\"; contract b {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
c.addSource("b", "import {A} from \"a\"; contract A {} pragma solidity >=0.0;");
|
c.addSource("b", "import {A} from \"a\"; contract A {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
c.addSource("b", "import {A} from \"a\"; contract B {} pragma solidity >=0.0;");
|
c.addSource("b", "import {A} from \"a\"; contract B {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +172,7 @@ BOOST_AUTO_TEST_CASE(remappings)
|
|||||||
c.addSource("b", "import \"t/tee.sol\"; contract A is Tee {} pragma solidity >=0.0;");
|
c.addSource("b", "import \"t/tee.sol\"; contract A is Tee {} pragma solidity >=0.0;");
|
||||||
c.addSource("s_1.4.6/s.sol", "contract S {} pragma solidity >=0.0;");
|
c.addSource("s_1.4.6/s.sol", "contract S {} pragma solidity >=0.0;");
|
||||||
c.addSource("Tee/tee.sol", "contract Tee {} pragma solidity >=0.0;");
|
c.addSource("Tee/tee.sol", "contract Tee {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,6 +184,7 @@ BOOST_AUTO_TEST_CASE(context_dependent_remappings)
|
|||||||
c.addSource("b/b.sol", "import \"s/s.sol\"; contract B is SSeven {} pragma solidity >=0.0;");
|
c.addSource("b/b.sol", "import \"s/s.sol\"; contract B is SSeven {} pragma solidity >=0.0;");
|
||||||
c.addSource("s_1.4.6/s.sol", "contract SSix {} pragma solidity >=0.0;");
|
c.addSource("s_1.4.6/s.sol", "contract SSix {} pragma solidity >=0.0;");
|
||||||
c.addSource("s_1.4.7/s.sol", "contract SSeven {} pragma solidity >=0.0;");
|
c.addSource("s_1.4.7/s.sol", "contract SSeven {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,6 +193,7 @@ BOOST_AUTO_TEST_CASE(filename_with_period)
|
|||||||
CompilerStack c;
|
CompilerStack c;
|
||||||
c.addSource("a/a.sol", "import \".b.sol\"; contract A is B {} pragma solidity >=0.0;");
|
c.addSource("a/a.sol", "import \".b.sol\"; contract A is B {} pragma solidity >=0.0;");
|
||||||
c.addSource("a/.b.sol", "contract B {} pragma solidity >=0.0;");
|
c.addSource("a/.b.sol", "contract B {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,6 +205,7 @@ BOOST_AUTO_TEST_CASE(context_dependent_remappings_ensure_default_and_module_pres
|
|||||||
c.addSource("vendor/bar/bar.sol", "import \"foo/foo.sol\"; contract Bar {Foo1 foo;} pragma solidity >=0.0;");
|
c.addSource("vendor/bar/bar.sol", "import \"foo/foo.sol\"; contract Bar {Foo1 foo;} pragma solidity >=0.0;");
|
||||||
c.addSource("vendor/foo_1.0.0/foo.sol", "contract Foo1 {} pragma solidity >=0.0;");
|
c.addSource("vendor/foo_1.0.0/foo.sol", "contract Foo1 {} pragma solidity >=0.0;");
|
||||||
c.addSource("vendor/foo_2.0.0/foo.sol", "contract Foo2 {} pragma solidity >=0.0;");
|
c.addSource("vendor/foo_2.0.0/foo.sol", "contract Foo2 {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,6 +217,7 @@ BOOST_AUTO_TEST_CASE(context_dependent_remappings_order_independent)
|
|||||||
c.addSource("a/b/main.sol", "import \"x/y/z/z.sol\"; contract Main is E {} pragma solidity >=0.0;");
|
c.addSource("a/b/main.sol", "import \"x/y/z/z.sol\"; contract Main is E {} pragma solidity >=0.0;");
|
||||||
c.addSource("d/z.sol", "contract D {} pragma solidity >=0.0;");
|
c.addSource("d/z.sol", "contract D {} pragma solidity >=0.0;");
|
||||||
c.addSource("e/y/z/z.sol", "contract E {} pragma solidity >=0.0;");
|
c.addSource("e/y/z/z.sol", "contract E {} pragma solidity >=0.0;");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
CompilerStack d;
|
CompilerStack d;
|
||||||
d.setRemappings(vector<string>{"a/b:x=e", "a:x/y/z=d"});
|
d.setRemappings(vector<string>{"a/b:x=e", "a:x/y/z=d"});
|
||||||
@ -203,6 +225,7 @@ BOOST_AUTO_TEST_CASE(context_dependent_remappings_order_independent)
|
|||||||
d.addSource("a/b/main.sol", "import \"x/y/z/z.sol\"; contract Main is E {} pragma solidity >=0.0;");
|
d.addSource("a/b/main.sol", "import \"x/y/z/z.sol\"; contract Main is E {} pragma solidity >=0.0;");
|
||||||
d.addSource("d/z.sol", "contract D {} pragma solidity >=0.0;");
|
d.addSource("d/z.sol", "contract D {} pragma solidity >=0.0;");
|
||||||
d.addSource("e/y/z/z.sol", "contract E {} pragma solidity >=0.0;");
|
d.addSource("e/y/z/z.sol", "contract E {} pragma solidity >=0.0;");
|
||||||
|
d.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(d.compile());
|
BOOST_CHECK(d.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,6 +235,7 @@ BOOST_AUTO_TEST_CASE(shadowing_via_import)
|
|||||||
c.addSource("a", "library A {} pragma solidity >=0.0;");
|
c.addSource("a", "library A {} pragma solidity >=0.0;");
|
||||||
c.addSource("b", "library A {} pragma solidity >=0.0;");
|
c.addSource("b", "library A {} pragma solidity >=0.0;");
|
||||||
c.addSource("c", "import {A} from \"./a\"; import {A} from \"./b\";");
|
c.addSource("c", "import {A} from \"./a\"; import {A} from \"./b\";");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!c.compile());
|
BOOST_CHECK(!c.compile());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,6 +249,7 @@ BOOST_AUTO_TEST_CASE(shadowing_builtins_with_imports)
|
|||||||
contract C {
|
contract C {
|
||||||
}
|
}
|
||||||
)");
|
)");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
size_t errorCount = 0;
|
size_t errorCount = 0;
|
||||||
for (auto const& e: c.errors())
|
for (auto const& e: c.errors())
|
||||||
@ -251,6 +276,7 @@ BOOST_AUTO_TEST_CASE(shadowing_builtins_with_multiple_imports)
|
|||||||
contract C {
|
contract C {
|
||||||
}
|
}
|
||||||
)");
|
)");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
auto numErrors = c.errors().size();
|
auto numErrors = c.errors().size();
|
||||||
// Sometimes we get the prerelease warning, sometimes not.
|
// Sometimes we get the prerelease warning, sometimes not.
|
||||||
@ -274,6 +300,7 @@ BOOST_AUTO_TEST_CASE(shadowing_builtins_with_alias)
|
|||||||
pragma solidity >=0.0;
|
pragma solidity >=0.0;
|
||||||
import {C as msg} from "B.sol";
|
import {C as msg} from "B.sol";
|
||||||
)");
|
)");
|
||||||
|
c.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(c.compile());
|
BOOST_CHECK(c.compile());
|
||||||
auto numErrors = c.errors().size();
|
auto numErrors = c.errors().size();
|
||||||
// Sometimes we get the prerelease warning, sometimes not.
|
// Sometimes we get the prerelease warning, sometimes not.
|
||||||
|
@ -46,6 +46,7 @@ BOOST_AUTO_TEST_CASE(metadata_stamp)
|
|||||||
)";
|
)";
|
||||||
CompilerStack compilerStack;
|
CompilerStack compilerStack;
|
||||||
compilerStack.addSource("", std::string(sourceCode));
|
compilerStack.addSource("", std::string(sourceCode));
|
||||||
|
compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||||
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
|
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
|
||||||
@ -72,6 +73,7 @@ BOOST_AUTO_TEST_CASE(metadata_stamp_experimental)
|
|||||||
)";
|
)";
|
||||||
CompilerStack compilerStack;
|
CompilerStack compilerStack;
|
||||||
compilerStack.addSource("", std::string(sourceCode));
|
compilerStack.addSource("", std::string(sourceCode));
|
||||||
|
compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||||
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
|
bytes const& bytecode = compilerStack.runtimeObject("test").bytecode;
|
||||||
@ -106,6 +108,7 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources)
|
|||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
compilerStack.addSource("B", std::string(sourceCode));
|
compilerStack.addSource("B", std::string(sourceCode));
|
||||||
|
compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||||
|
|
||||||
@ -144,6 +147,7 @@ BOOST_AUTO_TEST_CASE(metadata_relevant_sources_imports)
|
|||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
compilerStack.addSource("C", std::string(sourceCode));
|
compilerStack.addSource("C", std::string(sourceCode));
|
||||||
|
compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||||
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
BOOST_REQUIRE_MESSAGE(compilerStack.compile(), "Compiling contract failed");
|
||||||
|
|
||||||
|
@ -44,6 +44,8 @@ public:
|
|||||||
{
|
{
|
||||||
m_compilerStack.reset(false);
|
m_compilerStack.reset(false);
|
||||||
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
||||||
|
m_compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
|
m_compilerStack.setOptimiserSettings(dev::test::Options::get().optimize);
|
||||||
BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
||||||
|
|
||||||
Json::Value generatedInterface = m_compilerStack.contractABI(m_compilerStack.lastContractName());
|
Json::Value generatedInterface = m_compilerStack.contractABI(m_compilerStack.lastContractName());
|
||||||
|
@ -132,7 +132,7 @@ bytes compileFirstExpression(
|
|||||||
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
if (ContractDefinition* contract = dynamic_cast<ContractDefinition*>(node.get()))
|
||||||
{
|
{
|
||||||
ErrorReporter errorReporter(errors);
|
ErrorReporter errorReporter(errors);
|
||||||
TypeChecker typeChecker(EVMVersion{}, errorReporter);
|
TypeChecker typeChecker(dev::test::Options::get().evmVersion(), errorReporter);
|
||||||
BOOST_REQUIRE(typeChecker.checkTypeRequirements(*contract));
|
BOOST_REQUIRE(typeChecker.checkTypeRequirements(*contract));
|
||||||
}
|
}
|
||||||
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
for (ASTPointer<ASTNode> const& node: sourceUnit->nodes())
|
||||||
@ -141,7 +141,7 @@ bytes compileFirstExpression(
|
|||||||
FirstExpressionExtractor extractor(*contract);
|
FirstExpressionExtractor extractor(*contract);
|
||||||
BOOST_REQUIRE(extractor.expression() != nullptr);
|
BOOST_REQUIRE(extractor.expression() != nullptr);
|
||||||
|
|
||||||
CompilerContext context;
|
CompilerContext context(dev::test::Options::get().evmVersion());
|
||||||
context.resetVisitedNodes(contract);
|
context.resetVisitedNodes(contract);
|
||||||
context.setInheritanceHierarchy(inheritanceHierarchy);
|
context.setInheritanceHierarchy(inheritanceHierarchy);
|
||||||
unsigned parametersSize = _localVariables.size(); // assume they are all one slot on the stack
|
unsigned parametersSize = _localVariables.size(); // assume they are all one slot on the stack
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include <test/libsolidity/AnalysisFramework.h>
|
#include <test/libsolidity/AnalysisFramework.h>
|
||||||
|
|
||||||
|
#include <test/TestHelper.h>
|
||||||
|
|
||||||
#include <libsolidity/ast/AST.h>
|
#include <libsolidity/ast/AST.h>
|
||||||
|
|
||||||
#include <libdevcore/SHA3.h>
|
#include <libdevcore/SHA3.h>
|
||||||
|
@ -47,6 +47,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_compilerStack.reset(false);
|
m_compilerStack.reset(false);
|
||||||
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
||||||
|
m_compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
BOOST_REQUIRE_MESSAGE(m_compilerStack.parseAndAnalyze(), "Parsing contract failed");
|
||||||
|
|
||||||
Json::Value generatedDocumentation;
|
Json::Value generatedDocumentation;
|
||||||
@ -67,6 +68,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_compilerStack.reset(false);
|
m_compilerStack.reset(false);
|
||||||
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
m_compilerStack.addSource("", "pragma solidity >=0.0;\n" + _code);
|
||||||
|
m_compilerStack.setEVMVersion(dev::test::Options::get().evmVersion());
|
||||||
BOOST_CHECK(!m_compilerStack.parseAndAnalyze());
|
BOOST_CHECK(!m_compilerStack.parseAndAnalyze());
|
||||||
BOOST_REQUIRE(Error::containsErrorOfType(m_compilerStack.errors(), Error::Type::DocstringParsingError));
|
BOOST_REQUIRE(Error::containsErrorOfType(m_compilerStack.errors(), Error::Type::DocstringParsingError));
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
|
|
||||||
#include <test/libsolidity/AnalysisFramework.h>
|
#include <test/libsolidity/AnalysisFramework.h>
|
||||||
|
|
||||||
|
#include <test/TestHelper.h>
|
||||||
|
|
||||||
#include <boost/test/unit_test.hpp>
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
Loading…
Reference in New Issue
Block a user