Chromium Code Reviews| Index: test/cctest/test-api.cc |
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
| index c39c2f8f9e319b4016620c6350389c5b5430a855..cfe1cc4b47f72f08d7607182be2168ac56526422 100644 |
| --- a/test/cctest/test-api.cc |
| +++ b/test/cctest/test-api.cc |
| @@ -18140,28 +18140,33 @@ v8::PromiseRejectEvent reject_event = v8::kPromiseRejectWithNoHandler; |
| int promise_reject_counter = 0; |
| int promise_revoke_counter = 0; |
| int promise_reject_line_number = -1; |
| +int promise_reject_column_number = -1; |
| int promise_reject_frame_count = -1; |
| -void PromiseRejectCallback(v8::PromiseRejectMessage message) { |
| - if (message.GetEvent() == v8::kPromiseRejectWithNoHandler) { |
| +void PromiseRejectCallback(v8::PromiseRejectMessage reject_message) { |
| + if (reject_message.GetEvent() == v8::kPromiseRejectWithNoHandler) { |
| promise_reject_counter++; |
| - CcTest::global()->Set(v8_str("rejected"), message.GetPromise()); |
| - CcTest::global()->Set(v8_str("value"), message.GetValue()); |
| - v8::Handle<v8::StackTrace> stack_trace = |
| - v8::Exception::CreateMessage(message.GetValue())->GetStackTrace(); |
| + CcTest::global()->Set(v8_str("rejected"), reject_message.GetPromise()); |
| + CcTest::global()->Set(v8_str("value"), reject_message.GetValue()); |
| + v8::Handle<v8::Message> message = |
| + v8::Exception::CreateMessage(reject_message.GetValue()); |
| + v8::Handle<v8::StackTrace> stack_trace = message->GetStackTrace(); |
| + |
| + promise_reject_line_number = message->GetLineNumber(); |
| + promise_reject_column_number = message->GetStartColumn() + 1; |
| + |
| if (!stack_trace.IsEmpty()) { |
| promise_reject_frame_count = stack_trace->GetFrameCount(); |
| if (promise_reject_frame_count > 0) { |
| CHECK(stack_trace->GetFrame(0)->GetScriptName()->Equals(v8_str("pro"))); |
| - promise_reject_line_number = stack_trace->GetFrame(0)->GetLineNumber(); |
|
yurys
2015/02/02 07:07:56
Now we don't check line number in the stack trace,
kozy
2015/02/02 09:18:57
Fixed and added column number checks.
|
| } else { |
| promise_reject_line_number = -1; |
| } |
| } |
| } else { |
| promise_revoke_counter++; |
| - CcTest::global()->Set(v8_str("revoked"), message.GetPromise()); |
| - CHECK(message.GetValue().IsEmpty()); |
| + CcTest::global()->Set(v8_str("revoked"), reject_message.GetPromise()); |
| + CHECK(reject_message.GetValue().IsEmpty()); |
| } |
| } |
| @@ -18180,6 +18185,7 @@ void ResetPromiseStates() { |
| promise_reject_counter = 0; |
| promise_revoke_counter = 0; |
| promise_reject_line_number = -1; |
| + promise_reject_column_number = -1; |
| promise_reject_frame_count = -1; |
| CcTest::global()->Set(v8_str("rejected"), v8_str("")); |
| CcTest::global()->Set(v8_str("value"), v8_str("")); |
| @@ -18470,6 +18476,25 @@ TEST(PromiseRejectCallback) { |
| CHECK_EQ(1, promise_revoke_counter); |
| CHECK_EQ(0, promise_reject_frame_count); |
| CHECK_EQ(-1, promise_reject_line_number); |
| + |
| + ResetPromiseStates(); |
| + |
| + // Create promise t1, which rejects by throwing syntax error from eval. |
| + CompileRunWithOrigin( |
| + "var t1 = new Promise( \n" |
| + " function(res, rej) { \n" |
| + " var content = '\\n\\\n" |
| + " }'; \n" |
| + " eval(content); \n" |
| + " } \n" |
| + "); \n", |
| + "pro", 0, 0); |
| + CHECK(!GetPromise("t1")->HasHandler()); |
| + CHECK_EQ(1, promise_reject_counter); |
| + CHECK_EQ(0, promise_revoke_counter); |
| + CHECK_EQ(2, promise_reject_frame_count); |
| + CHECK_EQ(2, promise_reject_line_number); |
| + CHECK_EQ(7, promise_reject_column_number); |
| } |