|
|
@ -35,7 +35,8 @@ function Point(x, y) { |
|
|
|
|
|
|
|
Point.prototype.distanceTo = function(p) { |
|
|
|
debugger; |
|
|
|
return Math.sqrt(Math.pow(Math.abs(this.x - p.x), 2) + Math.pow(Math.abs(this.y - p.y), 2)) |
|
|
|
return Math.sqrt(Math.pow(Math.abs(this.x - p.x), 2) + |
|
|
|
Math.pow(Math.abs(this.y - p.y), 2)) |
|
|
|
} |
|
|
|
|
|
|
|
p1 = new Point(1,1); |
|
|
@ -58,7 +59,7 @@ a=[1,2,distance]; |
|
|
|
// Get the Debug object exposed from the debug context global object.
|
|
|
|
Debug = debug.Debug |
|
|
|
|
|
|
|
testConstructor = false; // Flag to control which part of the test is run.
|
|
|
|
what = 'constructor'; // Flag to control which part of the test is run.
|
|
|
|
listenerCalled = false; |
|
|
|
exception = false; |
|
|
|
|
|
|
@ -72,28 +73,45 @@ function safeEval(code) { |
|
|
|
|
|
|
|
function listener(event, exec_state, event_data, data) { |
|
|
|
try { |
|
|
|
if (event == Debug.DebugEvent.Break) |
|
|
|
{ |
|
|
|
if (!testConstructor) { |
|
|
|
if (event == Debug.DebugEvent.Break) { |
|
|
|
if (what == 'constructor') { |
|
|
|
// The expected backtrace is
|
|
|
|
// 0: Call distance on Point where distance is a property on the prototype
|
|
|
|
// 0: Call distance on Point where distance is a prototype property
|
|
|
|
// 1: Call distance on Point where distance is a direct property
|
|
|
|
// 2: Call on function an array element 2
|
|
|
|
// 3: [anonymous]
|
|
|
|
assertEquals("#<Point>.distanceTo(p=#<Point>)", exec_state.frame(0).invocationText()); |
|
|
|
assertEquals("#<Point>.distanceTo(p=#<Point>)", exec_state.frame(1).invocationText()); |
|
|
|
assertEquals("#<Array>[2](aka distance)(p=#<Point>, q=#<Point>)", exec_state.frame(2).invocationText()); |
|
|
|
assertEquals("#<Point>.distanceTo(p=#<Point>)", |
|
|
|
exec_state.frame(0).invocationText()); |
|
|
|
assertEquals("#<Point>.distanceTo(p=#<Point>)", |
|
|
|
exec_state.frame(1).invocationText()); |
|
|
|
assertEquals("#<Array>[2](aka distance)(p=#<Point>, q=#<Point>)", |
|
|
|
exec_state.frame(2).invocationText()); |
|
|
|
assertEquals("[anonymous]()", exec_state.frame(3).invocationText()); |
|
|
|
listenerCalled = true; |
|
|
|
} else { |
|
|
|
} else if (what == 'breakpoint') { |
|
|
|
// The expected backtrace is
|
|
|
|
// 0: Call Point constructor
|
|
|
|
// 1: Call on global function createPoint
|
|
|
|
// 2: [anonymous]
|
|
|
|
assertEquals("new Point(x=0, y=0)", exec_state.frame(0).invocationText()); |
|
|
|
assertEquals("createPoint(x=0, y=0)", exec_state.frame(1).invocationText()); |
|
|
|
assertEquals("new Point(x=0, y=0)", |
|
|
|
exec_state.frame(0).invocationText()); |
|
|
|
assertEquals("createPoint(x=0, y=0)", |
|
|
|
exec_state.frame(1).invocationText()); |
|
|
|
assertEquals("[anonymous]()", exec_state.frame(2).invocationText()); |
|
|
|
listenerCalled = true; |
|
|
|
} else if (what == 'symbol') { |
|
|
|
// The expected backtrace is
|
|
|
|
// 0: Call Point constructor
|
|
|
|
// 1: Call on symbol method
|
|
|
|
// 2: [anonymous]
|
|
|
|
assertEquals("new Point(x=0, y=0)", |
|
|
|
exec_state.frame(0).invocationText()); |
|
|
|
assertEquals("#<Object>[Symbol(Das Symbol)](x=0, y=0)", |
|
|
|
exec_state.frame(1).invocationText()); |
|
|
|
assertEquals("[anonymous]()", exec_state.frame(2).invocationText()); |
|
|
|
listenerCalled = true; |
|
|
|
} else { |
|
|
|
assertUnreachable(); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
@ -112,11 +130,21 @@ assertTrue(listenerCalled); |
|
|
|
assertFalse(exception, "exception in listener") |
|
|
|
|
|
|
|
// Set a break point and call to invoke the debug event listener.
|
|
|
|
what = 'breakpoint'; |
|
|
|
listenerCalled = false; |
|
|
|
testConstructor = true; |
|
|
|
Debug.setBreakPoint(Point, 0, 0); |
|
|
|
createPoint(0, 0); |
|
|
|
|
|
|
|
// Make sure that the debug event listener vas invoked (again).
|
|
|
|
assertTrue(listenerCalled); |
|
|
|
assertFalse(exception, "exception in listener") |
|
|
|
|
|
|
|
what = 'symbol'; |
|
|
|
listenerCalled = false; |
|
|
|
var S = Symbol('Das Symbol'); |
|
|
|
var o = { [S](x, y) { return new Point(x, y); } }; |
|
|
|
Debug.setBreakPoint(Point, 0, 0); |
|
|
|
o[S](0, 0); |
|
|
|
|
|
|
|
assertTrue(listenerCalled); |
|
|
|
assertFalse(exception, "exception in listener") |
|
|
|