brace-location.js   [plain text]


load("./driver/driver.js");

function foo() {}
function bar() {}
function baz() {}

function testIf(x) {
    if (x < 10) { foo(); } else if (x < 20) { bar(); } else { baz() }
}
testIf(9);
// Note, the check will be against the basic block that contains the first matched character. 
// So in this following case, the block that contains the '{'.
checkBasicBlock(testIf, "{ foo", ShouldHaveExecuted);
// In this case, it will test the basic block that contains the ' ' character.
checkBasicBlock(testIf, " foo", ShouldHaveExecuted);
checkBasicBlock(testIf, "} else if", ShouldHaveExecuted);
checkBasicBlock(testIf, "else if", ShouldNotHaveExecuted);
checkBasicBlock(testIf, "{ bar", ShouldNotHaveExecuted);
checkBasicBlock(testIf, " bar", ShouldNotHaveExecuted);
checkBasicBlock(testIf, "else {", ShouldNotHaveExecuted);
checkBasicBlock(testIf, "{ baz", ShouldNotHaveExecuted);
checkBasicBlock(testIf, " baz", ShouldNotHaveExecuted);
testIf(21);
checkBasicBlock(testIf, "else if (x < 20)", ShouldHaveExecuted); 
checkBasicBlock(testIf, "{ bar", ShouldNotHaveExecuted); 
checkBasicBlock(testIf, " bar", ShouldNotHaveExecuted); 
checkBasicBlock(testIf, "else {", ShouldHaveExecuted); 
checkBasicBlock(testIf, "{ baz", ShouldHaveExecuted); 
checkBasicBlock(testIf, " baz", ShouldHaveExecuted); 
testIf(11);
checkBasicBlock(testIf, "{ bar", ShouldHaveExecuted); 
checkBasicBlock(testIf, " bar", ShouldHaveExecuted); 

function testForRegular(x) {
    for (var i = 0; i < x; i++) { foo(); } bar();
}
testForRegular(0);
checkBasicBlock(testForRegular, "{ foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForRegular, "} bar", ShouldNotHaveExecuted); 
checkBasicBlock(testForRegular, " bar", ShouldHaveExecuted); 
testForRegular(1);
checkBasicBlock(testForRegular, "{ foo", ShouldHaveExecuted); 
checkBasicBlock(testForRegular, "} bar", ShouldHaveExecuted); 

function testForIn(x) {
    for (var i in x) { foo(); } bar();
}
testForIn({});
checkBasicBlock(testForIn, "{ foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForIn, "} bar", ShouldNotHaveExecuted); 
checkBasicBlock(testForIn, " bar", ShouldHaveExecuted); 
testForIn({foo: 20});
checkBasicBlock(testForIn, "{ foo", ShouldHaveExecuted); 
checkBasicBlock(testForIn, "} bar", ShouldHaveExecuted); 

function testForOf(x) {
    for (var i of x) { foo(); } bar();
}
testForOf([]);
checkBasicBlock(testForOf, "{ foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForOf, " foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForOf, "} bar", ShouldNotHaveExecuted); 
checkBasicBlock(testForOf, " bar", ShouldHaveExecuted); 
testForOf([20]);
checkBasicBlock(testForOf, "{ foo", ShouldHaveExecuted); 
checkBasicBlock(testForOf, "} bar", ShouldHaveExecuted); 

function testWhile(x) {
    var i = 0; while (i++ < x) { foo(); } bar();
}
testWhile(0);
checkBasicBlock(testWhile, "{ foo", ShouldNotHaveExecuted); 
checkBasicBlock(testWhile, " foo", ShouldNotHaveExecuted); 
checkBasicBlock(testWhile, "} bar", ShouldNotHaveExecuted); 
checkBasicBlock(testWhile, " bar", ShouldHaveExecuted); 
testWhile(1);
checkBasicBlock(testWhile, "{ foo", ShouldHaveExecuted); 
checkBasicBlock(testWhile, "} bar", ShouldHaveExecuted); 


// No braces tests.

function testIfNoBraces(x) {
    if (x < 10) foo(); else if (x < 20) bar(); else baz();
}
testIfNoBraces(9);
checkBasicBlock(testIfNoBraces, "foo", ShouldHaveExecuted);
checkBasicBlock(testIfNoBraces, " foo", ShouldHaveExecuted);
checkBasicBlock(testIfNoBraces, "; else if", ShouldHaveExecuted);
checkBasicBlock(testIfNoBraces, " else if", ShouldNotHaveExecuted);
checkBasicBlock(testIfNoBraces, " bar", ShouldNotHaveExecuted); 
checkBasicBlock(testIfNoBraces, "bar", ShouldNotHaveExecuted); 
checkBasicBlock(testIfNoBraces, "else baz", ShouldNotHaveExecuted); 
checkBasicBlock(testIfNoBraces, "baz", ShouldNotHaveExecuted); 
testIfNoBraces(21);
checkBasicBlock(testIfNoBraces, "else baz", ShouldHaveExecuted); 
checkBasicBlock(testIfNoBraces, "baz", ShouldHaveExecuted); 
checkBasicBlock(testIfNoBraces, "; else baz", ShouldNotHaveExecuted); 
checkBasicBlock(testIfNoBraces, "else if (x < 20)", ShouldHaveExecuted);
// Note that the whitespace preceding bar is part of the previous basic block.
// An if statement's if-true basic block text offset begins at the start offset
// of the if-true block, in this case, just the expression "bar()".
checkBasicBlock(testIfNoBraces, " bar", ShouldHaveExecuted); 
checkBasicBlock(testIfNoBraces, "bar", ShouldNotHaveExecuted); 
testIfNoBraces(11);
checkBasicBlock(testIfNoBraces, " bar", ShouldHaveExecuted); 
checkBasicBlock(testIfNoBraces, "bar", ShouldHaveExecuted); 

function testForRegularNoBraces(x) {
    for (var i = 0; i < x; i++) foo(); bar();
}
testForRegularNoBraces(0);
checkBasicBlock(testForRegularNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testForRegularNoBraces, "foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForRegularNoBraces, "; bar", ShouldNotHaveExecuted); 
checkBasicBlock(testForRegularNoBraces, " bar", ShouldHaveExecuted); 
testForRegularNoBraces(1);
checkBasicBlock(testForRegularNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testForRegularNoBraces, "foo", ShouldHaveExecuted); 
checkBasicBlock(testForRegularNoBraces, " bar", ShouldHaveExecuted); 

function testForInNoBraces(x) {
    for (var i in x) foo(); bar();
}
testForInNoBraces({});
checkBasicBlock(testForInNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testForInNoBraces, "foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForInNoBraces, "; bar", ShouldNotHaveExecuted); 
checkBasicBlock(testForInNoBraces, " bar", ShouldHaveExecuted); 
testForInNoBraces({foo: 20});
checkBasicBlock(testForInNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testForInNoBraces, "foo", ShouldHaveExecuted); 
checkBasicBlock(testForInNoBraces, "; bar", ShouldHaveExecuted); 

function testForOfNoBraces(x) {
    for (var i of x) foo(); bar();
}
testForOfNoBraces([]);
checkBasicBlock(testForOfNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testForOfNoBraces, "foo", ShouldNotHaveExecuted); 
checkBasicBlock(testForOfNoBraces, "; bar", ShouldNotHaveExecuted); 
checkBasicBlock(testForOfNoBraces, " bar", ShouldHaveExecuted); 
testForOfNoBraces([20]);
checkBasicBlock(testForOfNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testForOfNoBraces, "foo", ShouldHaveExecuted); 
checkBasicBlock(testForOfNoBraces, "; bar", ShouldHaveExecuted); 

function testWhileNoBraces(x) {
    var i = 0; while (i++ < x) foo(); bar();
}
testWhileNoBraces(0);
checkBasicBlock(testWhileNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testWhileNoBraces, "foo", ShouldNotHaveExecuted); 
checkBasicBlock(testWhileNoBraces, "; bar", ShouldNotHaveExecuted); 
checkBasicBlock(testWhileNoBraces, " bar", ShouldHaveExecuted); 
testWhileNoBraces(1);
checkBasicBlock(testWhileNoBraces, " foo", ShouldHaveExecuted); 
checkBasicBlock(testWhileNoBraces, "foo", ShouldHaveExecuted); 
checkBasicBlock(testWhileNoBraces, "; bar", ShouldHaveExecuted);