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. |