Checking pause locations when stepping in, out, and over if/else control flow.


== Running test suite: Debugger.stepping.control-flow
-- Running test case: Debugger.stepping.IfSingleStatement
EXPRESSION: setTimeout(entryIfSingleStatement)
STEPS: over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfSingleStatement:16:5
     12    
     13    
     14    function entryIfSingleStatement() {
 ->  15        |debugger;
     16        if (truthy)
     17            a();
     18        if (falsey)

ACTION: step-over
PAUSE AT entryIfSingleStatement:17:9
     13    
     14    function entryIfSingleStatement() {
     15        debugger;
 ->  16        if (|truthy)
     17            a();
     18        if (falsey)
     19            a();

ACTION: step-over
PAUSE AT entryIfSingleStatement:18:9
     14    function entryIfSingleStatement() {
     15        debugger;
     16        if (truthy)
 ->  17            |a();
     18        if (falsey)
     19            a();
     20    }

ACTION: step-over
PAUSE AT entryIfSingleStatement:19:9
     15        debugger;
     16        if (truthy)
     17            a();
 ->  18        if (|falsey)
     19            a();
     20    }
     21    

ACTION: step-over
PAUSE AT entryIfSingleStatement:21:2
     17            a();
     18        if (falsey)
     19            a();
 ->  20    }|
     21    
     22    function entryIfMultiStatement() {
     23        debugger;

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

-- Running test case: Debugger.stepping.IfMultiStatement
EXPRESSION: setTimeout(entryIfMultiStatement)
STEPS: over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfMultiStatement:24:5
     20    }
     21    
     22    function entryIfMultiStatement() {
 ->  23        |debugger;
     24        if (truthy) {
     25            a();
     26            a();

ACTION: step-over
PAUSE AT entryIfMultiStatement:25:9
     21    
     22    function entryIfMultiStatement() {
     23        debugger;
 ->  24        if (|truthy) {
     25            a();
     26            a();
     27        }

ACTION: step-over
PAUSE AT entryIfMultiStatement:26:9
     22    function entryIfMultiStatement() {
     23        debugger;
     24        if (truthy) {
 ->  25            |a();
     26            a();
     27        }
     28        if (falsey) {

ACTION: step-over
PAUSE AT entryIfMultiStatement:27:9
     23        debugger;
     24        if (truthy) {
     25            a();
 ->  26            |a();
     27        }
     28        if (falsey) {
     29            a();

ACTION: step-over
PAUSE AT entryIfMultiStatement:29:9
     25            a();
     26            a();
     27        }
 ->  28        if (|falsey) {
     29            a();
     30            a();
     31        }

ACTION: step-over
PAUSE AT entryIfMultiStatement:33:2
     29            a();
     30            a();
     31        }
 ->  32    }|
     33    
     34    function entryIfElse() {
     35        debugger;

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

-- Running test case: Debugger.stepping.IfElse1
EXPRESSION: setTimeout(entryIfElse)
STEPS: over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfElse:36:5
     32    }
     33    
     34    function entryIfElse() {
 ->  35        |debugger;
     36        if (truthy)
     37            a();
     38        else

ACTION: step-over
PAUSE AT entryIfElse:37:9
     33    
     34    function entryIfElse() {
     35        debugger;
 ->  36        if (|truthy)
     37            a();
     38        else
     39            a();

ACTION: step-over
PAUSE AT entryIfElse:38:9
     34    function entryIfElse() {
     35        debugger;
     36        if (truthy)
 ->  37            |a();
     38        else
     39            a();
     40        if (falsey)

ACTION: step-over
PAUSE AT entryIfElse:41:9
     37            a();
     38        else
     39            a();
 ->  40        if (|falsey)
     41            a();
     42        else
     43            a();

ACTION: step-over
PAUSE AT entryIfElse:44:9
     40        if (falsey)
     41            a();
     42        else
 ->  43            |a();
     44    }
     45    
     46    function entryIfElseChain() {

ACTION: step-over
PAUSE AT entryIfElse:45:2
     41            a();
     42        else
     43            a();
 ->  44    }|
     45    
     46    function entryIfElseChain() {
     47        debugger;

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

-- Running test case: Debugger.stepping.IfElse2
EXPRESSION: setTimeout(entryIfElseChain)
STEPS: over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfElseChain:48:5
     44    }
     45    
     46    function entryIfElseChain() {
 ->  47        |debugger;
     48        if (falsey)
     49            a();
     50        else if (truthy)

ACTION: step-over
PAUSE AT entryIfElseChain:49:9
     45    
     46    function entryIfElseChain() {
     47        debugger;
 ->  48        if (|falsey)
     49            a();
     50        else if (truthy)
     51            a();

ACTION: step-over
PAUSE AT entryIfElseChain:51:14
     47        debugger;
     48        if (falsey)
     49            a();
 ->  50        else if (|truthy)
     51            a();
     52        else
     53            a();

ACTION: step-over
PAUSE AT entryIfElseChain:52:9
     48        if (falsey)
     49            a();
     50        else if (truthy)
 ->  51            |a();
     52        else
     53            a();
     54    

ACTION: step-over
PAUSE AT entryIfElseChain:56:9
     52        else
     53            a();
     54    
 ->  55        if (|falsey)
     56            a();
     57        else if (falsey)
     58            a();

ACTION: step-over
PAUSE AT entryIfElseChain:58:14
     54    
     55        if (falsey)
     56            a();
 ->  57        else if (|falsey)
     58            a();
     59        else
     60            a();

ACTION: step-over
PAUSE AT entryIfElseChain:61:9
     57        else if (falsey)
     58            a();
     59        else
 ->  60            |a();
     61    }
     62    
     63    function entryIfWithCall() {

ACTION: step-over
PAUSE AT entryIfElseChain:62:2
     58            a();
     59        else
     60            a();
 ->  61    }|
     62    
     63    function entryIfWithCall() {
     64        debugger;

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

-- Running test case: Debugger.stepping.IfWithCall1
EXPRESSION: setTimeout(entryIfWithCall)
STEPS: over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfWithCall:65:5
     61    }
     62    
     63    function entryIfWithCall() {
 ->  64        |debugger;
     65        if (a() && a())
     66            a();
     67    }

ACTION: step-over
PAUSE AT entryIfWithCall:66:9
     62    
     63    function entryIfWithCall() {
     64        debugger;
 ->  65        if (|a() && a())
     66            a();
     67    }
     68    

ACTION: step-over
PAUSE AT entryIfWithCall:67:9
     63    function entryIfWithCall() {
     64        debugger;
     65        if (a() && a())
 ->  66            |a();
     67    }
     68    
     69    function entryTernary() {

ACTION: step-over
PAUSE AT entryIfWithCall:68:2
     64        debugger;
     65        if (a() && a())
     66            a();
 ->  67    }|
     68    
     69    function entryTernary() {
     70        let t = () => truthy;

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

-- Running test case: Debugger.stepping.IfWithCall2
EXPRESSION: setTimeout(entryIfWithCall)
STEPS: over, in, out, in, out, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfWithCall:65:5
     61    }
     62    
     63    function entryIfWithCall() {
 ->  64        |debugger;
     65        if (a() && a())
     66            a();
     67    }

ACTION: step-over
PAUSE AT entryIfWithCall:66:9
     62    
     63    function entryIfWithCall() {
     64        debugger;
 ->  65        if (|a() && a())
     66            a();
     67    }
     68    

ACTION: step-in
PAUSE AT a:11:16
      7    var value = 1;
      8    var truthy = true;
      9    var falsey = false;
 ->  10    function a() { |return value; }
     11    function b() { return value; }
     12    
     13    

ACTION: step-out
PAUSE AT entryIfWithCall:66:16
     62    
     63    function entryIfWithCall() {
     64        debugger;
 ->  65        if (a() && |a())
     66            a();
     67    }
     68    

ACTION: step-in
PAUSE AT a:11:16
      7    var value = 1;
      8    var truthy = true;
      9    var falsey = false;
 ->  10    function a() { |return value; }
     11    function b() { return value; }
     12    
     13    

ACTION: step-out
PAUSE AT entryIfWithCall:67:9
     63    function entryIfWithCall() {
     64        debugger;
     65        if (a() && a())
 ->  66            |a();
     67    }
     68    
     69    function entryTernary() {

ACTION: step-over
PAUSE AT entryIfWithCall:68:2
     64        debugger;
     65        if (a() && a())
     66            a();
 ->  67    }|
     68    
     69    function entryTernary() {
     70        let t = () => truthy;

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

-- Running test case: Debugger.stepping.TernaryStepOver
EXPRESSION: setTimeout(entryTernary)
STEPS: over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryTernary:73:5
     69    function entryTernary() {
     70        let t = () => truthy;
     71        let f = () => falsey;
 ->  72        |debugger;
     73        let x = t() ? a() : b();
     74        let y = f() ? a() : b();
     75    }

ACTION: step-over
PAUSE AT entryTernary:74:5
     70        let t = () => truthy;
     71        let f = () => falsey;
     72        debugger;
 ->  73        |let x = t() ? a() : b();
     74        let y = f() ? a() : b();
     75    }
     76    

ACTION: step-over
PAUSE AT entryTernary:75:5
     71        let f = () => falsey;
     72        debugger;
     73        let x = t() ? a() : b();
 ->  74        |let y = f() ? a() : b();
     75    }
     76    
     77    function entryIfConstantBranch() {

ACTION: step-over
PAUSE AT entryTernary:76:2
     72        debugger;
     73        let x = t() ? a() : b();
     74        let y = f() ? a() : b();
 ->  75    }|
     76    
     77    function entryIfConstantBranch() {
     78        debugger;

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

-- Running test case: Debugger.stepping.TernaryStepIn
EXPRESSION: setTimeout(entryTernary)
STEPS: over, in, out, in, out, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryTernary:73:5
     69    function entryTernary() {
     70        let t = () => truthy;
     71        let f = () => falsey;
 ->  72        |debugger;
     73        let x = t() ? a() : b();
     74        let y = f() ? a() : b();
     75    }

ACTION: step-over
PAUSE AT entryTernary:74:5
     70        let t = () => truthy;
     71        let f = () => falsey;
     72        debugger;
 ->  73        |let x = t() ? a() : b();
     74        let y = f() ? a() : b();
     75    }
     76    

ACTION: step-in
PAUSE AT t:71:19
     67    }
     68    
     69    function entryTernary() {
 ->  70        let t = () => |truthy;
     71        let f = () => falsey;
     72        debugger;
     73        let x = t() ? a() : b();

ACTION: step-out
PAUSE AT entryTernary:74:19
     70        let t = () => truthy;
     71        let f = () => falsey;
     72        debugger;
 ->  73        let x = t() ? |a() : b();
     74        let y = f() ? a() : b();
     75    }
     76    

ACTION: step-in
PAUSE AT a:11:16
      7    var value = 1;
      8    var truthy = true;
      9    var falsey = false;
 ->  10    function a() { |return value; }
     11    function b() { return value; }
     12    
     13    

ACTION: step-out
PAUSE AT entryTernary:75:5
     71        let f = () => falsey;
     72        debugger;
     73        let x = t() ? a() : b();
 ->  74        |let y = f() ? a() : b();
     75    }
     76    
     77    function entryIfConstantBranch() {

ACTION: step-in
PAUSE AT f:72:19
     68    
     69    function entryTernary() {
     70        let t = () => truthy;
 ->  71        let f = () => |falsey;
     72        debugger;
     73        let x = t() ? a() : b();
     74        let y = f() ? a() : b();

ACTION: step-out
PAUSE AT entryTernary:75:25
     71        let f = () => falsey;
     72        debugger;
     73        let x = t() ? a() : b();
 ->  74        let y = f() ? a() : |b();
     75    }
     76    
     77    function entryIfConstantBranch() {

ACTION: step-in
PAUSE AT b:12:16
      8    var truthy = true;
      9    var falsey = false;
     10    function a() { return value; }
 ->  11    function b() { |return value; }
     12    
     13    
     14    function entryIfSingleStatement() {

ACTION: step-out
PAUSE AT entryTernary:76:2
     72        debugger;
     73        let x = t() ? a() : b();
     74        let y = f() ? a() : b();
 ->  75    }|
     76    
     77    function entryIfConstantBranch() {
     78        debugger;

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

-- Running test case: Debugger.stepping.ConstantBranch
EXPRESSION: setTimeout(entryIfConstantBranch)
STEPS: over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfConstantBranch:79:5
     75    }
     76    
     77    function entryIfConstantBranch() {
 ->  78        |debugger;
     79        if (true)
     80            a();
     81        if (false)

ACTION: step-over
PAUSE AT entryIfConstantBranch:80:9
     76    
     77    function entryIfConstantBranch() {
     78        debugger;
 ->  79        if (|true)
     80            a();
     81        if (false)
     82            a();

ACTION: step-over
PAUSE AT entryIfConstantBranch:81:9
     77    function entryIfConstantBranch() {
     78        debugger;
     79        if (true)
 ->  80            |a();
     81        if (false)
     82            a();
     83        if (0)

ACTION: step-over
PAUSE AT entryIfConstantBranch:82:9
     78        debugger;
     79        if (true)
     80            a();
 ->  81        if (|false)
     82            a();
     83        if (0)
     84            a();

ACTION: step-over
PAUSE AT entryIfConstantBranch:84:9
     80            a();
     81        if (false)
     82            a();
 ->  83        if (|0)
     84            a();
     85        if (null)
     86            a();

ACTION: step-over
PAUSE AT entryIfConstantBranch:86:9
     82            a();
     83        if (0)
     84            a();
 ->  85        if (|null)
     86            a();
     87    }
     88    

ACTION: step-over
PAUSE AT entryIfConstantBranch:88:2
     84            a();
     85        if (null)
     86            a();
 ->  87    }|
     88    
     89    function entryIfWithLogicalOperation() {
     90        debugger;

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

-- Running test case: Debugger.stepping.IfWithLogicalOperation
EXPRESSION: setTimeout(entryIfWithLogicalOperation)
STEPS: over, in, out, in, out, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfWithLogicalOperation:91:5
     87    }
     88    
     89    function entryIfWithLogicalOperation() {
 ->  90        |debugger;
     91        if (true && a() && a())
     92            b();
     93    }

ACTION: step-over
PAUSE AT entryIfWithLogicalOperation:92:9
     88    
     89    function entryIfWithLogicalOperation() {
     90        debugger;
 ->  91        if (|true && a() && a())
     92            b();
     93    }
     94    

ACTION: step-in
PAUSE AT a:11:16
      7    var value = 1;
      8    var truthy = true;
      9    var falsey = false;
 ->  10    function a() { |return value; }
     11    function b() { return value; }
     12    
     13    

ACTION: step-out
PAUSE AT entryIfWithLogicalOperation:92:24
     88    
     89    function entryIfWithLogicalOperation() {
     90        debugger;
 ->  91        if (true && a() && |a())
     92            b();
     93    }
     94    

ACTION: step-in
PAUSE AT a:11:16
      7    var value = 1;
      8    var truthy = true;
      9    var falsey = false;
 ->  10    function a() { |return value; }
     11    function b() { return value; }
     12    
     13    

ACTION: step-out
PAUSE AT entryIfWithLogicalOperation:93:9
     89    function entryIfWithLogicalOperation() {
     90        debugger;
     91        if (true && a() && a())
 ->  92            |b();
     93    }
     94    
     95    function entryIfWithBinaryOperation() {

ACTION: step-over
PAUSE AT entryIfWithLogicalOperation:94:2
     90        debugger;
     91        if (true && a() && a())
     92            b();
 ->  93    }|
     94    
     95    function entryIfWithBinaryOperation() {
     96        let i = a();

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

-- Running test case: Debugger.stepping.IfWithBinaryOperation
EXPRESSION: setTimeout(entryIfWithBinaryOperation)
STEPS: over, in, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfWithBinaryOperation:98:5
     94    
     95    function entryIfWithBinaryOperation() {
     96        let i = a();
 ->  97        |debugger;
     98        if (i < 2)
     99            b();
    100    }

ACTION: step-over
PAUSE AT entryIfWithBinaryOperation:99:9
     95    function entryIfWithBinaryOperation() {
     96        let i = a();
     97        debugger;
 ->  98        if (|i < 2)
     99            b();
    100    }
    101    

ACTION: step-in
PAUSE AT entryIfWithBinaryOperation:100:9
     96        let i = a();
     97        debugger;
     98        if (i < 2)
 ->  99            |b();
    100    }
    101    
    102    function entryIfWithNotOperation() {

ACTION: step-over
PAUSE AT entryIfWithBinaryOperation:101:2
     97        debugger;
     98        if (i < 2)
     99            b();
 -> 100    }|
    101    
    102    function entryIfWithNotOperation() {
    103        debugger;

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

-- Running test case: Debugger.stepping.IfWithNotOperation
EXPRESSION: setTimeout(entryIfWithNotOperation)
STEPS: over, in, over, in, over, resume
PAUSED (debugger-statement)
PAUSE AT entryIfWithNotOperation:104:5
    100    }
    101    
    102    function entryIfWithNotOperation() {
 -> 103        |debugger;
    104        if (!false)
    105            a();
    106        if (!!true)

ACTION: step-over
PAUSE AT entryIfWithNotOperation:105:9
    101    
    102    function entryIfWithNotOperation() {
    103        debugger;
 -> 104        if (|!false)
    105            a();
    106        if (!!true)
    107            a();

ACTION: step-in
PAUSE AT entryIfWithNotOperation:106:9
    102    function entryIfWithNotOperation() {
    103        debugger;
    104        if (!false)
 -> 105            |a();
    106        if (!!true)
    107            a();
    108    }

ACTION: step-over
PAUSE AT entryIfWithNotOperation:107:9
    103        debugger;
    104        if (!false)
    105            a();
 -> 106        if (|!!true)
    107            a();
    108    }
    109    

ACTION: step-in
PAUSE AT entryIfWithNotOperation:108:9
    104        if (!false)
    105            a();
    106        if (!!true)
 -> 107            |a();
    108    }
    109    
    110    // ---------

ACTION: step-over
PAUSE AT entryIfWithNotOperation:109:2
    105            a();
    106        if (!!true)
    107            a();
 -> 108    }|
    109    
    110    // ---------
    111    

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

