Checking pause locations when stepping in, out, and over functions with default parameter expressions.


== Running test suite: Debugger.stepping.function-default-parameters
-- Running test case: Debugger.stepping.DefaultParameterExpression
EXPRESSION: setTimeout(entryDefaultParameterExpression)
STEPS: over, in, out, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryDefaultParameterExpression:19:5
     15        function add(a=1, b=2) {
     16            return a + b;
     17        }
 ->  18        |debugger;
     19        add();
     20        add(1);
     21        add(1, 2);

ACTION: step-over
PAUSE AT entryDefaultParameterExpression:20:5
     16            return a + b;
     17        }
     18        debugger;
 ->  19        |add();
     20        add(1);
     21        add(1, 2);
     22    }

ACTION: step-in
PAUSE AT add:17:9
     13
     14    function entryDefaultParameterExpression() {
     15        function add(a=1, b=2) {
 ->  16            |return a + b;
     17        }
     18        debugger;
     19        add();

ACTION: step-out
PAUSE AT entryDefaultParameterExpression:21:5
     17        }
     18        debugger;
     19        add();
 ->  20        |add(1);
     21        add(1, 2);
     22    }
     23

ACTION: step-in
PAUSE AT add:17:9
     13
     14    function entryDefaultParameterExpression() {
     15        function add(a=1, b=2) {
 ->  16            |return a + b;
     17        }
     18        debugger;
     19        add();

ACTION: step-out
PAUSE AT entryDefaultParameterExpression:22:5
     18        debugger;
     19        add();
     20        add(1);
 ->  21        |add(1, 2);
     22    }
     23
     24    function entryDefaultParameterCallExpression() {

ACTION: step-in
PAUSE AT add:17:9
     13
     14    function entryDefaultParameterExpression() {
     15        function add(a=1, b=2) {
 ->  16            |return a + b;
     17        }
     18        debugger;
     19        add();

ACTION: step-out
PAUSE AT entryDefaultParameterExpression:23:2
     19        add();
     20        add(1);
     21        add(1, 2);
 ->  22    }|
     23
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {

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

-- Running test case: Debugger.stepping.DefaultParameterCallExpression
EXPRESSION: setTimeout(entryDefaultParameterCallExpression)
STEPS: over, in, in, out, in, out, out, in, in, out, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryDefaultParameterCallExpression:29:5
     25        function add(x=a(), y=b()) {
     26            return x + y;
     27        }
 ->  28        |debugger;
     29        add();
     30        add(1);
     31        add(1, 2);

ACTION: step-over
PAUSE AT entryDefaultParameterCallExpression:30:5
     26            return x + y;
     27        }
     28        debugger;
 ->  29        |add();
     30        add(1);
     31        add(1, 2);
     32    }

ACTION: step-in
PAUSE AT add:26:20
     22    }
     23
     24    function entryDefaultParameterCallExpression() {
 ->  25        function add(x=|a(), y=b()) {
     26            return x + y;
     27        }
     28        debugger;

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

ACTION: step-out
PAUSE AT add:26:27
     22    }
     23
     24    function entryDefaultParameterCallExpression() {
 ->  25        function add(x=a(), y=|b()) {
     26            return x + y;
     27        }
     28        debugger;

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

ACTION: step-out
PAUSE AT add:27:9
     23
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {
 ->  26            |return x + y;
     27        }
     28        debugger;
     29        add();

ACTION: step-out
PAUSE AT entryDefaultParameterCallExpression:31:5
     27        }
     28        debugger;
     29        add();
 ->  30        |add(1);
     31        add(1, 2);
     32    }
     33

ACTION: step-in
PAUSE AT add:26:27
     22    }
     23
     24    function entryDefaultParameterCallExpression() {
 ->  25        function add(x=a(), y=|b()) {
     26            return x + y;
     27        }
     28        debugger;

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

ACTION: step-out
PAUSE AT add:27:9
     23
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {
 ->  26            |return x + y;
     27        }
     28        debugger;
     29        add();

ACTION: step-out
PAUSE AT entryDefaultParameterCallExpression:32:5
     28        debugger;
     29        add();
     30        add(1);
 ->  31        |add(1, 2);
     32    }
     33
     34    // ---------

ACTION: step-in
PAUSE AT add:27:9
     23
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {
 ->  26            |return x + y;
     27        }
     28        debugger;
     29        add();

ACTION: step-out
PAUSE AT entryDefaultParameterCallExpression:33:2
     29        add();
     30        add(1);
     31        add(1, 2);
 ->  32    }|
     33
     34    // ---------
     35

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

