Checking pause locations when stepping in, out, and over statements with function calls.


== Running test suite: Debugger.stepping.functionCalls
-- Running test case: Debugger.stepping.MultipleStatementsOnOneLine1
EXPRESSION: setTimeout(entryMultipleStatementsOnOneLine)
STEPS: over, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryMultipleStatementsOnOneLine:20:5
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {
 ->  19        |debugger;
     20        a(); b();
     21    }
     22

ACTION: step-over
PAUSE AT entryMultipleStatementsOnOneLine:21:5
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;
 ->  20        |a(); b();
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryMultipleStatementsOnOneLine:21:10
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;
 ->  20        a(); |b();
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-out
PAUSE AT entryMultipleStatementsOnOneLine:22:2
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;
     20        a(); b();
 ->  21    }|
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleStatementsOnOneLine2
EXPRESSION: setTimeout(entryMultipleStatementsOnOneLine)
STEPS: over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryMultipleStatementsOnOneLine:20:5
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {
 ->  19        |debugger;
     20        a(); b();
     21    }
     22

ACTION: step-over
PAUSE AT entryMultipleStatementsOnOneLine:21:5
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;
 ->  20        |a(); b();
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {

ACTION: step-over
PAUSE AT entryMultipleStatementsOnOneLine:21:10
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;
 ->  20        a(); |b();
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {

ACTION: step-over
PAUSE AT entryMultipleStatementsOnOneLine:22:2
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;
     20        a(); b();
 ->  21    }|
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleCallsInOneStatement1
EXPRESSION: setTimeout(entryMultipleCallsInOneStatement)
STEPS: over, in, out, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryMultipleCallsInOneStatement:25:5
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {
 ->  24        |debugger;
     25        add(a(), b());
     26    }
     27

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryMultipleCallsInOneStatement:26:14
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        add(a(), |b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-out
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT add:8:5
      4    <script src="../resources/log-pause-location.js"></script>
      5    <script>
      6    function add(a, b) {
 ->   7        |return a + b;
      8    }
      9
     10    function a() {

ACTION: step-out
PAUSE AT entryMultipleCallsInOneStatement:27:2
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
     25        add(a(), b());
 ->  26    }|
     27
     28    function entryMultilineStatement() {
     29        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleCallsInOneStatement2
EXPRESSION: setTimeout(entryMultipleCallsInOneStatement)
STEPS: over, in, out, over, resume
PAUSED (debugger-statement)
PAUSE AT entryMultipleCallsInOneStatement:25:5
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {
 ->  24        |debugger;
     25        add(a(), b());
     26    }
     27

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryMultipleCallsInOneStatement:26:14
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        add(a(), |b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:27:2
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
     25        add(a(), b());
 ->  26    }|
     27
     28    function entryMultilineStatement() {
     29        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleCallsInOneStatement3
EXPRESSION: setTimeout(entryMultipleCallsInOneStatement)
STEPS: over, in, in, in, in, in, in, in, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryMultipleCallsInOneStatement:25:5
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {
 ->  24        |debugger;
     25        add(a(), b());
     26    }
     27

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-in
PAUSE AT a:13:2
      9
     10    function a() {
     11        return 1;
 ->  12    }|
     13
     14    function b() {
     15        return 2;

ACTION: step-in
PAUSE AT entryMultipleCallsInOneStatement:26:14
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        add(a(), |b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-in
PAUSE AT b:17:2
     13
     14    function b() {
     15        return 2;
 ->  16    }|
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;

ACTION: step-in
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT add:8:5
      4    <script src="../resources/log-pause-location.js"></script>
      5    <script>
      6    function add(a, b) {
 ->   7        |return a + b;
      8    }
      9
     10    function a() {

ACTION: step-in
PAUSE AT add:9:2
      5    <script>
      6    function add(a, b) {
      7        return a + b;
 ->   8    }|
      9
     10    function a() {
     11        return 1;

ACTION: step-in
PAUSE AT entryMultipleCallsInOneStatement:27:2
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
     25        add(a(), b());
 ->  26    }|
     27
     28    function entryMultilineStatement() {
     29        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleCallsInOneStatement4
EXPRESSION: setTimeout(entryMultipleCallsInOneStatement)
STEPS: over, in, over, over, in, over, over, in, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryMultipleCallsInOneStatement:25:5
     21    }
     22
     23    function entryMultipleCallsInOneStatement() {
 ->  24        |debugger;
     25        add(a(), b());
     26    }
     27

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-over
PAUSE AT a:13:2
      9
     10    function a() {
     11        return 1;
 ->  12    }|
     13
     14    function b() {
     15        return 2;

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:26:14
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        add(a(), |b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-over
PAUSE AT b:17:2
     13
     14    function b() {
     15        return 2;
 ->  16    }|
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:26:5
     22
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
 ->  25        |add(a(), b());
     26    }
     27
     28    function entryMultilineStatement() {

ACTION: step-in
PAUSE AT add:8:5
      4    <script src="../resources/log-pause-location.js"></script>
      5    <script>
      6    function add(a, b) {
 ->   7        |return a + b;
      8    }
      9
     10    function a() {

ACTION: step-over
PAUSE AT add:9:2
      5    <script>
      6    function add(a, b) {
      7        return a + b;
 ->   8    }|
      9
     10    function a() {
     11        return 1;

ACTION: step-over
PAUSE AT entryMultipleCallsInOneStatement:27:2
     23    function entryMultipleCallsInOneStatement() {
     24        debugger;
     25        add(a(), b());
 ->  26    }|
     27
     28    function entryMultilineStatement() {
     29        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleCallsInOneStatement5
EXPRESSION: setTimeout(entryMultilineStatement)
STEPS: over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryMultilineStatement:30:5
     26    }
     27
     28    function entryMultilineStatement() {
 ->  29        |debugger;
     30        add(
     31            a()
     32            ,

ACTION: step-over
PAUSE AT entryMultilineStatement:31:5
     27
     28    function entryMultilineStatement() {
     29        debugger;
 ->  30        |add(
     31            a()
     32            ,
     33            b()

ACTION: step-over
PAUSE AT entryMultilineStatement:36:2
     32            ,
     33            b()
     34        );
 ->  35    }|
     36
     37    function entryComplexLine() {
     38        var x;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.MultipleCallsInOneStatement6
EXPRESSION: setTimeout(entryMultilineStatement)
STEPS: over, in, out, over, resume
PAUSED (debugger-statement)
PAUSE AT entryMultilineStatement:30:5
     26    }
     27
     28    function entryMultilineStatement() {
 ->  29        |debugger;
     30        add(
     31            a()
     32            ,

ACTION: step-over
PAUSE AT entryMultilineStatement:31:5
     27
     28    function entryMultilineStatement() {
     29        debugger;
 ->  30        |add(
     31            a()
     32            ,
     33            b()

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryMultilineStatement:34:9
     30        add(
     31            a()
     32            ,
 ->  33            |b()
     34        );
     35    }
     36

ACTION: step-over
PAUSE AT entryMultilineStatement:36:2
     32            ,
     33            b()
     34        );
 ->  35    }|
     36
     37    function entryComplexLine() {
     38        var x;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ComplexLine1
EXPRESSION: setTimeout(entryComplexLine)
STEPS: over, in, out, in, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryComplexLine:40:5
     36
     37    function entryComplexLine() {
     38        var x;
 ->  39        |debugger;
     40        a(); x = 1; b();
     41    }
     42

ACTION: step-over
PAUSE AT entryComplexLine:41:5
     37    function entryComplexLine() {
     38        var x;
     39        debugger;
 ->  40        |a(); x = 1; b();
     41    }
     42
     43    function entryComplexStatement() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryComplexLine:41:10
     37    function entryComplexLine() {
     38        var x;
     39        debugger;
 ->  40        a(); |x = 1; b();
     41    }
     42
     43    function entryComplexStatement() {

ACTION: step-in
PAUSE AT entryComplexLine:41:17
     37    function entryComplexLine() {
     38        var x;
     39        debugger;
 ->  40        a(); x = 1; |b();
     41    }
     42
     43    function entryComplexStatement() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-out
PAUSE AT entryComplexLine:42:2
     38        var x;
     39        debugger;
     40        a(); x = 1; b();
 ->  41    }|
     42
     43    function entryComplexStatement() {
     44        var x;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ComplexLine2
EXPRESSION: setTimeout(entryComplexLine)
STEPS: over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryComplexLine:40:5
     36
     37    function entryComplexLine() {
     38        var x;
 ->  39        |debugger;
     40        a(); x = 1; b();
     41    }
     42

ACTION: step-over
PAUSE AT entryComplexLine:41:5
     37    function entryComplexLine() {
     38        var x;
     39        debugger;
 ->  40        |a(); x = 1; b();
     41    }
     42
     43    function entryComplexStatement() {

ACTION: step-over
PAUSE AT entryComplexLine:41:10
     37    function entryComplexLine() {
     38        var x;
     39        debugger;
 ->  40        a(); |x = 1; b();
     41    }
     42
     43    function entryComplexStatement() {

ACTION: step-over
PAUSE AT entryComplexLine:41:17
     37    function entryComplexLine() {
     38        var x;
     39        debugger;
 ->  40        a(); x = 1; |b();
     41    }
     42
     43    function entryComplexStatement() {

ACTION: step-over
PAUSE AT entryComplexLine:42:2
     38        var x;
     39        debugger;
     40        a(); x = 1; b();
 ->  41    }|
     42
     43    function entryComplexStatement() {
     44        var x;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ComplexStatement1
EXPRESSION: setTimeout(entryComplexStatement)
STEPS: over, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryComplexStatement:46:5
     42
     43    function entryComplexStatement() {
     44        var x;
 ->  45        |debugger;
     46        add(a(), x = 1, b());
     47    }
     48

ACTION: step-over
PAUSE AT entryComplexStatement:47:5
     43    function entryComplexStatement() {
     44        var x;
     45        debugger;
 ->  46        |add(a(), x = 1, b());
     47    }
     48
     49    function entryCommaExpression() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryComplexStatement:47:21
     43    function entryComplexStatement() {
     44        var x;
     45        debugger;
 ->  46        add(a(), x = 1, |b());
     47    }
     48
     49    function entryCommaExpression() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-out
PAUSE AT entryComplexStatement:47:5
     43    function entryComplexStatement() {
     44        var x;
     45        debugger;
 ->  46        |add(a(), x = 1, b());
     47    }
     48
     49    function entryCommaExpression() {

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ComplexStatement2
EXPRESSION: setTimeout(entryCommaExpression)
STEPS: over, in, out, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryCommaExpression:51:5
     47    }
     48
     49    function entryCommaExpression() {
 ->  50        |debugger;
     51        a(), b(), a();
     52    }
     53

ACTION: step-over
PAUSE AT entryCommaExpression:52:5
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        |a(), b(), a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryCommaExpression:52:10
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        a(), |b(), a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-out
PAUSE AT entryCommaExpression:52:15
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        a(), b(), |a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryCommaExpression:53:2
     49    function entryCommaExpression() {
     50        debugger;
     51        a(), b(), a();
 ->  52    }|
     53
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ComplexStatement3
EXPRESSION: setTimeout(entryCommaExpression)
STEPS: over, in, in, in, in, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryCommaExpression:51:5
     47    }
     48
     49    function entryCommaExpression() {
 ->  50        |debugger;
     51        a(), b(), a();
     52    }
     53

ACTION: step-over
PAUSE AT entryCommaExpression:52:5
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        |a(), b(), a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-in
PAUSE AT a:13:2
      9
     10    function a() {
     11        return 1;
 ->  12    }|
     13
     14    function b() {
     15        return 2;

ACTION: step-in
PAUSE AT entryCommaExpression:52:10
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        a(), |b(), a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-in
PAUSE AT b:16:5
     12    }
     13
     14    function b() {
 ->  15        |return 2;
     16    }
     17
     18    function entryMultipleStatementsOnOneLine() {

ACTION: step-over
PAUSE AT b:17:2
     13
     14    function b() {
     15        return 2;
 ->  16    }|
     17
     18    function entryMultipleStatementsOnOneLine() {
     19        debugger;

ACTION: step-over
PAUSE AT entryCommaExpression:52:15
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        a(), b(), |a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-over
PAUSE AT entryCommaExpression:53:2
     49    function entryCommaExpression() {
     50        debugger;
     51        a(), b(), a();
 ->  52    }|
     53
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ComplexStatement4
EXPRESSION: setTimeout(entryCommaExpression)
STEPS: over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryCommaExpression:51:5
     47    }
     48
     49    function entryCommaExpression() {
 ->  50        |debugger;
     51        a(), b(), a();
     52    }
     53

ACTION: step-over
PAUSE AT entryCommaExpression:52:5
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        |a(), b(), a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-over
PAUSE AT entryCommaExpression:52:10
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        a(), |b(), a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-over
PAUSE AT entryCommaExpression:52:15
     48
     49    function entryCommaExpression() {
     50        debugger;
 ->  51        a(), b(), |a();
     52    }
     53
     54    function entryDotPropertyAccessCall() {

ACTION: step-over
PAUSE AT entryCommaExpression:53:2
     49    function entryCommaExpression() {
     50        debugger;
     51        a(), b(), a();
 ->  52    }|
     53
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.DotPropertyAccessCallStepIn
EXPRESSION: setTimeout(entryDotPropertyAccessCall)
STEPS: over, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryDotPropertyAccessCall:57:5
     53
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};
 ->  56        |debugger;
     57        o.x.x.a();
     58    }
     59

ACTION: step-over
PAUSE AT entryDotPropertyAccessCall:58:5
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};
     56        debugger;
 ->  57        |o.x.x.a();
     58    }
     59
     60    function entryBracketPropertyAccessCall() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryDotPropertyAccessCall:59:2
     55        var o = {x:{x:{a}}};
     56        debugger;
     57        o.x.x.a();
 ->  58    }|
     59
     60    function entryBracketPropertyAccessCall() {
     61        var o = {x:{x:{a}}};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.DotPropertyAccessCallStepOver
EXPRESSION: setTimeout(entryDotPropertyAccessCall)
STEPS: over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryDotPropertyAccessCall:57:5
     53
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};
 ->  56        |debugger;
     57        o.x.x.a();
     58    }
     59

ACTION: step-over
PAUSE AT entryDotPropertyAccessCall:58:5
     54    function entryDotPropertyAccessCall() {
     55        var o = {x:{x:{a}}};
     56        debugger;
 ->  57        |o.x.x.a();
     58    }
     59
     60    function entryBracketPropertyAccessCall() {

ACTION: step-over
PAUSE AT entryDotPropertyAccessCall:59:2
     55        var o = {x:{x:{a}}};
     56        debugger;
     57        o.x.x.a();
 ->  58    }|
     59
     60    function entryBracketPropertyAccessCall() {
     61        var o = {x:{x:{a}}};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.BracketPropertyAccessCallStepIn
EXPRESSION: setTimeout(entryBracketPropertyAccessCall)
STEPS: over, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryBracketPropertyAccessCall:63:5
     59
     60    function entryBracketPropertyAccessCall() {
     61        var o = {x:{x:{a}}};
 ->  62        |debugger;
     63        o['x']['x']['a']();
     64    }
     65

ACTION: step-over
PAUSE AT entryBracketPropertyAccessCall:64:5
     60    function entryBracketPropertyAccessCall() {
     61        var o = {x:{x:{a}}};
     62        debugger;
 ->  63        |o['x']['x']['a']();
     64    }
     65
     66    function entryUseCall() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryBracketPropertyAccessCall:65:2
     61        var o = {x:{x:{a}}};
     62        debugger;
     63        o['x']['x']['a']();
 ->  64    }|
     65
     66    function entryUseCall() {
     67        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.FunctionPrototypeCallStepIn
EXPRESSION: setTimeout(entryUseCall)
STEPS: over, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryUseCall:68:5
     64    }
     65
     66    function entryUseCall() {
 ->  67        |debugger;
     68        add.call(null, 1, 2);
     69    }
     70

ACTION: step-over
PAUSE AT entryUseCall:69:5
     65
     66    function entryUseCall() {
     67        debugger;
 ->  68        |add.call(null, 1, 2);
     69    }
     70
     71    function entryUseApply() {

ACTION: step-in
PAUSE AT add:8:5
      4    <script src="../resources/log-pause-location.js"></script>
      5    <script>
      6    function add(a, b) {
 ->   7        |return a + b;
      8    }
      9
     10    function a() {

ACTION: step-out
PAUSE AT entryUseCall:70:2
     66    function entryUseCall() {
     67        debugger;
     68        add.call(null, 1, 2);
 ->  69    }|
     70
     71    function entryUseApply() {
     72        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.FunctionPrototypeApplyStepIn
EXPRESSION: setTimeout(entryUseApply)
STEPS: over, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryUseApply:73:5
     69    }
     70
     71    function entryUseApply() {
 ->  72        |debugger;
     73        a.apply(null, [1, 2]);
     74    }
     75

ACTION: step-over
PAUSE AT entryUseApply:74:5
     70
     71    function entryUseApply() {
     72        debugger;
 ->  73        |a.apply(null, [1, 2]);
     74    }
     75
     76    function entryAnonymousFunctionInvocation() {

ACTION: step-in
PAUSE AT a:12:5
      8    }
      9
     10    function a() {
 ->  11        |return 1;
     12    }
     13
     14    function b() {

ACTION: step-out
PAUSE AT entryUseApply:75:2
     71    function entryUseApply() {
     72        debugger;
     73        a.apply(null, [1, 2]);
 ->  74    }|
     75
     76    function entryAnonymousFunctionInvocation() {
     77        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.AnonymousFunctionInvocationStepOver
EXPRESSION: setTimeout(entryAnonymousFunctionInvocation)
STEPS: over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryAnonymousFunctionInvocation:78:5
     74    }
     75
     76    function entryAnonymousFunctionInvocation() {
 ->  77        |debugger;
     78        (function() {
     79            a();
     80        })();

ACTION: step-over
PAUSE AT entryAnonymousFunctionInvocation:79:5
     75
     76    function entryAnonymousFunctionInvocation() {
     77        debugger;
 ->  78        |(function() {
     79            a();
     80        })();
     81    }

ACTION: step-over
PAUSE AT entryAnonymousFunctionInvocation:82:2
     78        (function() {
     79            a();
     80        })();
 ->  81    }|
     82
     83    function entryFunctionWithConditionalReturn() {
     84        function testCondition(condition) {

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.AnonymousFunctionInvocationStepOver
EXPRESSION: setTimeout(entryAnonymousFunctionInvocation)
STEPS: over, in, over, in, resume
PAUSED (debugger-statement)
PAUSE AT entryAnonymousFunctionInvocation:78:5
     74    }
     75
     76    function entryAnonymousFunctionInvocation() {
 ->  77        |debugger;
     78        (function() {
     79            a();
     80        })();

ACTION: step-over
PAUSE AT entryAnonymousFunctionInvocation:79:5
     75
     76    function entryAnonymousFunctionInvocation() {
     77        debugger;
 ->  78        |(function() {
     79            a();
     80        })();
     81    }

ACTION: step-in
PAUSE AT <anonymous>:80:9
     76    function entryAnonymousFunctionInvocation() {
     77        debugger;
     78        (function() {
 ->  79            |a();
     80        })();
     81    }
     82

ACTION: step-over
PAUSE AT <anonymous>:81:6
     77        debugger;
     78        (function() {
     79            a();
 ->  80        }|)();
     81    }
     82
     83    function entryFunctionWithConditionalReturn() {

ACTION: step-in
PAUSE AT entryAnonymousFunctionInvocation:82:2
     78        (function() {
     79            a();
     80        })();
 ->  81    }|
     82
     83    function entryFunctionWithConditionalReturn() {
     84        function testCondition(condition) {

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.FunctionWithConditionalReturn
EXPRESSION: setTimeout(entryFunctionWithConditionalReturn)
STEPS: over, in, in, in, in, in, in, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryFunctionWithConditionalReturn:90:5
     86                return true;
     87            return false;
     88        }
 ->  89        |debugger;
     90        testCondition(true);
     91        testCondition(false);
     92    }

ACTION: step-over
PAUSE AT entryFunctionWithConditionalReturn:91:5
     87            return false;
     88        }
     89        debugger;
 ->  90        |testCondition(true);
     91        testCondition(false);
     92    }
     93

ACTION: step-in
PAUSE AT testCondition:86:13
     82
     83    function entryFunctionWithConditionalReturn() {
     84        function testCondition(condition) {
 ->  85            if (|condition)
     86                return true;
     87            return false;
     88        }

ACTION: step-in
PAUSE AT testCondition:87:13
     83    function entryFunctionWithConditionalReturn() {
     84        function testCondition(condition) {
     85            if (condition)
 ->  86                |return true;
     87            return false;
     88        }
     89        debugger;

ACTION: step-in
PAUSE AT testCondition:89:6
     85            if (condition)
     86                return true;
     87            return false;
 ->  88        }|
     89        debugger;
     90        testCondition(true);
     91        testCondition(false);

ACTION: step-in
PAUSE AT entryFunctionWithConditionalReturn:92:5
     88        }
     89        debugger;
     90        testCondition(true);
 ->  91        |testCondition(false);
     92    }
     93
     94    function entryEmptyFunction() {

ACTION: step-in
PAUSE AT testCondition:86:13
     82
     83    function entryFunctionWithConditionalReturn() {
     84        function testCondition(condition) {
 ->  85            if (|condition)
     86                return true;
     87            return false;
     88        }

ACTION: step-in
PAUSE AT testCondition:88:9
     84        function testCondition(condition) {
     85            if (condition)
     86                return true;
 ->  87            |return false;
     88        }
     89        debugger;
     90        testCondition(true);

ACTION: step-in
PAUSE AT testCondition:89:6
     85            if (condition)
     86                return true;
     87            return false;
 ->  88        }|
     89        debugger;
     90        testCondition(true);
     91        testCondition(false);

ACTION: step-in
PAUSE AT entryFunctionWithConditionalReturn:93:2
     89        debugger;
     90        testCondition(true);
     91        testCondition(false);
 ->  92    }|
     93
     94    function entryEmptyFunction() {
     95        function emptyFunction() { }

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.EmptyFunction
EXPRESSION: setTimeout(entryEmptyFunction)
STEPS: over, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryEmptyFunction:97:5
     93
     94    function entryEmptyFunction() {
     95        function emptyFunction() { }
 ->  96        |debugger;
     97        emptyFunction();
     98    }
     99

ACTION: step-over
PAUSE AT entryEmptyFunction:98:5
     94    function entryEmptyFunction() {
     95        function emptyFunction() { }
     96        debugger;
 ->  97        |emptyFunction();
     98    }
     99
    100    // ---------

ACTION: step-in
PAUSE AT emptyFunction:96:33
     92    }
     93
     94    function entryEmptyFunction() {
 ->  95        function emptyFunction() { }|
     96        debugger;
     97        emptyFunction();
     98    }

ACTION: step-in
PAUSE AT entryEmptyFunction:99:2
     95        function emptyFunction() { }
     96        debugger;
     97        emptyFunction();
 ->  98    }|
     99
    100    // ---------
    101

ACTION: resume
RESUMED
PASS: Should have used all steps.

