| OLD | NEW |
| 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 6882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6893 CHECK_EQ(2, TestClientData::constructor_call_counter); | 6893 CHECK_EQ(2, TestClientData::constructor_call_counter); |
| 6894 CHECK_EQ(TestClientData::constructor_call_counter, | 6894 CHECK_EQ(TestClientData::constructor_call_counter, |
| 6895 TestClientData::destructor_call_counter); | 6895 TestClientData::destructor_call_counter); |
| 6896 | 6896 |
| 6897 v8::Debug::SetDebugEventListener(NULL); | 6897 v8::Debug::SetDebugEventListener(NULL); |
| 6898 CheckDebuggerUnloaded(); | 6898 CheckDebuggerUnloaded(); |
| 6899 } | 6899 } |
| 6900 | 6900 |
| 6901 | 6901 |
| 6902 // Test that setting the terminate execution flag during debug break processing. | 6902 // Test that setting the terminate execution flag during debug break processing. |
| 6903 static void TestDebugBreakInLoop(const char* loop_head, |
| 6904 const char** loop_bodies, |
| 6905 const char* loop_tail) { |
| 6906 // Receive 100 breaks for each test and then terminate JavaScript execution. |
| 6907 static int count = 0; |
| 6908 |
| 6909 for (int i = 0; loop_bodies[i] != NULL; i++) { |
| 6910 count++; |
| 6911 max_break_point_hit_count = count * 100; |
| 6912 terminate_after_max_break_point_hit = true; |
| 6913 |
| 6914 EmbeddedVector<char, 1024> buffer; |
| 6915 OS::SNPrintF(buffer, |
| 6916 "function f() {%s%s%s}", |
| 6917 loop_head, loop_bodies[i], loop_tail); |
| 6918 |
| 6919 // Function with infinite loop. |
| 6920 CompileRun(buffer.start()); |
| 6921 |
| 6922 // Set the debug break to enter the debugger as soon as possible. |
| 6923 v8::Debug::DebugBreak(); |
| 6924 |
| 6925 // Call function with infinite loop. |
| 6926 CompileRun("f();"); |
| 6927 CHECK_EQ(count * 100, break_point_hit_count); |
| 6928 |
| 6929 CHECK(!v8::V8::IsExecutionTerminating()); |
| 6930 } |
| 6931 } |
| 6932 |
| 6933 |
| 6903 TEST(DebugBreakLoop) { | 6934 TEST(DebugBreakLoop) { |
| 6904 v8::HandleScope scope; | 6935 v8::HandleScope scope; |
| 6905 DebugLocalContext env; | 6936 DebugLocalContext env; |
| 6906 | 6937 |
| 6907 // Receive 100 breaks and terminate. | |
| 6908 max_break_point_hit_count = 100; | |
| 6909 terminate_after_max_break_point_hit = true; | |
| 6910 | |
| 6911 // Register a debug event listener which sets the break flag and counts. | 6938 // Register a debug event listener which sets the break flag and counts. |
| 6912 v8::Debug::SetDebugEventListener(DebugEventBreakMax); | 6939 v8::Debug::SetDebugEventListener(DebugEventBreakMax); |
| 6913 | 6940 |
| 6914 // Function with infinite loop. | 6941 CompileRun("var a = 1;"); |
| 6915 CompileRun("function f() { while (true) { } }"); | 6942 CompileRun("function g() { }"); |
| 6943 CompileRun("function h() { }"); |
| 6916 | 6944 |
| 6917 // Set the debug break to enter the debugger as soon as possible. | 6945 const char* loop_bodies[] = { |
| 6918 v8::Debug::DebugBreak(); | 6946 "", |
| 6947 "g()", |
| 6948 "if (a == 0) { g() }", |
| 6949 "if (a == 1) { g() }", |
| 6950 "if (a == 0) { g() } else { h() }", |
| 6951 "if (a == 0) { continue }", |
| 6952 "if (a == 1) { continue }", |
| 6953 "switch (a) { case 1: g(); }", |
| 6954 "switch (a) { case 1: continue; }", |
| 6955 "switch (a) { case 1: g(); break; default: h() }", |
| 6956 "switch (a) { case 1: continue; break; default: h() }", |
| 6957 NULL |
| 6958 }; |
| 6919 | 6959 |
| 6920 // Call function with infinite loop. | 6960 TestDebugBreakInLoop("while (true) {", loop_bodies, "}"); |
| 6921 CompileRun("f();"); | 6961 TestDebugBreakInLoop("while (a == 1) {", loop_bodies, "}"); |
| 6922 CHECK_EQ(100, break_point_hit_count); | 6962 |
| 6963 TestDebugBreakInLoop("do {", loop_bodies, "} while (true)"); |
| 6964 TestDebugBreakInLoop("do {", loop_bodies, "} while (a == 1)"); |
| 6965 |
| 6966 TestDebugBreakInLoop("for (;;) {", loop_bodies, "}"); |
| 6967 TestDebugBreakInLoop("for (;a == 1;) {", loop_bodies, "}"); |
| 6923 | 6968 |
| 6924 // Get rid of the debug event listener. | 6969 // Get rid of the debug event listener. |
| 6925 v8::Debug::SetDebugEventListener(NULL); | 6970 v8::Debug::SetDebugEventListener(NULL); |
| 6926 CheckDebuggerUnloaded(); | 6971 CheckDebuggerUnloaded(); |
| 6927 } | 6972 } |
| 6928 | 6973 |
| 6929 | 6974 |
| 6930 #endif // ENABLE_DEBUGGER_SUPPORT | 6975 #endif // ENABLE_DEBUGGER_SUPPORT |
| OLD | NEW |