blob: 8663cb8e8d2f73aba9b0fac01cf85bf143fa5e9d [file] [log] [blame]
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);