| Index: test/cctest/test-debug.cc
|
| ===================================================================
|
| --- test/cctest/test-debug.cc (revision 1647)
|
| +++ test/cctest/test-debug.cc (working copy)
|
| @@ -390,12 +390,6 @@
|
| }
|
|
|
|
|
| -// Check that the debugger is loaded.
|
| -static void CheckDebuggerLoaded() {
|
| - CHECK(Debug::debug_context().is_null());
|
| -}
|
| -
|
| -
|
| // Check that the debugger has been fully unloaded.
|
| void CheckDebuggerUnloaded(bool check_functions) {
|
| // Check that the debugger context is cleared and that there is no debug
|
| @@ -437,12 +431,6 @@
|
| } } // namespace v8::internal
|
|
|
|
|
| -// Check that the debugger is loaded.
|
| -static void CheckDebuggerLoaded() {
|
| - v8::internal::CheckDebuggerLoaded();
|
| -}
|
| -
|
| -
|
| // Check that the debugger has been fully unloaded.
|
| static void CheckDebuggerUnloaded(bool check_functions = false) {
|
| v8::internal::CheckDebuggerUnloaded(check_functions);
|
| @@ -3740,8 +3728,6 @@
|
| // Add debug event listener.
|
| v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount,
|
| v8::Undefined());
|
| - CheckDebuggerLoaded();
|
| -
|
| // Create a couple of functions for the test.
|
| v8::Local<v8::Function> foo =
|
| CompileFunction(&env, "function foo(){x=1}", "foo");
|
| @@ -3768,8 +3754,6 @@
|
| // Set a new debug event listener.
|
| v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount,
|
| v8::Undefined());
|
| - CheckDebuggerLoaded();
|
| -
|
| // Check that the break points was actually cleared.
|
| break_point_hit_count = 0;
|
| foo->Call(env->Global(), 0, NULL);
|
| @@ -3787,6 +3771,89 @@
|
| }
|
|
|
|
|
| +// Debugger message handler which counts the number of times it is called.
|
| +static int message_handler_hit_count = 0;
|
| +static void MessageHandlerHitCount(const uint16_t* message,
|
| + int length, void* data) {
|
| + message_handler_hit_count++;
|
| +
|
| + const int kBufferSize = 1000;
|
| + uint16_t buffer[kBufferSize];
|
| + const char* command_continue =
|
| + "{\"seq\":0,"
|
| + "\"type\":\"request\","
|
| + "\"command\":\"continue\"}";
|
| +
|
| + v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
|
| +}
|
| +
|
| +
|
| +// Test clearing the debug message handler.
|
| +TEST(DebuggerClearMessageHandler) {
|
| + v8::HandleScope scope;
|
| + DebugLocalContext env;
|
| +
|
| + // Check debugger is unloaded before it is used.
|
| + CheckDebuggerUnloaded();
|
| +
|
| + // Set a debug message handler.
|
| + v8::Debug::SetMessageHandler(MessageHandlerHitCount);
|
| +
|
| + // Run code to throw a unhandled exception. This should end up in the message
|
| + // handler.
|
| + CompileRun("throw 1");
|
| +
|
| + // The message handler should be called.
|
| + CHECK_GT(message_handler_hit_count, 0);
|
| +
|
| + // Clear debug message handler.
|
| + message_handler_hit_count = 0;
|
| + v8::Debug::SetMessageHandler(NULL);
|
| +
|
| + // Run code to throw a unhandled exception. This should end up in the message
|
| + // handler.
|
| + CompileRun("throw 1");
|
| +
|
| + // The message handler should not be called more.
|
| + CHECK_EQ(0, message_handler_hit_count);
|
| +
|
| + CheckDebuggerUnloaded(true);
|
| +}
|
| +
|
| +
|
| +// Debugger message handler which clears the message handler while active.
|
| +static void MessageHandlerClearingMessageHandler(const uint16_t* message,
|
| + int length,
|
| + void* data) {
|
| + message_handler_hit_count++;
|
| +
|
| + // Clear debug message handler.
|
| + v8::Debug::SetMessageHandler(NULL);
|
| +}
|
| +
|
| +
|
| +// Test clearing the debug message handler while processing a debug event.
|
| +TEST(DebuggerClearMessageHandlerWhileActive) {
|
| + v8::HandleScope scope;
|
| + DebugLocalContext env;
|
| +
|
| + // Check debugger is unloaded before it is used.
|
| + CheckDebuggerUnloaded();
|
| +
|
| + // Set a debug message handler.
|
| + v8::Debug::SetMessageHandler(MessageHandlerClearingMessageHandler);
|
| +
|
| + // Run code to throw a unhandled exception. This should end up in the message
|
| + // handler.
|
| + CompileRun("throw 1");
|
| +
|
| + // The message handler should be called.
|
| + CHECK_EQ(1, message_handler_hit_count);
|
| +
|
| + CheckDebuggerUnloaded(true);
|
| +}
|
| +
|
| +
|
| int host_dispatch_hit_count = 0;
|
| static void HostDispatchHandlerHitCount(void* dispatch, void *data) {
|
| host_dispatch_hit_count++;
|
|
|