blob: f9bd1e149639c59defae703fa18b2f2b85f1c888 [file] [log] [blame]
var BUGNUMBER = 819125;
var summary = "try block should return try value if finally returned normally";
print(BUGNUMBER + ": " + summary);
function expectTryValue(code, isUndefined) {
assertEq(eval(code), isUndefined ? undefined : 'try');
}
function expectCatchValue(code, isUndefined) {
assertEq(eval(code), isUndefined ? undefined : 'catch');
}
function expectFinallyValue(code, isUndefined) {
assertEq(eval(code), isUndefined ? undefined : 'finally');
}
// ==== finally: normal ====
// try: normal
// finally: normal
expectTryValue(`
try {
'try';
} finally {
'finally';
}
`);
// try: normal without value
// finally: normal
expectTryValue(`
try {
} finally {
'finally';
}
`, true);
// try: break
// finally: normal
expectTryValue(`
while (true) {
try {
'try';
break;
} finally {
'finally';
}
}
`);
// try: break without value
// finally: normal
expectTryValue(`
while (true) {
try {
break;
} finally {
'finally';
}
}
`, true);
// try: continue
// finally: normal
expectTryValue(`
do {
try {
'try';
continue;
} finally {
'finally';
}
} while (false);
`);
// try: continue without value
// finally: normal
expectTryValue(`
do {
try {
continue;
} finally {
'finally';
}
} while (false);
`, true);
// try: throw
// catch: normal
// finally: normal
expectCatchValue(`
try {
'try';
throw 'exception';
} catch (e) {
'catch';
} finally {
'finally';
}
`);
// try: throw
// catch: normal
// finally: normal
expectCatchValue(`
try {
'try';
throw 'exception';
} catch (e) {
'catch';
} finally {
'finally';
}
`);
// try: throw
// catch: normal without value
// finally: normal
expectCatchValue(`
try {
'try';
throw 'exception';
} catch (e) {
} finally {
'finally';
}
`, true);
// try: throw
// catch: normal without value
// finally: normal
expectCatchValue(`
try {
'try';
throw 'exception';
} catch (e) {
} finally {
'finally';
}
`, true);
// try: throw
// catch: break
// finally: normal
expectCatchValue(`
while (true) {
try {
'try';
throw 'exception';
} catch (e) {
'catch';
break;
} finally {
'finally';
}
}
`);
// try: throw
// catch: break without value
// finally: normal
expectCatchValue(`
while (true) {
try {
'try';
throw 'exception';
} catch (e) {
break;
} finally {
'finally';
}
}
`, true);
// try: throw
// catch: continue
// finally: normal
expectCatchValue(`
do {
try {
'try';
throw 'exception';
} catch (e) {
'catch';
continue;
} finally {
'finally';
}
} while (false);
`);
// try: throw
// catch: continue without value
// finally: normal
expectCatchValue(`
do {
try {
'try';
throw 'exception';
} catch (e) {
continue;
} finally {
'finally';
}
} while (false);
`, true);
// ==== finally: break ====
// try: normal
// finally: break
expectFinallyValue(`
while (true) {
try {
'try';
} finally {
'finally';
break;
}
}
`);
// try: normal
// finally: break without value
expectFinallyValue(`
while (true) {
try {
'try';
} finally {
break;
}
}
`, true);
// try: break
// finally: break
expectFinallyValue(`
while (true) {
try {
'try';
break;
} finally {
'finally';
break;
}
}
`);
// try: break
// finally: break without value
expectFinallyValue(`
while (true) {
try {
'try';
break;
} finally {
break;
}
}
`, true);
// try: continue
// finally: break
expectFinallyValue(`
do {
try {
'try';
continue;
} finally {
'finally';
break;
}
} while (false);
`);
// try: continue
// finally: break without value
expectFinallyValue(`
do {
try {
'try';
continue;
} finally {
break;
}
} while (false);
`, true);
// try: throw
// catch: normal
// finally: break
expectFinallyValue(`
while (true) {
try {
'try';
throw 'exception';
} catch (e) {
'catch';
} finally {
'finally';
break;
}
}
`, false);
// try: throw
// catch: normal
// finally: break without value
expectFinallyValue(`
while (true) {
try {
'try';
throw 'exception';
} catch (e) {
'catch';
} finally {
break;
}
}
`, true);
// ==== finally: continue ====
// try: normal
// finally: continue
expectFinallyValue(`
do {
try {
'try';
} finally {
'finally';
continue;
}
} while (false);
`);
// try: normal
// finally: continue without value
expectFinallyValue(`
do {
try {
'try';
} finally {
continue;
}
} while (false);
`, true);
// try: break
// finally: continue
expectFinallyValue(`
do {
try {
'try';
break;
} finally {
'finally';
continue;
}
} while (false);
`);
// try: break
// finally: continue without value
expectFinallyValue(`
do {
try {
'try';
break;
} finally {
continue;
}
} while (false);
`, true);
// try: continue
// finally: continue
expectFinallyValue(`
do {
try {
'try';
continue;
} finally {
'finally';
continue;
}
} while (false);
`);
// try: continue
// finally: continue without value
expectFinallyValue(`
do {
try {
'try';
continue;
} finally {
continue;
}
} while (false);
`, true);
// ==== without finally ====
// try: throw
// catch: normal
expectCatchValue(`
try {
'try';
throw 'exception';
} catch (e) {
'catch';
}
`);
// try: throw
// catch: normal without value
expectCatchValue(`
try {
'try';
throw 'exception';
} catch (e) {
}
`, true);
// try: throw
// catch: break
expectCatchValue(`
while (true) {
try {
'try';
throw 'exception';
} catch (e) {
'catch';
break;
}
}
`);
// try: throw
// catch: break without value
expectCatchValue(`
while (true) {
try {
'try';
throw 'exception';
} catch (e) {
break;
}
}
`, true);
// try: throw
// catch: continue
expectCatchValue(`
do {
try {
'try';
throw 'exception';
} catch (e) {
'catch';
continue;
}
} while (false);
`);
// try: throw
// catch: continue without value
expectCatchValue(`
do {
try {
'try';
throw 'exception';
} catch (e) {
continue;
}
} while (false);
`, true);
if (typeof reportCompare === "function")
reportCompare(true, true);