@@ -2967,6 +2967,29 @@ BOOST_AUTO_TEST_CASE(event)
2967
2967
}
2968
2968
}
2969
2969
2970
+ BOOST_AUTO_TEST_CASE (event_emit)
2971
+ {
2972
+ char const * sourceCode = R"(
2973
+ contract ClientReceipt {
2974
+ event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
2975
+ function deposit(bytes32 _id) payable {
2976
+ emit Deposit(msg.sender, _id, msg.value);
2977
+ }
2978
+ }
2979
+ )" ;
2980
+ compileAndRun (sourceCode);
2981
+ u256 value (18 );
2982
+ u256 id (0x1234 );
2983
+ callContractFunctionWithValue (" deposit(bytes32)" , value, id);
2984
+ BOOST_REQUIRE_EQUAL (m_logs.size (), 1 );
2985
+ BOOST_CHECK_EQUAL (m_logs[0 ].address , m_contractAddress);
2986
+ BOOST_CHECK_EQUAL (h256 (m_logs[0 ].data ), h256 (u256 (value)));
2987
+ BOOST_REQUIRE_EQUAL (m_logs[0 ].topics .size (), 3 );
2988
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" Deposit(address,bytes32,uint256)" )));
2989
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [1 ], h256 (m_sender, h256::AlignRight));
2990
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [2 ], h256 (id));
2991
+ }
2992
+
2970
2993
BOOST_AUTO_TEST_CASE (event_no_arguments)
2971
2994
{
2972
2995
char const * sourceCode = R"(
@@ -3009,6 +3032,28 @@ BOOST_AUTO_TEST_CASE(event_access_through_base_name)
3009
3032
BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" x()" )));
3010
3033
}
3011
3034
3035
+ BOOST_AUTO_TEST_CASE (event_access_through_base_name_emit)
3036
+ {
3037
+ char const * sourceCode = R"(
3038
+ contract A {
3039
+ event x();
3040
+ }
3041
+ contract B is A {
3042
+ function f() returns (uint) {
3043
+ emit A.x();
3044
+ return 1;
3045
+ }
3046
+ }
3047
+ )" ;
3048
+ compileAndRun (sourceCode);
3049
+ callContractFunction (" f()" );
3050
+ BOOST_REQUIRE_EQUAL (m_logs.size (), 1 );
3051
+ BOOST_CHECK_EQUAL (m_logs[0 ].address , m_contractAddress);
3052
+ BOOST_CHECK (m_logs[0 ].data .empty ());
3053
+ BOOST_REQUIRE_EQUAL (m_logs[0 ].topics .size (), 1 );
3054
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" x()" )));
3055
+ }
3056
+
3012
3057
BOOST_AUTO_TEST_CASE (events_with_same_name)
3013
3058
{
3014
3059
char const * sourceCode = R"(
@@ -3107,6 +3152,58 @@ BOOST_AUTO_TEST_CASE(events_with_same_name_inherited)
3107
3152
BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" Deposit(address,uint256)" )));
3108
3153
}
3109
3154
3155
+ BOOST_AUTO_TEST_CASE (events_with_same_name_inherited_emit)
3156
+ {
3157
+ char const * sourceCode = R"(
3158
+ contract A {
3159
+ event Deposit();
3160
+ }
3161
+
3162
+ contract B {
3163
+ event Deposit(address _addr);
3164
+ }
3165
+
3166
+ contract ClientReceipt is A, B {
3167
+ event Deposit(address _addr, uint _amount);
3168
+ function deposit() returns (uint) {
3169
+ emit Deposit();
3170
+ return 1;
3171
+ }
3172
+ function deposit(address _addr) returns (uint) {
3173
+ emit Deposit(_addr);
3174
+ return 1;
3175
+ }
3176
+ function deposit(address _addr, uint _amount) returns (uint) {
3177
+ emit Deposit(_addr, _amount);
3178
+ return 1;
3179
+ }
3180
+ }
3181
+ )" ;
3182
+ u160 const c_loggedAddress = m_contractAddress;
3183
+
3184
+ compileAndRun (sourceCode);
3185
+ ABI_CHECK (callContractFunction (" deposit()" ), encodeArgs (u256 (1 )));
3186
+ BOOST_REQUIRE_EQUAL (m_logs.size (), 1 );
3187
+ BOOST_CHECK_EQUAL (m_logs[0 ].address , m_contractAddress);
3188
+ BOOST_CHECK (m_logs[0 ].data .empty ());
3189
+ BOOST_REQUIRE_EQUAL (m_logs[0 ].topics .size (), 1 );
3190
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" Deposit()" )));
3191
+
3192
+ ABI_CHECK (callContractFunction (" deposit(address)" , c_loggedAddress), encodeArgs (u256 (1 )));
3193
+ BOOST_REQUIRE_EQUAL (m_logs.size (), 1 );
3194
+ BOOST_CHECK_EQUAL (m_logs[0 ].address , m_contractAddress);
3195
+ BOOST_CHECK (m_logs[0 ].data == encodeArgs (c_loggedAddress));
3196
+ BOOST_REQUIRE_EQUAL (m_logs[0 ].topics .size (), 1 );
3197
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" Deposit(address)" )));
3198
+
3199
+ ABI_CHECK (callContractFunction (" deposit(address,uint256)" , c_loggedAddress, u256 (100 )), encodeArgs (u256 (1 )));
3200
+ BOOST_REQUIRE_EQUAL (m_logs.size (), 1 );
3201
+ BOOST_CHECK_EQUAL (m_logs[0 ].address , m_contractAddress);
3202
+ BOOST_CHECK (m_logs[0 ].data == encodeArgs (c_loggedAddress, 100 ));
3203
+ BOOST_REQUIRE_EQUAL (m_logs[0 ].topics .size (), 1 );
3204
+ BOOST_CHECK_EQUAL (m_logs[0 ].topics [0 ], dev::keccak256 (string (" Deposit(address,uint256)" )));
3205
+ }
3206
+
3110
3207
BOOST_AUTO_TEST_CASE (event_anonymous)
3111
3208
{
3112
3209
char const * sourceCode = R"(
0 commit comments