1// Copyright 2008 the V8 project authors. All rights reserved. 2// Redistribution and use in source and binary forms, with or without 3// modification, are permitted provided that the following conditions are 4// met: 5// 6// * Redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer. 8// * Redistributions in binary form must reproduce the above 9// copyright notice, this list of conditions and the following 10// disclaimer in the documentation and/or other materials provided 11// with the distribution. 12// * Neither the name of Google Inc. nor the names of its 13// contributors may be used to endorse or promote products derived 14// from this software without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28// Flags: --expose-debug-as debug 29// Get the Debug object exposed from the debug context global object. 30Debug = debug.Debug 31 32// Simple debug event handler which just counts the number of break points hit. 33var break_point_hit_count; 34 35function listener(event, exec_state, event_data, data) { 36 if (event == Debug.DebugEvent.Break) { 37 break_point_hit_count++; 38 } 39}; 40 41// Add the debug event listener. 42Debug.setListener(listener); 43 44// Test functions 45function f() {a=1;b=2;}; 46function g() {f();} 47function h() {} 48 49// This test sets several break points at the same place and checks that 50// several break points at the same place only makes one debug break event 51// and that when the last break point is removed no more debug break events 52// occours. 53break_point_hit_count = 0; 54 55// Set a breakpoint in f. 56bp1 = Debug.setBreakPoint(f); 57f(); 58assertEquals(1, break_point_hit_count); 59 60// Set another breakpoint in f at the same place. 61bp2 = Debug.setBreakPoint(f); 62f(); 63assertEquals(2, break_point_hit_count); 64 65// Remove one of the break points. 66Debug.clearBreakPoint(bp1); 67f(); 68assertEquals(3, break_point_hit_count); 69 70// Remove the second break point. 71Debug.clearBreakPoint(bp2); 72f(); 73assertEquals(3, break_point_hit_count); 74 75// Perform the same test using function g (this time removing the break points 76// in the another order). 77break_point_hit_count = 0; 78bp1 = Debug.setBreakPoint(g); 79g(); 80assertEquals(1, break_point_hit_count); 81bp2 = Debug.setBreakPoint(g); 82g(); 83assertEquals(2, break_point_hit_count); 84Debug.clearBreakPoint(bp2); 85g(); 86assertEquals(3, break_point_hit_count); 87Debug.clearBreakPoint(bp1); 88g(); 89assertEquals(3, break_point_hit_count); 90 91// Finally test with many break points. 92test_count = 10; 93bps = new Array(test_count); 94break_point_hit_count = 0; 95for (var i = 0; i < test_count; i++) { 96 bps[i] = Debug.setBreakPoint(h); 97 h(); 98} 99for (var i = 0; i < test_count; i++) { 100 h(); 101 Debug.clearBreakPoint(bps[i]); 102} 103assertEquals(test_count * 2, break_point_hit_count); 104h(); 105assertEquals(test_count * 2, break_point_hit_count); 106