diff --git a/test/libsolidity/Imports.cpp b/test/libsolidity/Imports.cpp index 95a538aae..a326b4e5d 100644 --- a/test/libsolidity/Imports.cpp +++ b/test/libsolidity/Imports.cpp @@ -41,183 +41,6 @@ namespace test BOOST_AUTO_TEST_SUITE(SolidityImports) -BOOST_AUTO_TEST_CASE(smoke_test) -{ - CompilerStack c; - c.setSources({{"a", "contract C {} pragma solidity >=0.0;"}}); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(regular_import) -{ - CompilerStack c; - c.setSources({ - {"a", "contract C {} pragma solidity >=0.0;"}, - {"b", "import \"a\"; contract D is C {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(import_does_not_clutter_importee) -{ - CompilerStack c; - c.setSources({ - {"a", "contract C { D d; } pragma solidity >=0.0;"}, - {"b", "import \"a\"; contract D is C {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - -BOOST_AUTO_TEST_CASE(import_is_transitive) -{ - CompilerStack c; - c.setSources({ - {"a", "contract C { } pragma solidity >=0.0;"}, - {"b", "import \"a\"; pragma solidity >=0.0;"}, - {"c", "import \"b\"; contract D is C {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(circular_import) -{ - CompilerStack c; - c.setSources({ - {"a", "import \"b\"; contract C { D d; } pragma solidity >=0.0;"}, - {"b", "import \"a\"; contract D { C c; } pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(relative_import) -{ - CompilerStack c; - c.setSources({ - {"a", "import \"./dir/b\"; contract A is B {} pragma solidity >=0.0;"}, - {"dir/b", "contract B {} pragma solidity >=0.0;"}, - {"dir/c", "import \"../a\"; contract C is A {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(relative_import_multiplex) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"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_AUTO_TEST_CASE(simple_alias) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"dir/a/b/c", "import \"../../.././a\" as x; contract B is x.A { function() external { x.A r = x.A(20); } } pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(library_name_clash) -{ - CompilerStack c; - c.setSources({ - {"a", "library A {} pragma solidity >=0.0;"}, - {"b", "library A {} pragma solidity >=0.0;"}, - {"c", "import {A} from \"./a\"; import {A} from \"./b\";"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - -BOOST_AUTO_TEST_CASE(library_name_clash_with_contract) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"b", "library A {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(complex_import) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} contract B {} contract C { struct S { uint a; } } pragma solidity >=0.0;"}, - {"b", "import \"a\" as x; import {B as b, C as c, C} from \"a\"; " - "contract D is b { function f(c.S memory var1, x.C.S memory var2, C.S memory var3) internal {} } pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - -BOOST_AUTO_TEST_CASE(name_clash_in_import_1) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"b", "import \"a\"; contract A {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - -BOOST_AUTO_TEST_CASE(name_clash_in_import_2) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"b", "import \"a\" as A; contract A {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - -BOOST_AUTO_TEST_CASE(name_clash_in_import_3) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"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_AUTO_TEST_CASE(name_clash_in_import_4) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"b", "import {A} from \"a\"; contract A {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - -BOOST_AUTO_TEST_CASE(name_clash_in_import_5) -{ - CompilerStack c; - c.setSources({ - {"a", "contract A {} pragma solidity >=0.0;"}, - {"b", "import {A} from \"a\"; contract B {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); -} - BOOST_AUTO_TEST_CASE(remappings) { CompilerStack c; @@ -246,17 +69,6 @@ BOOST_AUTO_TEST_CASE(context_dependent_remappings) BOOST_CHECK(c.compile()); } -BOOST_AUTO_TEST_CASE(filename_with_period) -{ - CompilerStack c; - c.setSources({ - {"a/a.sol", "import \".b.sol\"; contract A is B {} pragma solidity >=0.0;"}, - {"a/.b.sol", "contract B {} pragma solidity >=0.0;"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - BOOST_AUTO_TEST_CASE(context_dependent_remappings_ensure_default_and_module_preserved) { CompilerStack c; @@ -303,245 +115,6 @@ BOOST_AUTO_TEST_CASE(context_dependent_remappings_order_independent_2) BOOST_CHECK(c.compile()); } -BOOST_AUTO_TEST_CASE(shadowing_via_import) -{ - CompilerStack c; - c.setSources({ - {"a", "library A {} pragma solidity >=0.0;"}, - {"b", "library A {} pragma solidity >=0.0;"}, - {"c", "import {A} from \"./a\"; import {A} from \"./b\";"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); -} - -BOOST_AUTO_TEST_CASE(shadowing_builtins_with_imports) -{ - CompilerStack c; - c.setSources({ - {"B.sol", "contract X {} pragma solidity >=0.0;"}, - {"b", R"( - pragma solidity >=0.0; - import * as msg from "B.sol"; - contract C { - })"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); - size_t errorCount = 0; - for (auto const& e: c.errors()) - { - string const* msg = e->comment(); - BOOST_REQUIRE(msg); - if (msg->find("pre-release") != string::npos) - continue; - BOOST_CHECK( - msg->find("shadows a builtin symbol") != string::npos - ); - errorCount++; - } - BOOST_CHECK_EQUAL(errorCount, 1); -} - -BOOST_AUTO_TEST_CASE(shadowing_builtins_with_multiple_imports) -{ - CompilerStack c; - c.setSources({ - {"B.sol", "contract msg {} contract block{} pragma solidity >=0.0;"}, - {"b", R"( - pragma solidity >=0.0; - import {msg, block} from "B.sol"; - contract C { - })"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); - auto numErrors = c.errors().size(); - // Sometimes we get the prerelease warning, sometimes not. - BOOST_CHECK(4 <= numErrors && numErrors <= 5); - for (auto const& e: c.errors()) - { - string const* msg = e->comment(); - BOOST_REQUIRE(msg); - BOOST_CHECK( - msg->find("pre-release") != string::npos || - msg->find("shadows a builtin symbol") != string::npos - ); - } -} - -BOOST_AUTO_TEST_CASE(shadowing_builtins_with_alias) -{ - CompilerStack c; - c.setSources({ - {"B.sol", "contract C {} pragma solidity >=0.0;"}, - {"b", R"( - pragma solidity >=0.0; - import {C as msg} from "B.sol";)"} - }); - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); - auto numErrors = c.errors().size(); - // Sometimes we get the prerelease warning, sometimes not. - BOOST_CHECK(1 <= numErrors && numErrors <= 2); - for (auto const& e: c.errors()) - { - string const* msg = e->comment(); - BOOST_REQUIRE(msg); - BOOST_CHECK( - msg->find("pre-release") != string::npos || - msg->find("shadows a builtin symbol") != string::npos - ); - } -} - -BOOST_AUTO_TEST_CASE(inheritance_abi_encoder_mismatch_1) -{ - CompilerStack c; - c.setSources({ - {"A.sol", R"( - pragma solidity >=0.0; - pragma experimental ABIEncoderV2; - - contract A - { - struct S { uint a; } - S public s; - function f(S memory _s) returns (S memory,S memory) { } - } - )"}, - {"B.sol", R"( - pragma solidity >=0.0; - pragma experimental ABIEncoderV2; - - import "./A.sol"; - contract B is A { } - )"}, - {"C.sol", R"( - pragma solidity >=0.0; - - import "./B.sol"; - contract C is B { } - )"} - }); - - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); - - int typeErrors = 0; - - // Sometimes we get the prerelease warning, sometimes not. - for (auto const& e: c.errors()) - { - if (e->type() != langutil::Error::Type::TypeError) - continue; - - typeErrors++; - - string const* msg = e->comment(); - BOOST_REQUIRE(msg); - BOOST_CHECK_EQUAL(*msg, std::string("Contract \"C\" does not use the new experimental ABI encoder but wants to inherit from a contract which uses types that require it. Use \"pragma experimental ABIEncoderV2;\" for the inheriting contract as well to enable the feature.")); - } - BOOST_CHECK_EQUAL(typeErrors, 1); -} - -BOOST_AUTO_TEST_CASE(inheritance_abi_encoder_mismatch_2) -{ - CompilerStack c; - c.setSources({ - {"A.sol", R"( - pragma solidity >=0.0; - pragma experimental ABIEncoderV2; - - contract A - { - struct S { uint a; } - S public s; - function f(S memory _s) returns (S memory,S memory) { } - } - )"}, - {"B.sol", R"( - pragma solidity >=0.0; - - import "./A.sol"; - contract B is A { } - )"}, - {"C.sol", R"( - pragma solidity >=0.0; - - import "./B.sol"; - contract C is B { } - )"} - }); - - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(!c.compile()); - - int typeErrors = 0; - - // Sometimes we get the prerelease warning, sometimes not. - for (auto const& e: c.errors()) - { - if (e->type() != langutil::Error::Type::TypeError) - continue; - - typeErrors++; - - string const* msg = e->comment(); - BOOST_REQUIRE(msg); - BOOST_CHECK_EQUAL(*msg, std::string("Contract \"B\" does not use the new experimental ABI encoder but wants to inherit from a contract which uses types that require it. Use \"pragma experimental ABIEncoderV2;\" for the inheriting contract as well to enable the feature.")); - } - BOOST_CHECK_EQUAL(typeErrors, 1); -} - -BOOST_AUTO_TEST_CASE(inheritance_abi_encoder_match) -{ - CompilerStack c; - c.setSources({ - {"A.sol", R"( - pragma solidity >=0.0; - pragma experimental ABIEncoderV2; - - contract A - { - struct S { uint a; } - S public s; - function f(S memory _s) public returns (S memory,S memory) { } - } - )"}, - {"B.sol", R"( - pragma solidity >=0.0; - pragma experimental ABIEncoderV2; - - import "./A.sol"; - contract B is A { } - )"}, - {"C.sol", R"( - pragma solidity >=0.0; - pragma experimental ABIEncoderV2; - - import "./B.sol"; - contract C is B { } - )"} - }); - - c.setEVMVersion(dev::test::Options::get().evmVersion()); - BOOST_CHECK(c.compile()); - - int typeErrors = 0; - - // Sometimes we get the prerelease warning, sometimes not. - for (auto const& e: c.errors()) - { - if (e->type() != langutil::Error::Type::TypeError) - continue; - - typeErrors++; - } - - BOOST_CHECK_EQUAL(typeErrors, 0); -} - BOOST_AUTO_TEST_SUITE_END() } diff --git a/test/libsolidity/syntaxTests/imports/circular_import.sol b/test/libsolidity/syntaxTests/imports/circular_import.sol new file mode 100644 index 000000000..45492d8cb --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/circular_import.sol @@ -0,0 +1,4 @@ +==== Source: a ==== +import "b"; contract C { D d; } +==== Source: b ==== +import "a"; contract D { C c; } diff --git a/test/libsolidity/syntaxTests/imports/complex_import.sol b/test/libsolidity/syntaxTests/imports/complex_import.sol new file mode 100644 index 000000000..96fc4d308 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/complex_import.sol @@ -0,0 +1,5 @@ +==== Source: a ==== +contract A {} contract B {} contract C { struct S { uint a; } } +==== Source: b ==== +import "a" as x; import {B as b, C as c, C} from "a"; +contract D is b { function f(c.S memory var1, x.C.S memory var2, C.S memory var3) internal {} } \ No newline at end of file diff --git a/test/libsolidity/syntaxTests/imports/filename_with_period.sol b/test/libsolidity/syntaxTests/imports/filename_with_period.sol new file mode 100644 index 000000000..73c47087f --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/filename_with_period.sol @@ -0,0 +1,6 @@ +==== Source: a/.b.sol ==== +contract B {} +==== Source: a/a.sol ==== +import ".b.sol"; contract A is B {} +// ---- +// ParserError: (a/a.sol:0-16): Source ".b.sol" not found: File not supplied initially. diff --git a/test/libsolidity/syntaxTests/imports/import_does_not_clutter_importee.sol b/test/libsolidity/syntaxTests/imports/import_does_not_clutter_importee.sol new file mode 100644 index 000000000..99f3f53e3 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/import_does_not_clutter_importee.sol @@ -0,0 +1,6 @@ +==== Source: a ==== +contract C { D d; } +==== Source: b ==== +import "a"; contract D is C {} +// ---- +// DeclarationError: (a:13-14): Identifier not found or not unique. diff --git a/test/libsolidity/syntaxTests/imports/import_is_transitive.sol b/test/libsolidity/syntaxTests/imports/import_is_transitive.sol new file mode 100644 index 000000000..2b1f76002 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/import_is_transitive.sol @@ -0,0 +1,7 @@ +==== Source: a ==== +contract C { } +==== Source: b ==== +import "a"; +==== Source: c ==== +import "b"; +contract D is C {} \ No newline at end of file diff --git a/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_match.sol b/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_match.sol new file mode 100644 index 000000000..cead709b4 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_match.sol @@ -0,0 +1,23 @@ +==== Source: A.sol ==== +pragma experimental ABIEncoderV2; + +contract A +{ + struct S { uint a; } + S public s; + function f(S memory _s) public returns (S memory,S memory) { } +} +==== Source: B.sol ==== +pragma experimental ABIEncoderV2; + +import "./A.sol"; +contract B is A { } +==== Source: C.sol ==== +pragma experimental ABIEncoderV2; + +import "./B.sol"; +contract C is B { } +// ---- +// Warning: (A.sol:0-33): Experimental features are turned on. Do not use experimental features on live deployments. +// Warning: (B.sol:0-33): Experimental features are turned on. Do not use experimental features on live deployments. +// Warning: (C.sol:0-33): Experimental features are turned on. Do not use experimental features on live deployments. diff --git a/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_mismatch_1.sol b/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_mismatch_1.sol new file mode 100644 index 000000000..9000ca0fc --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_mismatch_1.sol @@ -0,0 +1,21 @@ +==== Source: A.sol ==== +pragma experimental ABIEncoderV2; + +contract A +{ + struct S { uint a; } + S public s; + function f(S memory _s) public returns (S memory,S memory) { } +} +==== Source: B.sol ==== +pragma experimental ABIEncoderV2; + +import "./A.sol"; +contract B is A { } +==== Source: C.sol ==== +import "./B.sol"; +contract C is B { } +// ---- +// Warning: (A.sol:0-33): Experimental features are turned on. Do not use experimental features on live deployments. +// Warning: (B.sol:0-33): Experimental features are turned on. Do not use experimental features on live deployments. +// TypeError: (C.sol:18-37): Contract "C" does not use the new experimental ABI encoder but wants to inherit from a contract which uses types that require it. Use "pragma experimental ABIEncoderV2;" for the inheriting contract as well to enable the feature. diff --git a/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_mismatch_2.sol b/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_mismatch_2.sol new file mode 100644 index 000000000..b900d1ba4 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/inheritance_abi_encoder_mismatch_2.sol @@ -0,0 +1,18 @@ +==== Source: A.sol ==== +pragma experimental ABIEncoderV2; + +contract A +{ + struct S { uint a; } + S public s; + function f(S memory _s) public returns (S memory,S memory) { } +} +==== Source: B.sol ==== +import "./A.sol"; +contract B is A { } +==== Source: C.sol ==== +import "./B.sol"; +contract C is B { } +// ---- +// Warning: (A.sol:0-33): Experimental features are turned on. Do not use experimental features on live deployments. +// TypeError: (B.sol:18-37): Contract "B" does not use the new experimental ABI encoder but wants to inherit from a contract which uses types that require it. Use "pragma experimental ABIEncoderV2;" for the inheriting contract as well to enable the feature. diff --git a/test/libsolidity/syntaxTests/imports/library_name_clash.sol b/test/libsolidity/syntaxTests/imports/library_name_clash.sol new file mode 100644 index 000000000..cd0dbd240 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/library_name_clash.sol @@ -0,0 +1,8 @@ +==== Source: a ==== +library A {} +==== Source: b ==== +library A {} +==== Source: c ==== +import {A} from "./a"; import {A} from "./b"; +// ---- +// DeclarationError: (c:23-45): Identifier already declared. diff --git a/test/libsolidity/syntaxTests/imports/library_name_clash_with_contract.sol b/test/libsolidity/syntaxTests/imports/library_name_clash_with_contract.sol new file mode 100644 index 000000000..8358b6485 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/library_name_clash_with_contract.sol @@ -0,0 +1,4 @@ +==== Source: a ==== +contract A {} +==== Source: b ==== +library A {} diff --git a/test/libsolidity/syntaxTests/imports/name_clash_in_import_1.sol b/test/libsolidity/syntaxTests/imports/name_clash_in_import_1.sol new file mode 100644 index 000000000..a5b1acc60 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/name_clash_in_import_1.sol @@ -0,0 +1,6 @@ +==== Source: a ==== +contract A {} +==== Source: b ==== +import "a"; contract A {} +// ---- +// DeclarationError: (b:12-25): Identifier already declared. diff --git a/test/libsolidity/syntaxTests/imports/name_clash_in_import_2.sol b/test/libsolidity/syntaxTests/imports/name_clash_in_import_2.sol new file mode 100644 index 000000000..96925f368 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/name_clash_in_import_2.sol @@ -0,0 +1,6 @@ +==== Source: a ==== +contract A {} +==== Source: b ==== +import "a" as A; contract A {} +// ---- +// DeclarationError: (b:17-30): Identifier already declared. diff --git a/test/libsolidity/syntaxTests/imports/name_clash_in_import_3.sol b/test/libsolidity/syntaxTests/imports/name_clash_in_import_3.sol new file mode 100644 index 000000000..2ff01b5f8 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/name_clash_in_import_3.sol @@ -0,0 +1,6 @@ +==== Source: a ==== +contract A {} +==== Source: b ==== +import {A as b} from "a"; contract b {} +// ---- +// DeclarationError: (b:26-39): Identifier already declared. diff --git a/test/libsolidity/syntaxTests/imports/name_clash_in_import_4.sol b/test/libsolidity/syntaxTests/imports/name_clash_in_import_4.sol new file mode 100644 index 000000000..abe59271e --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/name_clash_in_import_4.sol @@ -0,0 +1,6 @@ +==== Source: a ==== +contract A {} +==== Source: b ==== +import {A} from "a"; contract A {} +// ---- +// DeclarationError: (b:21-34): Identifier already declared. diff --git a/test/libsolidity/syntaxTests/imports/name_clash_in_import_5.sol b/test/libsolidity/syntaxTests/imports/name_clash_in_import_5.sol new file mode 100644 index 000000000..596d47b76 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/name_clash_in_import_5.sol @@ -0,0 +1,4 @@ +==== Source: a ==== +contract A {} +==== Source: b ==== +import {A} from "a"; contract B {} diff --git a/test/libsolidity/syntaxTests/imports/regular_import.sol b/test/libsolidity/syntaxTests/imports/regular_import.sol new file mode 100644 index 000000000..5811798e9 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/regular_import.sol @@ -0,0 +1,4 @@ +==== Source: a ==== +contract C {} +==== Source: b ==== +import "a"; contract D is C {} \ No newline at end of file diff --git a/test/libsolidity/syntaxTests/imports/relative_import.sol b/test/libsolidity/syntaxTests/imports/relative_import.sol new file mode 100644 index 000000000..db75c0569 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/relative_import.sol @@ -0,0 +1,6 @@ +==== Source: a ==== +import "./dir/b"; contract A is B {} +==== Source: dir/b ==== +contract B {} +==== Source: dir/c ==== +import "../a"; contract C is A {} \ No newline at end of file diff --git a/test/libsolidity/syntaxTests/imports/relative_import_multiplex.sol b/test/libsolidity/syntaxTests/imports/relative_import_multiplex.sol new file mode 100644 index 000000000..c166def7a --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/relative_import_multiplex.sol @@ -0,0 +1,4 @@ +==== Source: a ==== +contract A {} +==== Source: dir/a/b/c ==== +import "../../.././a"; contract B is A {} diff --git a/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_alias.sol b/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_alias.sol new file mode 100644 index 000000000..8ed652a71 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_alias.sol @@ -0,0 +1,6 @@ +==== Source: B.sol ==== +contract C {} +==== Source: b ==== +import {C as msg} from "B.sol"; +// ---- +// Warning: (B.sol:0-13): This declaration shadows a builtin symbol. diff --git a/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_imports.sol b/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_imports.sol new file mode 100644 index 000000000..2121b1359 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_imports.sol @@ -0,0 +1,8 @@ +==== Source: B.sol ==== +contract X {} +==== Source: b ==== +import * as msg from "B.sol"; +contract C { +} +// ---- +// Warning: (b:0-29): This declaration shadows a builtin symbol. diff --git a/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_multiple_imports.sol b/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_multiple_imports.sol new file mode 100644 index 000000000..848e15546 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/shadowing_builtins_with_multiple_imports.sol @@ -0,0 +1,11 @@ +==== Source: B.sol ==== +contract msg {} contract block{} +==== Source: b ==== +import {msg, block} from "B.sol"; +contract C { +} +// ---- +// Warning: (B.sol:0-15): This declaration shadows a builtin symbol. +// Warning: (B.sol:16-32): This declaration shadows a builtin symbol. +// Warning: (B.sol:0-15): This declaration shadows a builtin symbol. +// Warning: (B.sol:16-32): This declaration shadows a builtin symbol. diff --git a/test/libsolidity/syntaxTests/imports/shadowing_via_import.sol b/test/libsolidity/syntaxTests/imports/shadowing_via_import.sol new file mode 100644 index 000000000..cd0dbd240 --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/shadowing_via_import.sol @@ -0,0 +1,8 @@ +==== Source: a ==== +library A {} +==== Source: b ==== +library A {} +==== Source: c ==== +import {A} from "./a"; import {A} from "./b"; +// ---- +// DeclarationError: (c:23-45): Identifier already declared. diff --git a/test/libsolidity/syntaxTests/imports/simple_alias.sol b/test/libsolidity/syntaxTests/imports/simple_alias.sol new file mode 100644 index 000000000..776c5c42f --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/simple_alias.sol @@ -0,0 +1,4 @@ +==== Source: a ==== +contract A {} +==== Source: dir/a/b/c ==== +import "../../.././a" as x; contract B is x.A { function() external { x.A r = x.A(20); r; } } diff --git a/test/libsolidity/syntaxTests/imports/smoke_test.sol b/test/libsolidity/syntaxTests/imports/smoke_test.sol new file mode 100644 index 000000000..78268d5ab --- /dev/null +++ b/test/libsolidity/syntaxTests/imports/smoke_test.sol @@ -0,0 +1,2 @@ +==== Source: a ==== +contract C {}