Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: test/cctest/test-debug.cc

Issue 243036: Make cctest test-debug.cc more accurate (Closed)
Patch Set: clean up Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 3521 matching lines...) Expand 10 before | Expand all | Expand 10 after
3532 // We match parts of the message to decide if it is a break message. 3532 // We match parts of the message to decide if it is a break message.
3533 bool IsBreakEventMessage(char *message) { 3533 bool IsBreakEventMessage(char *message) {
3534 const char* type_event = "\"type\":\"event\""; 3534 const char* type_event = "\"type\":\"event\"";
3535 const char* event_break = "\"event\":\"break\""; 3535 const char* event_break = "\"event\":\"break\"";
3536 // Does the message contain both type:event and event:break? 3536 // Does the message contain both type:event and event:break?
3537 return strstr(message, type_event) != NULL && 3537 return strstr(message, type_event) != NULL &&
3538 strstr(message, event_break) != NULL; 3538 strstr(message, event_break) != NULL;
3539 } 3539 }
3540 3540
3541 3541
3542 // We match parts of the message to decide if it is a exception message.
3543 bool IsExceptionEventMessage(char *message) {
3544 const char* type_event = "\"type\":\"event\"";
3545 const char* event_exception = "\"event\":\"exception\"";
3546 // Does the message contain both type:event and event:exception?
3547 return strstr(message, type_event) != NULL &&
3548 strstr(message, event_exception) != NULL;
3549 }
3550
3551
3552 // We match the message wether it is an evaluate response message.
3553 bool IsEvaluateResponseMessage(char* message) {
3554 const char* type_response = "\"type\":\"response\"";
3555 const char* command_evaluate = "\"command\":\"evaluate\"";
3556 // Does the message contain both type:response and command:evaluate?
3557 return strstr(message, type_response) != NULL &&
3558 strstr(message, command_evaluate) != NULL;
3559 }
3560
3561
3562 // We match parts of the message to get evaluate result int value.
3563 int GetEvaluateIntResult(char *message) {
3564 const char* value = "\"value\":";
3565 char* pos = strstr(message, value);
3566 if (pos == NULL) {
3567 return -1;
3568 }
3569 int res = -1;
3570 sscanf(pos + strlen(value), "%d", &res);
3571 return res;
3572 }
3573
3574
3575 // We match parts of the message to get hit breakpoint id.
3576 int GetBreakpointIdFromBreakEventMessage(char *message) {
3577 const char* breakpoints = "\"breakpoints\":[";
3578 char* pos = strstr(message, breakpoints);
3579 if (pos == NULL) {
3580 return -1;
3581 }
3582 int res = -1;
3583 sscanf(pos + strlen(breakpoints), "%d", &res);
3584 return res;
3585 }
3586
3587
3542 /* Test MessageQueues */ 3588 /* Test MessageQueues */
3543 /* Tests the message queues that hold debugger commands and 3589 /* Tests the message queues that hold debugger commands and
3544 * response messages to the debugger. Fills queues and makes 3590 * response messages to the debugger. Fills queues and makes
3545 * them grow. 3591 * them grow.
3546 */ 3592 */
3547 Barriers message_queue_barriers; 3593 Barriers message_queue_barriers;
3548 3594
3549 // This is the debugger thread, that executes no v8 calls except 3595 // This is the debugger thread, that executes no v8 calls except
3550 // placing JSON debugger commands in the queue. 3596 // placing JSON debugger commands in the queue.
3551 class MessageQueueDebuggerThread : public v8::internal::Thread { 3597 class MessageQueueDebuggerThread : public v8::internal::Thread {
3552 public: 3598 public:
3553 void Run(); 3599 void Run();
3554 }; 3600 };
3555 3601
3556 static void MessageHandler(const uint16_t* message, int length, 3602 static void MessageHandler(const uint16_t* message, int length,
3557 v8::Debug::ClientData* client_data) { 3603 v8::Debug::ClientData* client_data) {
3558 static char print_buffer[1000]; 3604 static char print_buffer[1000];
3559 Utf16ToAscii(message, length, print_buffer); 3605 Utf16ToAscii(message, length, print_buffer);
3560 if (IsBreakEventMessage(print_buffer)) { 3606 if (IsBreakEventMessage(print_buffer)) {
3561 // Lets test script wait until break occurs to send commands. 3607 // Lets test script wait until break occurs to send commands.
3562 // Signals when a break is reported. 3608 // Signals when a break is reported.
3563 message_queue_barriers.semaphore_2->Signal(); 3609 message_queue_barriers.semaphore_2->Signal();
3564 } 3610 }
3565 3611
3566 // Allow message handler to block on a semaphore, to test queueing of 3612 // Allow message handler to block on a semaphore, to test queueing of
3567 // messages while blocked. 3613 // messages while blocked.
3568 message_queue_barriers.semaphore_1->Wait(); 3614 message_queue_barriers.semaphore_1->Wait();
3569 printf("%s\n", print_buffer);
3570 fflush(stdout);
3571 } 3615 }
3572 3616
3573 void MessageQueueDebuggerThread::Run() { 3617 void MessageQueueDebuggerThread::Run() {
3574 const int kBufferSize = 1000; 3618 const int kBufferSize = 1000;
3575 uint16_t buffer_1[kBufferSize]; 3619 uint16_t buffer_1[kBufferSize];
3576 uint16_t buffer_2[kBufferSize]; 3620 uint16_t buffer_2[kBufferSize];
3577 const char* command_1 = 3621 const char* command_1 =
3578 "{\"seq\":117," 3622 "{\"seq\":117,"
3579 "\"type\":\"request\"," 3623 "\"type\":\"request\","
3580 "\"command\":\"evaluate\"," 3624 "\"command\":\"evaluate\","
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
3815 } 3859 }
3816 3860
3817 3861
3818 static void ThreadedMessageHandler(const v8::Debug::Message& message) { 3862 static void ThreadedMessageHandler(const v8::Debug::Message& message) {
3819 static char print_buffer[1000]; 3863 static char print_buffer[1000];
3820 v8::String::Value json(message.GetJSON()); 3864 v8::String::Value json(message.GetJSON());
3821 Utf16ToAscii(*json, json.length(), print_buffer); 3865 Utf16ToAscii(*json, json.length(), print_buffer);
3822 if (IsBreakEventMessage(print_buffer)) { 3866 if (IsBreakEventMessage(print_buffer)) {
3823 threaded_debugging_barriers.barrier_2.Wait(); 3867 threaded_debugging_barriers.barrier_2.Wait();
3824 } 3868 }
3825 printf("%s\n", print_buffer);
3826 fflush(stdout);
3827 } 3869 }
3828 3870
3829 3871
3830 void V8Thread::Run() { 3872 void V8Thread::Run() {
3831 const char* source = 3873 const char* source =
3832 "flag = true;\n" 3874 "flag = true;\n"
3833 "function bar( new_value ) {\n" 3875 "function bar( new_value ) {\n"
3834 " flag = new_value;\n" 3876 " flag = new_value;\n"
3835 " return \"Return from bar(\" + new_value + \")\";\n" 3877 " return \"Return from bar(\" + new_value + \")\";\n"
3836 "}\n" 3878 "}\n"
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3904 void Run(); 3946 void Run();
3905 }; 3947 };
3906 3948
3907 class BreakpointsDebuggerThread : public v8::internal::Thread { 3949 class BreakpointsDebuggerThread : public v8::internal::Thread {
3908 public: 3950 public:
3909 void Run(); 3951 void Run();
3910 }; 3952 };
3911 3953
3912 3954
3913 Barriers* breakpoints_barriers; 3955 Barriers* breakpoints_barriers;
3956 int break_event_breakpoint_id;
3957 int evaluate_int_result;
3914 3958
3915 static void BreakpointsMessageHandler(const v8::Debug::Message& message) { 3959 static void BreakpointsMessageHandler(const v8::Debug::Message& message) {
3916 static char print_buffer[1000]; 3960 static char print_buffer[1000];
3917 v8::String::Value json(message.GetJSON()); 3961 v8::String::Value json(message.GetJSON());
3918 Utf16ToAscii(*json, json.length(), print_buffer); 3962 Utf16ToAscii(*json, json.length(), print_buffer);
3919 printf("%s\n", print_buffer);
3920 fflush(stdout);
3921 3963
3922 // Is break_template a prefix of the message?
3923 if (IsBreakEventMessage(print_buffer)) { 3964 if (IsBreakEventMessage(print_buffer)) {
3965 break_event_breakpoint_id =
3966 GetBreakpointIdFromBreakEventMessage(print_buffer);
3967 breakpoints_barriers->semaphore_1->Signal();
3968 } else if (IsEvaluateResponseMessage(print_buffer)) {
3969 evaluate_int_result = GetEvaluateIntResult(print_buffer);
3924 breakpoints_barriers->semaphore_1->Signal(); 3970 breakpoints_barriers->semaphore_1->Signal();
3925 } 3971 }
3926 } 3972 }
3927 3973
3928 3974
3929 void BreakpointsV8Thread::Run() { 3975 void BreakpointsV8Thread::Run() {
3930 const char* source_1 = "var y_global = 3;\n" 3976 const char* source_1 = "var y_global = 3;\n"
3931 "function cat( new_value ) {\n" 3977 "function cat( new_value ) {\n"
3932 " var x = new_value;\n" 3978 " var x = new_value;\n"
3933 " y_global = 4;\n" 3979 " y_global = y_global + 4;\n"
3934 " x = 3 * x + 1;\n" 3980 " x = 3 * x + 1;\n"
3935 " y_global = 5;\n" 3981 " y_global = y_global + 5;\n"
3936 " return x;\n" 3982 " return x;\n"
3937 "}\n" 3983 "}\n"
3938 "\n" 3984 "\n"
3939 "function dog() {\n" 3985 "function dog() {\n"
3940 " var x = 1;\n" 3986 " var x = 1;\n"
3941 " x = y_global;" 3987 " x = y_global;"
3942 " var z = 3;" 3988 " var z = 3;"
3943 " x += 100;\n" 3989 " x += 100;\n"
3944 " return x;\n" 3990 " return x;\n"
3945 "}\n" 3991 "}\n"
(...skipping 17 matching lines...) Expand all
3963 uint16_t buffer[kBufSize]; 4009 uint16_t buffer[kBufSize];
3964 4010
3965 const char* command_1 = "{\"seq\":101," 4011 const char* command_1 = "{\"seq\":101,"
3966 "\"type\":\"request\"," 4012 "\"type\":\"request\","
3967 "\"command\":\"setbreakpoint\"," 4013 "\"command\":\"setbreakpoint\","
3968 "\"arguments\":{\"type\":\"function\",\"target\":\"cat\",\"line\":3}}"; 4014 "\"arguments\":{\"type\":\"function\",\"target\":\"cat\",\"line\":3}}";
3969 const char* command_2 = "{\"seq\":102," 4015 const char* command_2 = "{\"seq\":102,"
3970 "\"type\":\"request\"," 4016 "\"type\":\"request\","
3971 "\"command\":\"setbreakpoint\"," 4017 "\"command\":\"setbreakpoint\","
3972 "\"arguments\":{\"type\":\"function\",\"target\":\"dog\",\"line\":3}}"; 4018 "\"arguments\":{\"type\":\"function\",\"target\":\"dog\",\"line\":3}}";
3973 const char* command_3 = "{\"seq\":104," 4019 const char* command_3 = "{\"seq\":103,"
3974 "\"type\":\"request\"," 4020 "\"type\":\"request\","
3975 "\"command\":\"evaluate\"," 4021 "\"command\":\"evaluate\","
3976 "\"arguments\":{\"expression\":\"dog()\",\"disable_break\":false}}"; 4022 "\"arguments\":{\"expression\":\"dog()\",\"disable_break\":false}}";
3977 const char* command_4 = "{\"seq\":105," 4023 const char* command_4 = "{\"seq\":104,"
3978 "\"type\":\"request\"," 4024 "\"type\":\"request\","
3979 "\"command\":\"evaluate\"," 4025 "\"command\":\"evaluate\","
3980 "\"arguments\":{\"expression\":\"x\",\"disable_break\":true}}"; 4026 "\"arguments\":{\"expression\":\"x + 1\",\"disable_break\":true}}";
3981 const char* command_5 = "{\"seq\":106," 4027 const char* command_5 = "{\"seq\":105,"
3982 "\"type\":\"request\"," 4028 "\"type\":\"request\","
3983 "\"command\":\"continue\"}"; 4029 "\"command\":\"continue\"}";
3984 const char* command_6 = "{\"seq\":107," 4030 const char* command_6 = "{\"seq\":106,"
3985 "\"type\":\"request\"," 4031 "\"type\":\"request\","
3986 "\"command\":\"continue\"}"; 4032 "\"command\":\"continue\"}";
3987 const char* command_7 = "{\"seq\":108," 4033 const char* command_7 = "{\"seq\":107,"
3988 "\"type\":\"request\"," 4034 "\"type\":\"request\","
3989 "\"command\":\"evaluate\"," 4035 "\"command\":\"evaluate\","
3990 "\"arguments\":{\"expression\":\"dog()\",\"disable_break\":true}}"; 4036 "\"arguments\":{\"expression\":\"dog()\",\"disable_break\":true}}";
3991 const char* command_8 = "{\"seq\":109," 4037 const char* command_8 = "{\"seq\":108,"
3992 "\"type\":\"request\"," 4038 "\"type\":\"request\","
3993 "\"command\":\"continue\"}"; 4039 "\"command\":\"continue\"}";
3994 4040
3995 4041
3996 // v8 thread initializes, runs source_1 4042 // v8 thread initializes, runs source_1
3997 breakpoints_barriers->barrier_1.Wait(); 4043 breakpoints_barriers->barrier_1.Wait();
3998 // 1:Set breakpoint in cat(). 4044 // 1:Set breakpoint in cat() (will get id 1).
3999 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_1, buffer)); 4045 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_1, buffer));
4000 // 2:Set breakpoint in dog() 4046 // 2:Set breakpoint in dog() (will get id 2).
4001 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_2, buffer)); 4047 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_2, buffer));
4002 breakpoints_barriers->barrier_2.Wait(); 4048 breakpoints_barriers->barrier_2.Wait();
4003 // v8 thread starts compiling source_2. 4049 // V8 thread starts compiling source_2.
4004 // Automatic break happens, to run queued commands 4050 // Automatic break happens, to run queued commands
4005 // breakpoints_barriers->semaphore_1->Wait(); 4051 // breakpoints_barriers->semaphore_1->Wait();
4006 // Commands 1 through 3 run, thread continues. 4052 // Commands 1 through 3 run, thread continues.
4007 // v8 thread runs source_2 to breakpoint in cat(). 4053 // v8 thread runs source_2 to breakpoint in cat().
4008 // message callback receives break event. 4054 // message callback receives break event.
4009 breakpoints_barriers->semaphore_1->Wait(); 4055 breakpoints_barriers->semaphore_1->Wait();
4056 // Must have hit breakpoint #1.
4057 CHECK_EQ(1, break_event_breakpoint_id);
4010 // 4:Evaluate dog() (which has a breakpoint). 4058 // 4:Evaluate dog() (which has a breakpoint).
4011 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_3, buffer)); 4059 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_3, buffer));
4012 // v8 thread hits breakpoint in dog() 4060 // V8 thread hits breakpoint in dog().
4013 breakpoints_barriers->semaphore_1->Wait(); // wait for break event 4061 breakpoints_barriers->semaphore_1->Wait(); // wait for break event
4014 // 5:Evaluate x 4062 // Must have hit breakpoint #2.
4063 CHECK_EQ(2, break_event_breakpoint_id);
4064 // 5:Evaluate (x + 1).
4015 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_4, buffer)); 4065 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_4, buffer));
4016 // 6:Continue evaluation of dog() 4066 // Evaluate (x + 1) finishes.
4067 breakpoints_barriers->semaphore_1->Wait();
4068 // Must have result 108.
4069 CHECK_EQ(108, evaluate_int_result);
4070 // 6:Continue evaluation of dog().
4017 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_5, buffer)); 4071 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_5, buffer));
4018 // dog() finishes. 4072 // Evaluate dog() finishes.
4073 breakpoints_barriers->semaphore_1->Wait();
4074 // Must have result 107.
4075 CHECK_EQ(107, evaluate_int_result);
4019 // 7:Continue evaluation of source_2, finish cat(17), hit breakpoint 4076 // 7:Continue evaluation of source_2, finish cat(17), hit breakpoint
4020 // in cat(19). 4077 // in cat(19).
4021 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_6, buffer)); 4078 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_6, buffer));
4022 // message callback gets break event 4079 // Message callback gets break event.
4023 breakpoints_barriers->semaphore_1->Wait(); // wait for break event 4080 breakpoints_barriers->semaphore_1->Wait(); // wait for break event
4024 // 8: Evaluate dog() with breaks disabled 4081 // Must have hit breakpoint #1.
4082 CHECK_EQ(1, break_event_breakpoint_id);
4083 // 8: Evaluate dog() with breaks disabled.
4025 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_7, buffer)); 4084 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_7, buffer));
4085 // Evaluate dog() finishes.
4086 breakpoints_barriers->semaphore_1->Wait();
4087 // Must have result 116.
4088 CHECK_EQ(116, evaluate_int_result);
4026 // 9: Continue evaluation of source2, reach end. 4089 // 9: Continue evaluation of source2, reach end.
4027 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_8, buffer)); 4090 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_8, buffer));
4028 } 4091 }
4029 4092
4030 BreakpointsDebuggerThread breakpoints_debugger_thread; 4093 BreakpointsDebuggerThread breakpoints_debugger_thread;
4031 BreakpointsV8Thread breakpoints_v8_thread; 4094 BreakpointsV8Thread breakpoints_v8_thread;
4032 4095
4033 TEST(RecursiveBreakpoints) { 4096 TEST(RecursiveBreakpoints) {
4034 i::FLAG_debugger_auto_break = true; 4097 i::FLAG_debugger_auto_break = true;
4035 4098
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
4318 4381
4319 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer)); 4382 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
4320 } 4383 }
4321 4384
4322 4385
4323 // Debugger message handler which counts the number of times it is called. 4386 // Debugger message handler which counts the number of times it is called.
4324 static int message_handler_hit_count = 0; 4387 static int message_handler_hit_count = 0;
4325 static void MessageHandlerHitCount(const v8::Debug::Message& message) { 4388 static void MessageHandlerHitCount(const v8::Debug::Message& message) {
4326 message_handler_hit_count++; 4389 message_handler_hit_count++;
4327 4390
4328 SendContinueCommand(); 4391 static char print_buffer[1000];
4392 v8::String::Value json(message.GetJSON());
4393 Utf16ToAscii(*json, json.length(), print_buffer);
4394 if (IsExceptionEventMessage(print_buffer)) {
4395 // Send a continue command for exception events.
4396 SendContinueCommand();
4397 }
4329 } 4398 }
4330 4399
4331 4400
4332 // Test clearing the debug message handler. 4401 // Test clearing the debug message handler.
4333 TEST(DebuggerClearMessageHandler) { 4402 TEST(DebuggerClearMessageHandler) {
4334 v8::HandleScope scope; 4403 v8::HandleScope scope;
4335 DebugLocalContext env; 4404 DebugLocalContext env;
4336 4405
4337 // Check debugger is unloaded before it is used. 4406 // Check debugger is unloaded before it is used.
4338 CheckDebuggerUnloaded(); 4407 CheckDebuggerUnloaded();
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
4408 public: 4477 public:
4409 void Run(); 4478 void Run();
4410 }; 4479 };
4411 4480
4412 Barriers* host_dispatch_barriers; 4481 Barriers* host_dispatch_barriers;
4413 4482
4414 static void HostDispatchMessageHandler(const v8::Debug::Message& message) { 4483 static void HostDispatchMessageHandler(const v8::Debug::Message& message) {
4415 static char print_buffer[1000]; 4484 static char print_buffer[1000];
4416 v8::String::Value json(message.GetJSON()); 4485 v8::String::Value json(message.GetJSON());
4417 Utf16ToAscii(*json, json.length(), print_buffer); 4486 Utf16ToAscii(*json, json.length(), print_buffer);
4418 printf("%s\n", print_buffer);
4419 fflush(stdout);
4420 } 4487 }
4421 4488
4422 4489
4423 static void HostDispatchDispatchHandler() { 4490 static void HostDispatchDispatchHandler() {
4424 host_dispatch_barriers->semaphore_1->Signal(); 4491 host_dispatch_barriers->semaphore_1->Signal();
4425 } 4492 }
4426 4493
4427 4494
4428 void HostDispatchV8Thread::Run() { 4495 void HostDispatchV8Thread::Run() {
4429 const char* source_1 = "var y_global = 3;\n" 4496 const char* source_1 = "var y_global = 3;\n"
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
4768 static v8::Handle<v8::Value> expected_context_data; 4835 static v8::Handle<v8::Value> expected_context_data;
4769 4836
4770 4837
4771 // Check that the expected context is the one generating the debug event. 4838 // Check that the expected context is the one generating the debug event.
4772 static void ContextCheckMessageHandler(const v8::Debug::Message& message) { 4839 static void ContextCheckMessageHandler(const v8::Debug::Message& message) {
4773 CHECK(message.GetEventContext() == expected_context); 4840 CHECK(message.GetEventContext() == expected_context);
4774 CHECK(message.GetEventContext()->GetData()->StrictEquals( 4841 CHECK(message.GetEventContext()->GetData()->StrictEquals(
4775 expected_context_data)); 4842 expected_context_data));
4776 message_handler_hit_count++; 4843 message_handler_hit_count++;
4777 4844
4845 static char print_buffer[1000];
4846 v8::String::Value json(message.GetJSON());
4847 Utf16ToAscii(*json, json.length(), print_buffer);
4848
4778 // Send a continue command for break events. 4849 // Send a continue command for break events.
4779 if (message.GetEvent() == v8::Break) { 4850 if (IsBreakEventMessage(print_buffer)) {
4780 SendContinueCommand(); 4851 SendContinueCommand();
4781 } 4852 }
4782 } 4853 }
4783 4854
4784 4855
4785 // Test which creates two contexts and sets different embedder data on each. 4856 // Test which creates two contexts and sets different embedder data on each.
4786 // Checks that this data is set correctly and that when the debug message 4857 // Checks that this data is set correctly and that when the debug message
4787 // handler is called the expected context is the one active. 4858 // handler is called the expected context is the one active.
4788 TEST(ContextData) { 4859 TEST(ContextData) {
4789 v8::HandleScope scope; 4860 v8::HandleScope scope;
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
5008 static int continue_command_send_count = 0; 5079 static int continue_command_send_count = 0;
5009 // Check that the expected context is the one generating the debug event 5080 // Check that the expected context is the one generating the debug event
5010 // including the case of nested break event. 5081 // including the case of nested break event.
5011 static void DebugEvalContextCheckMessageHandler( 5082 static void DebugEvalContextCheckMessageHandler(
5012 const v8::Debug::Message& message) { 5083 const v8::Debug::Message& message) {
5013 CHECK(message.GetEventContext() == expected_context); 5084 CHECK(message.GetEventContext() == expected_context);
5014 CHECK(message.GetEventContext()->GetData()->StrictEquals( 5085 CHECK(message.GetEventContext()->GetData()->StrictEquals(
5015 expected_context_data)); 5086 expected_context_data));
5016 message_handler_hit_count++; 5087 message_handler_hit_count++;
5017 5088
5018 if (message.IsEvent() && message.GetEvent() == v8::Break) { 5089 static char print_buffer[1000];
5090 v8::String::Value json(message.GetJSON());
5091 Utf16ToAscii(*json, json.length(), print_buffer);
5092
5093 if (IsBreakEventMessage(print_buffer)) {
5019 break_count++; 5094 break_count++;
5020 if (!sent_eval) { 5095 if (!sent_eval) {
5021 sent_eval = true; 5096 sent_eval = true;
5022 5097
5023 const int kBufferSize = 1000; 5098 const int kBufferSize = 1000;
5024 uint16_t buffer[kBufferSize]; 5099 uint16_t buffer[kBufferSize];
5025 const char* eval_command = 5100 const char* eval_command =
5026 "{\"seq\":0," 5101 "{\"seq\":0,"
5027 "\"type\":\"request\"," 5102 "\"type\":\"request\","
5028 "\"command\":\"evaluate\"," 5103 "\"command\":\"evaluate\","
5029 "arguments:{\"expression\":\"debugger;\"," 5104 "arguments:{\"expression\":\"debugger;\","
5030 "\"global\":true,\"disable_break\":false}}"; 5105 "\"global\":true,\"disable_break\":false}}";
5031 5106
5032 // Send evaluate command. 5107 // Send evaluate command.
5033 v8::Debug::SendCommand(buffer, AsciiToUtf16(eval_command, buffer)); 5108 v8::Debug::SendCommand(buffer, AsciiToUtf16(eval_command, buffer));
5034 return; 5109 return;
5035 } else { 5110 } else {
5036 // It's a break event caused by the evaluation request above. 5111 // It's a break event caused by the evaluation request above.
5037 SendContinueCommand(); 5112 SendContinueCommand();
5038 continue_command_send_count++; 5113 continue_command_send_count++;
5039 } 5114 }
5040 } else if (message.IsResponse() && continue_command_send_count < 2) { 5115 } else if (IsEvaluateResponseMessage(print_buffer) &&
5116 continue_command_send_count < 2) {
5041 // Response to the evaluation request. We're still on the breakpoint so 5117 // Response to the evaluation request. We're still on the breakpoint so
5042 // send continue. 5118 // send continue.
5043 SendContinueCommand(); 5119 SendContinueCommand();
5044 continue_command_send_count++; 5120 continue_command_send_count++;
5045 } 5121 }
5046 } 5122 }
5047 5123
5048 5124
5049 // Tests that context returned for break event is correct when the event occurs 5125 // Tests that context returned for break event is correct when the event occurs
5050 // in 'evaluate' debugger request. 5126 // in 'evaluate' debugger request.
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
5360 v8::Script::New( 5436 v8::Script::New(
5361 v8::String::New( 5437 v8::String::New(
5362 "function runTest(mirror) {" 5438 "function runTest(mirror) {"
5363 " return mirror.isString() && (mirror.length() == 5);" 5439 " return mirror.isString() && (mirror.length() == 5);"
5364 "}" 5440 "}"
5365 "" 5441 ""
5366 "runTest;"))->Run()); 5442 "runTest;"))->Run());
5367 v8::Handle<v8::Value> result = run_test->Call(env->Global(), 1, &obj); 5443 v8::Handle<v8::Value> result = run_test->Call(env->Global(), 1, &obj);
5368 CHECK(result->IsTrue()); 5444 CHECK(result->IsTrue());
5369 } 5445 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698