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

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

Issue 2682593003: [debugger] implement legacy debug event listeners via debug delegate. (Closed)
Patch Set: addressed comments Created 3 years, 10 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 | « src/runtime/runtime-promise.cc ('k') | 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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 3738 matching lines...) Expand 10 before | Expand all | Expand 10 after
3749 "try {\n" 3749 "try {\n"
3750 " throw 1;\n" 3750 " throw 1;\n"
3751 "} finally {\n" 3751 "} finally {\n"
3752 "}\n"); 3752 "}\n");
3753 DebugEventCounterCheck(1, 1, 1); 3753 DebugEventCounterCheck(1, 1, 1);
3754 v8::Debug::SetDebugEventListener(isolate, nullptr); 3754 v8::Debug::SetDebugEventListener(isolate, nullptr);
3755 isolate->RemoveMessageListeners(try_finally_original_message); 3755 isolate->RemoveMessageListeners(try_finally_original_message);
3756 } 3756 }
3757 3757
3758 3758
3759 TEST(EvalJSInDebugEventListenerOnNativeReThrownException) {
3760 DebugLocalContext env;
3761 v8::HandleScope scope(env->GetIsolate());
3762 env.ExposeDebug();
3763
3764 // Create functions for testing break on exception.
3765 v8::Local<v8::Function> noThrowJS = CompileFunction(
3766 &env, "function noThrowJS(){var a=[1]; a.push(2); return a.length;}",
3767 "noThrowJS");
3768
3769 debug_event_listener_callback = noThrowJS;
3770 debug_event_listener_callback_result = 2;
3771
3772 env->GetIsolate()->AddMessageListener(MessageCallbackCount);
3773 v8::Debug::SetDebugEventListener(env->GetIsolate(), DebugEventCounter);
3774 // Break on uncaught exception
3775 ChangeBreakOnException(false, true);
3776 DebugEventCounterClear();
3777 MessageCallbackCountClear();
3778
3779 // ReThrow native error
3780 {
3781 v8::TryCatch tryCatch(env->GetIsolate());
3782 env->GetIsolate()->ThrowException(
3783 v8::Exception::TypeError(v8_str(env->GetIsolate(), "Type error")));
3784 CHECK(tryCatch.HasCaught());
3785 tryCatch.ReThrow();
3786 }
3787 CHECK_EQ(1, exception_hit_count);
3788 CHECK_EQ(1, uncaught_exception_hit_count);
3789 CHECK_EQ(0, message_callback_count); // FIXME: Should it be 1 ?
3790 CHECK(!debug_event_listener_callback.IsEmpty());
3791
3792 debug_event_listener_callback.Clear();
3793 }
3794
3795
3796 // Test break on exception from compiler errors. When compiling using 3759 // Test break on exception from compiler errors. When compiling using
3797 // v8::Script::Compile there is no JavaScript stack whereas when compiling using 3760 // v8::Script::Compile there is no JavaScript stack whereas when compiling using
3798 // eval there are JavaScript frames. 3761 // eval there are JavaScript frames.
3799 TEST(BreakOnCompileException) { 3762 TEST(BreakOnCompileException) {
3800 DebugLocalContext env; 3763 DebugLocalContext env;
3801 v8::HandleScope scope(env->GetIsolate()); 3764 v8::HandleScope scope(env->GetIsolate());
3802 3765
3803 v8::Local<v8::Context> context = env.context(); 3766 v8::Local<v8::Context> context = env.context();
3804 // For this test, we want to break on uncaught exceptions: 3767 // For this test, we want to break on uncaught exceptions:
3805 ChangeBreakOnException(false, true); 3768 ChangeBreakOnException(false, true);
3806 3769
3807 // Create a function for checking the function when hitting a break point. 3770 // Create a function for checking the function when hitting a break point.
3808 frame_count = CompileFunction(&env, frame_count_source, "frame_count"); 3771 frame_count = CompileFunction(&env, frame_count_source, "frame_count");
3809 3772
3810 env->GetIsolate()->AddMessageListener(MessageCallbackCount); 3773 env->GetIsolate()->AddMessageListener(MessageCallbackCount);
3811 v8::Debug::SetDebugEventListener(env->GetIsolate(), DebugEventCounter); 3774 v8::Debug::SetDebugEventListener(env->GetIsolate(), DebugEventCounter);
3812 3775
3813 DebugEventCounterClear(); 3776 DebugEventCounterClear();
3814 MessageCallbackCountClear(); 3777 MessageCallbackCountClear();
3815 3778
3816 // Check initial state. 3779 // Check initial state.
3817 CHECK_EQ(0, exception_hit_count); 3780 CHECK_EQ(0, exception_hit_count);
3818 CHECK_EQ(0, uncaught_exception_hit_count); 3781 CHECK_EQ(0, uncaught_exception_hit_count);
3819 CHECK_EQ(0, message_callback_count); 3782 CHECK_EQ(0, message_callback_count);
3820 CHECK_EQ(-1, last_js_stack_height); 3783 CHECK_EQ(-1, last_js_stack_height);
3821 3784
3822 // Throws SyntaxError: Unexpected end of input 3785 // Throws SyntaxError: Unexpected end of input
3823 CHECK( 3786 CHECK(
3824 v8::Script::Compile(context, v8_str(env->GetIsolate(), "+++")).IsEmpty()); 3787 v8::Script::Compile(context, v8_str(env->GetIsolate(), "+++")).IsEmpty());
3825 CHECK_EQ(1, exception_hit_count); 3788 // Exceptions with no stack are skipped.
3826 CHECK_EQ(1, uncaught_exception_hit_count); 3789 CHECK_EQ(0, exception_hit_count);
3790 CHECK_EQ(0, uncaught_exception_hit_count);
3827 CHECK_EQ(1, message_callback_count); 3791 CHECK_EQ(1, message_callback_count);
3828 CHECK_EQ(0, last_js_stack_height); // No JavaScript stack. 3792 CHECK_EQ(0, last_js_stack_height); // No JavaScript stack.
3829 3793
3830 // Throws SyntaxError: Unexpected identifier 3794 // Throws SyntaxError: Unexpected identifier
3831 CHECK( 3795 CHECK(
3832 v8::Script::Compile(context, v8_str(env->GetIsolate(), "x x")).IsEmpty()); 3796 v8::Script::Compile(context, v8_str(env->GetIsolate(), "x x")).IsEmpty());
3833 CHECK_EQ(2, exception_hit_count); 3797 // Exceptions with no stack are skipped.
3834 CHECK_EQ(2, uncaught_exception_hit_count); 3798 CHECK_EQ(0, exception_hit_count);
3799 CHECK_EQ(0, uncaught_exception_hit_count);
3835 CHECK_EQ(2, message_callback_count); 3800 CHECK_EQ(2, message_callback_count);
3836 CHECK_EQ(0, last_js_stack_height); // No JavaScript stack. 3801 CHECK_EQ(0, last_js_stack_height); // No JavaScript stack.
3837 3802
3838 // Throws SyntaxError: Unexpected end of input 3803 // Throws SyntaxError: Unexpected end of input
3839 CHECK(v8::Script::Compile(context, v8_str(env->GetIsolate(), "eval('+++')")) 3804 CHECK(v8::Script::Compile(context, v8_str(env->GetIsolate(), "eval('+++')"))
3840 .ToLocalChecked() 3805 .ToLocalChecked()
3841 ->Run(context) 3806 ->Run(context)
3842 .IsEmpty()); 3807 .IsEmpty());
3843 CHECK_EQ(3, exception_hit_count); 3808 CHECK_EQ(1, exception_hit_count);
3844 CHECK_EQ(3, uncaught_exception_hit_count); 3809 CHECK_EQ(1, uncaught_exception_hit_count);
3845 CHECK_EQ(3, message_callback_count); 3810 CHECK_EQ(3, message_callback_count);
3846 CHECK_EQ(1, last_js_stack_height); 3811 CHECK_EQ(1, last_js_stack_height);
3847 3812
3848 // Throws SyntaxError: Unexpected identifier 3813 // Throws SyntaxError: Unexpected identifier
3849 CHECK(v8::Script::Compile(context, v8_str(env->GetIsolate(), "eval('x x')")) 3814 CHECK(v8::Script::Compile(context, v8_str(env->GetIsolate(), "eval('x x')"))
3850 .ToLocalChecked() 3815 .ToLocalChecked()
3851 ->Run(context) 3816 ->Run(context)
3852 .IsEmpty()); 3817 .IsEmpty());
3853 CHECK_EQ(4, exception_hit_count); 3818 CHECK_EQ(2, exception_hit_count);
3854 CHECK_EQ(4, uncaught_exception_hit_count); 3819 CHECK_EQ(2, uncaught_exception_hit_count);
3855 CHECK_EQ(4, message_callback_count); 3820 CHECK_EQ(4, message_callback_count);
3856 CHECK_EQ(1, last_js_stack_height); 3821 CHECK_EQ(1, last_js_stack_height);
3857 } 3822 }
3858 3823
3859 3824
3860 TEST(StepWithException) { 3825 TEST(StepWithException) {
3861 DebugLocalContext env; 3826 DebugLocalContext env;
3862 v8::HandleScope scope(env->GetIsolate()); 3827 v8::HandleScope scope(env->GetIsolate());
3863 3828
3864 // For this test, we want to break on uncaught exceptions: 3829 // For this test, we want to break on uncaught exceptions:
(...skipping 2787 matching lines...) Expand 10 before | Expand all | Expand 10 after
6652 reinterpret_cast<void*>(isolate)); 6617 reinterpret_cast<void*>(isolate));
6653 CHECK(!out_of_memory_callback_called); 6618 CHECK(!out_of_memory_callback_called);
6654 // The following allocation fails unless the out-of-memory callback 6619 // The following allocation fails unless the out-of-memory callback
6655 // increases the heap limit. 6620 // increases the heap limit.
6656 int length = 10 * i::MB / i::kPointerSize; 6621 int length = 10 * i::MB / i::kPointerSize;
6657 i_isolate->factory()->NewFixedArray(length, i::TENURED); 6622 i_isolate->factory()->NewFixedArray(length, i::TENURED);
6658 CHECK(out_of_memory_callback_called); 6623 CHECK(out_of_memory_callback_called);
6659 } 6624 }
6660 isolate->Dispose(); 6625 isolate->Dispose();
6661 } 6626 }
OLDNEW
« no previous file with comments | « src/runtime/runtime-promise.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698