mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Move comments into test sources in SolidityNameAndTypeResolution
This commit is contained in:
parent
230bca37c3
commit
8f3c119531
@ -472,9 +472,9 @@ BOOST_AUTO_TEST_CASE(function_external_types)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(enum_external_type)
|
||||
{
|
||||
// bug #1801
|
||||
SourceUnit const* sourceUnit = nullptr;
|
||||
char const* text = R"(
|
||||
// test for bug #1801
|
||||
contract Test {
|
||||
enum ActionChoices { GoLeft, GoRight, GoStraight, Sit }
|
||||
function boo(ActionChoices enumArg) external returns (uint ret) {
|
||||
@ -977,8 +977,8 @@ BOOST_AUTO_TEST_CASE(private_state_variable)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(base_class_state_variable_accessor)
|
||||
{
|
||||
// test for issue #1126 https://github.com/ethereum/cpp-ethereum/issues/1126
|
||||
char const* text = R"(
|
||||
// test for issue #1126 https://github.com/ethereum/cpp-ethereum/issues/1126
|
||||
contract Parent {
|
||||
uint256 public m_aMember;
|
||||
}
|
||||
@ -2275,13 +2275,12 @@ BOOST_AUTO_TEST_CASE(constant_string_literal_disallows_assignment)
|
||||
contract Test {
|
||||
string constant x = "abefghijklmnopqabcdefghijklmnopqabcdefghijklmnopqabca";
|
||||
function f() public {
|
||||
// Even if this is made possible in the future, we should not allow assignment
|
||||
// to elements of constant arrays.
|
||||
x[0] = "f";
|
||||
}
|
||||
}
|
||||
)";
|
||||
|
||||
// Even if this is made possible in the future, we should not allow assignment
|
||||
// to elements of constant arrays.
|
||||
CHECK_ERROR(text, TypeError, "Index access for string is not possible.");
|
||||
}
|
||||
|
||||
@ -2382,11 +2381,11 @@ BOOST_AUTO_TEST_CASE(overloaded_function_cannot_resolve)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ambiguous_overloaded_function)
|
||||
{
|
||||
// literal 1 can be both converted to uint and uint8, so the call is ambiguous.
|
||||
char const* sourceCode = R"(
|
||||
contract test {
|
||||
function f(uint8 a) public returns (uint) { return a; }
|
||||
function f(uint a) public returns (uint) { return 2*a; }
|
||||
function f(uint a) public returns (uint) { return 2 * a; }
|
||||
// literal 1 can be both converted to uint and uint8, so the call is ambiguous.
|
||||
function g() public returns (uint) { return f(1); }
|
||||
}
|
||||
)";
|
||||
@ -2809,12 +2808,12 @@ BOOST_AUTO_TEST_CASE(function_argument_storage_to_mem)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(mem_array_assignment_changes_base_type)
|
||||
{
|
||||
// Such an assignment is possible in storage, but not in memory
|
||||
// (because it would incur an otherwise unnecessary copy).
|
||||
// This requirement might be lifted, though.
|
||||
char const* sourceCode = R"(
|
||||
contract C {
|
||||
function f(uint8[] memory x) private {
|
||||
// Such an assignment is possible in storage, but not in memory
|
||||
// (because it would incur an otherwise unnecessary copy).
|
||||
// This requirement might be lifted, though.
|
||||
uint[] memory y = x;
|
||||
}
|
||||
}
|
||||
@ -3358,13 +3357,13 @@ BOOST_AUTO_TEST_CASE(using_for_mismatch)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(using_for_not_used)
|
||||
{
|
||||
// This is an error because the function is only bound to uint.
|
||||
// Had it been bound to *, it would have worked.
|
||||
char const* text = R"(
|
||||
library D { function double(uint self) public returns (uint) { return 2; } }
|
||||
contract C {
|
||||
using D for uint;
|
||||
function f(uint16 a) public returns (uint) {
|
||||
// This is an error because the function is only bound to uint.
|
||||
// Had it been bound to *, it would have worked.
|
||||
return a.double();
|
||||
}
|
||||
}
|
||||
@ -3386,12 +3385,12 @@ BOOST_AUTO_TEST_CASE(library_memory_struct)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(using_for_arbitrary_mismatch)
|
||||
{
|
||||
// Bound to a, but self type does not match.
|
||||
char const* text = R"(
|
||||
library D { function double(bytes32 self) public returns (uint) { return 2; } }
|
||||
contract C {
|
||||
using D for *;
|
||||
function f(uint a) public returns (uint) {
|
||||
// Bound to a, but self type does not match.
|
||||
return a.double();
|
||||
}
|
||||
}
|
||||
@ -4769,20 +4768,19 @@ BOOST_AUTO_TEST_CASE(illegal_override_payable_nonpayable)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(function_variable_mixin)
|
||||
{
|
||||
// bug #1798 (cpp-ethereum), related to #1286 (solidity)
|
||||
char const* text = R"(
|
||||
contract attribute {
|
||||
bool ok = false;
|
||||
}
|
||||
contract func {
|
||||
function ok() public returns (bool) { return true; }
|
||||
}
|
||||
|
||||
contract attr_func is attribute, func {
|
||||
function checkOk() public returns (bool) { return ok(); }
|
||||
}
|
||||
)";
|
||||
CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
|
||||
char const* text = R"(
|
||||
// bug #1798 (cpp-ethereum), related to #1286 (solidity)
|
||||
contract attribute {
|
||||
bool ok = false;
|
||||
}
|
||||
contract func {
|
||||
function ok() public returns (bool) { return true; }
|
||||
}
|
||||
contract attr_func is attribute, func {
|
||||
function checkOk() public returns (bool) { return ok(); }
|
||||
}
|
||||
)";
|
||||
CHECK_ERROR(text, DeclarationError, "Identifier already declared.");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(calling_payable)
|
||||
@ -5492,14 +5490,15 @@ BOOST_AUTO_TEST_CASE(invalid_address_length_long)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(address_test_for_bug_in_implementation)
|
||||
{
|
||||
// A previous implementation claimed the string would be an address
|
||||
char const* text = R"(
|
||||
// A previous implementation claimed the string would be an address
|
||||
contract AddrString {
|
||||
address public test = "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c";
|
||||
}
|
||||
)";
|
||||
CHECK_ERROR(text, TypeError, "is not implicitly convertible to expected type address");
|
||||
text = R"(
|
||||
// A previous implementation claimed the string would be an address
|
||||
contract AddrString {
|
||||
function f() public returns (address) {
|
||||
return "0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c";
|
||||
@ -5511,8 +5510,8 @@ BOOST_AUTO_TEST_CASE(address_test_for_bug_in_implementation)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(early_exit_on_fatal_errors)
|
||||
{
|
||||
// This tests a crash that occured because we did not stop for fatal errors.
|
||||
char const* text = R"(
|
||||
// This tests a crash that occured because we did not stop for fatal errors.
|
||||
contract C {
|
||||
struct S {
|
||||
ftring a;
|
||||
@ -6059,9 +6058,10 @@ BOOST_AUTO_TEST_CASE(callable_crash)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(error_transfer_non_payable_fallback)
|
||||
{
|
||||
// This used to be a test for a.transfer to generate a warning
|
||||
// because A's fallback function is not payable.
|
||||
char const* text = R"(
|
||||
// This used to be a test for a.transfer to generate a warning
|
||||
// because A's fallback function is not payable.
|
||||
|
||||
contract A {
|
||||
function() public {}
|
||||
}
|
||||
@ -6082,9 +6082,10 @@ BOOST_AUTO_TEST_CASE(error_transfer_non_payable_fallback)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(error_transfer_no_fallback)
|
||||
{
|
||||
// This used to be a test for a.transfer to generate a warning
|
||||
// because A does not have a payable fallback function.
|
||||
std::string text = R"(
|
||||
char const* text = R"(
|
||||
// This used to be a test for a.transfer to generate a warning
|
||||
// because A does not have a payable fallback function.
|
||||
|
||||
contract A {}
|
||||
|
||||
contract B {
|
||||
@ -6103,9 +6104,10 @@ BOOST_AUTO_TEST_CASE(error_transfer_no_fallback)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(error_send_non_payable_fallback)
|
||||
{
|
||||
// This used to be a test for a.send to generate a warning
|
||||
// because A does not have a payable fallback function.
|
||||
std::string text = R"(
|
||||
char const* text = R"(
|
||||
// This used to be a test for a.send to generate a warning
|
||||
// because A does not have a payable fallback function.
|
||||
|
||||
contract A {
|
||||
function() public {}
|
||||
}
|
||||
@ -6126,9 +6128,10 @@ BOOST_AUTO_TEST_CASE(error_send_non_payable_fallback)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(does_not_error_transfer_payable_fallback)
|
||||
{
|
||||
// This used to be a test for a.transfer to generate a warning
|
||||
// because A does not have a payable fallback function.
|
||||
char const* text = R"(
|
||||
// This used to be a test for a.transfer to generate a warning
|
||||
// because A does not have a payable fallback function.
|
||||
|
||||
contract A {
|
||||
function() payable public {}
|
||||
}
|
||||
@ -6428,8 +6431,8 @@ BOOST_AUTO_TEST_CASE(using_this_in_constructor)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(do_not_crash_on_not_lvalue)
|
||||
{
|
||||
// This checks for a bug that caused a crash because of continued analysis.
|
||||
char const* text = R"(
|
||||
// This checks for a bug that caused a crash because of continued analysis.
|
||||
contract C {
|
||||
mapping (uint => uint) m;
|
||||
function f() public {
|
||||
@ -6635,8 +6638,8 @@ BOOST_AUTO_TEST_CASE(library_function_without_implementation)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(using_for_with_non_library)
|
||||
{
|
||||
// This tests a crash that was resolved by making the first error fatal.
|
||||
char const* text = R"(
|
||||
// This tests a crash that was resolved by making the first error fatal.
|
||||
library L {
|
||||
struct S { uint d; }
|
||||
using S for S;
|
||||
@ -6858,7 +6861,7 @@ BOOST_AUTO_TEST_CASE(array_length_invalid_expression)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract)
|
||||
{
|
||||
std::string text = R"(
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
function f() view public {
|
||||
this.balance;
|
||||
@ -6919,7 +6922,7 @@ BOOST_AUTO_TEST_CASE(warn_about_address_members_on_contract)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(warn_about_address_members_on_non_this_contract)
|
||||
{
|
||||
std::string text = R"(
|
||||
char const* text = R"(
|
||||
contract C {
|
||||
function f() view public {
|
||||
C c;
|
||||
|
Loading…
Reference in New Issue
Block a user