Index: test/mjsunit/debug-backtrace-text.js |
diff --git a/test/mjsunit/debug-backtrace-text.js b/test/mjsunit/debug-backtrace-text.js |
index 61648fa4e2e6ee4e8554556db02e18acd93fe0b1..cfc89e6c1d676238341e1d64f0b8ab8351419de1 100644 |
--- a/test/mjsunit/debug-backtrace-text.js |
+++ b/test/mjsunit/debug-backtrace-text.js |
@@ -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,30 +73,47 @@ function safeEval(code) { |
function listener(event, exec_state, event_data, data) { |
try { |
- if (event == Debug.DebugEvent.Break) |
- { |
- if (!testConstructor) { |
- // The expected backtrace is |
- // 0: Call distance on Point where distance is a property on the prototype |
- // 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("[anonymous]()", exec_state.frame(3).invocationText()); |
- listenerCalled = true; |
- } else { |
- // 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("[anonymous]()", exec_state.frame(2).invocationText()); |
- listenerCalled = true; |
+ if (event == Debug.DebugEvent.Break) { |
+ if (what == 'constructor') { |
+ // The expected backtrace is |
+ // 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("[anonymous]()", exec_state.frame(3).invocationText()); |
+ listenerCalled = true; |
+ } 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("[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) { |
exception = 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") |