| 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); |