Index: test/cctest/test-debug.cc |
=================================================================== |
--- test/cctest/test-debug.cc (revision 1312) |
+++ test/cctest/test-debug.cc (working copy) |
@@ -3660,3 +3660,40 @@ |
v8::Debug::SetDebugEventListener(NULL); |
CheckDebuggerUnloaded(true); |
} |
+ |
+ |
+int host_dispatch_hit_count = 0; |
+static void HostDispatchHandlerHitCount(void* dispatch, void *data) { |
+ CHECK_EQ(dispatch, &HostDispatchHandlerHitCount); |
+ CHECK_EQ(data, &HostDispatchHandlerHitCount); |
+ host_dispatch_hit_count++; |
+} |
+ |
+ |
+// Test that clearing the debug event listener actually clears all break points |
+// and related information. |
+TEST(DebuggerHostDispatch) { |
+ v8::HandleScope scope; |
+ DebugLocalContext env; |
+ |
+ const int kBufferSize = 1000; |
+ uint16_t buffer[kBufferSize]; |
+ const char* command_continue = |
+ "{\"seq\":106," |
+ "\"type\":\"request\"," |
+ "\"command\":\"continue\"}"; |
+ |
+ // Setup message and host dispatch handlers. |
+ v8::Debug::SetMessageHandler(DummyMessageHandler); |
+ v8::Debug::SetHostDispatchHandler(HostDispatchHandlerHitCount, |
+ &HostDispatchHandlerHitCount); |
+ |
+ // Fill a host dispatch and a continue command on the command queue before |
+ // generating a debug break. |
+ v8::Debug::SendHostDispatch(&HostDispatchHandlerHitCount); |
+ v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer)); |
+ CompileRun("debugger"); |
+ |
+ // The host dispatch callback should be called. |
+ CHECK_EQ(1, host_dispatch_hit_count); |
+} |