Index: test/cctest/test-debug.cc |
diff --git a/test/cctest/test-debug.cc b/test/cctest/test-debug.cc |
index d2cf0e0061efa22f430eea9b85359dda44c23440..66df35ad15f98f4750295d09784e8621eb73c9c9 100644 |
--- a/test/cctest/test-debug.cc |
+++ b/test/cctest/test-debug.cc |
@@ -6372,6 +6372,60 @@ TEST(AfterCompileMessageWhenMessageHandlerIsReset) { |
} |
+// Syntax error event handler which counts a number of events. |
+int compile_error_event_count = 0; |
+ |
+static void CompileErrorEventCounterClear() { |
+ compile_error_event_count = 0; |
+} |
+ |
+static void CompileErrorEventCounter( |
+ const v8::Debug::EventDetails& event_details) { |
+ v8::DebugEvent event = event_details.GetEvent(); |
+ |
+ if (event == v8::CompileError) { |
+ compile_error_event_count++; |
+ } |
+} |
+ |
+ |
+// Tests that syntax error event is sent as many times as there are scripts |
+// with syntax error compiled. |
+TEST(SyntaxErrorMessageOnSyntaxException) { |
+ DebugLocalContext env; |
+ v8::HandleScope scope(env->GetIsolate()); |
+ |
+ // For this test, we want to break on uncaught exceptions: |
+ ChangeBreakOnException(false, true); |
+ |
+ v8::Debug::SetDebugEventListener(CompileErrorEventCounter); |
+ |
+ CompileErrorEventCounterClear(); |
+ |
+ // Check initial state. |
+ CHECK_EQ(0, compile_error_event_count); |
+ |
+ // Throws SyntaxError: Unexpected end of input |
+ v8::Script::Compile(v8::String::NewFromUtf8(env->GetIsolate(), "+++")); |
+ CHECK_EQ(1, compile_error_event_count); |
+ |
+ v8::Script::Compile( |
+ v8::String::NewFromUtf8(env->GetIsolate(), "/sel\\/: \\")); |
+ CHECK_EQ(2, compile_error_event_count); |
+ |
+ v8::Script::Compile( |
+ v8::String::NewFromUtf8(env->GetIsolate(), "JSON.parse('1234:')")); |
+ CHECK_EQ(2, compile_error_event_count); |
+ |
+ v8::Script::Compile( |
+ v8::String::NewFromUtf8(env->GetIsolate(), "new RegExp('/\\/\\\\');")); |
+ CHECK_EQ(2, compile_error_event_count); |
+ |
+ v8::Script::Compile(v8::String::NewFromUtf8(env->GetIsolate(), "throw 1;")); |
+ CHECK_EQ(2, compile_error_event_count); |
+} |
+ |
+ |
// Tests that break event is sent when message handler is reset. |
TEST(BreakMessageWhenMessageHandlerIsReset) { |
DebugLocalContext env; |