Chromium Code Reviews| Index: test/cctest/test-debug.cc |
| =================================================================== |
| --- test/cctest/test-debug.cc (revision 12707) |
| +++ test/cctest/test-debug.cc (working copy) |
| @@ -2381,7 +2381,7 @@ |
| } |
| -// Thest that the evaluation of expressions when a break point is hit generates |
| +// Test that the evaluation of expressions when a break point is hit generates |
| // the correct results. |
| TEST(DebugEvaluate) { |
| v8::HandleScope scope; |
| @@ -2497,6 +2497,97 @@ |
| CheckDebuggerUnloaded(); |
| } |
| + |
| +int debugEventCount = 0; |
| +static void CheckDebugEvent(const v8::Debug::EventDetails& eventDetails) { |
| + if (eventDetails.GetEvent() == v8::Break) |
|
Michael Starzinger
2012/10/15 09:51:25
Either on one line or add curly brackets.
yurys
2012/10/15 10:14:53
Done.
|
| + ++debugEventCount; |
| +} |
| + |
| +// Test that the conditional breakpoints work event if code generation from |
| +// strings is prohibited in the debugee context. |
| +TEST(ConditionalBreakpointWithCodeGenerationDisallowed) { |
| + v8::HandleScope scope; |
| + DebugLocalContext env; |
| + env.ExposeDebug(); |
| + |
| + v8::Debug::SetDebugEventListener2(CheckDebugEvent); |
| + |
| + v8::Local<v8::Function> foo = CompileFunction(&env, |
| + "function foo(x) {\n" |
| + " var s = 'String value2';\n" |
| + " return s + x;\n" |
| + "}", |
| + "foo"); |
| + |
| + // Set conditional breakpoint with condition 'true'. |
| + CompileRun("debug.Debug.setBreakPoint(foo, 2, 0, 'true')"); |
| + |
| + debugEventCount = 0; |
| + env->AllowCodeGenerationFromStrings(false); |
| + foo->Call(env->Global(), 0, NULL); |
| + CHECK_EQ(1, debugEventCount); |
| + |
| + v8::Debug::SetDebugEventListener2(NULL); |
| + CheckDebuggerUnloaded(); |
| +} |
| + |
|
Michael Starzinger
2012/10/15 09:51:25
Add second empty newline for readability.
yurys
2012/10/15 10:14:53
Done.
|
| +bool checkedDebugEvals = true; |
| +v8::Handle<v8::Function> checkGlobalEvalFunction; |
| +v8::Handle<v8::Function> checkFrameEvalFunction; |
| +static void CheckDebugEval(const v8::Debug::EventDetails& eventDetails) { |
| + if (eventDetails.GetEvent() == v8::Break) { |
| + ++debugEventCount; |
| + v8::HandleScope handleScope; |
| + |
| + v8::Handle<v8::Value> args[] = { eventDetails.GetExecutionState() }; |
| + CHECK(checkGlobalEvalFunction->Call( |
| + eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); |
| + CHECK(checkFrameEvalFunction->Call( |
| + eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); |
| + } |
| +} |
| + |
| +// Test that the evaluation of expressions when a break point is hit generates |
| +// the correct results in case code generation from strings is disallowed in the |
| +// debugee context. |
| +TEST(DebugEvaluateWithCodeGenerationDisallowed) { |
| + v8::HandleScope scope; |
| + DebugLocalContext env; |
| + env.ExposeDebug(); |
| + |
| + v8::Debug::SetDebugEventListener2(CheckDebugEval); |
| + |
| + v8::Local<v8::Function> foo = CompileFunction(&env, |
| + "var global = 'Global';\n" |
| + "function foo(x) {\n" |
| + " var local = 'Local';\n" |
| + " debugger;\n" |
| + " return local + x;\n" |
| + "}", |
| + "foo"); |
| + checkGlobalEvalFunction = CompileFunction(&env, |
| + "function checkGlobalEval(exec_state) {\n" |
| + " return exec_state.evaluateGlobal('global').value() === 'Global';\n" |
| + "}", |
| + "checkGlobalEval"); |
| + |
| + checkFrameEvalFunction = CompileFunction(&env, |
| + "function checkFrameEval(exec_state) {\n" |
| + " return exec_state.frame(0).evaluate('local').value() === 'Local';\n" |
| + "}", |
| + "checkFrameEval"); |
| + debugEventCount = 0; |
| + env->AllowCodeGenerationFromStrings(false); |
| + foo->Call(env->Global(), 0, NULL); |
| + CHECK_EQ(1, debugEventCount); |
| + |
| + checkGlobalEvalFunction.Clear(); |
| + checkFrameEvalFunction.Clear(); |
| + v8::Debug::SetDebugEventListener2(NULL); |
| + CheckDebuggerUnloaded(); |
| +} |
| + |
|
Michael Starzinger
2012/10/15 09:51:25
Add second empty newline for readability.
yurys
2012/10/15 10:14:53
Done.
|
| // Copies a C string to a 16-bit string. Does not check for buffer overflow. |
| // Does not use the V8 engine to convert strings, so it can be used |
| // in any thread. Returns the length of the string. |