| description('This test exercises the source URL and line number that is embedded in JavaScript exceptions, which is displayed in places like the JavaScript console.'); |
| |
| function exceptionInFunction() |
| { |
| throw new Error(); |
| } |
| |
| var e = undefined; |
| |
| try { |
| // Raises an exception that gets picked up by KJS_CHECKEXCEPTION |
| document.documentElement.innerHTML(foo); |
| } catch (exception) { |
| e = exception; |
| } |
| shouldBe("typeof e.sourceURL", '"string"'); |
| shouldBe("e.line", '12'); |
| |
| e = undefined; |
| try { |
| // Raises an exception that gets picked up by KJS_CHECKEXCEPTIONVALUE |
| document.documentElement.appendChild('').prefix = ''; |
| } catch (exception) { |
| e = exception; |
| } |
| shouldBe("typeof e.sourceURL", '"string"'); |
| shouldBe("e.line", '22'); |
| |
| e = undefined; |
| try { |
| // Raises an exception that gets picked up by KJS_CHECKEXCEPTIONREFERENCE |
| document.documentElement.appendChild('').innerHTML = ''; |
| } catch (exception) { |
| e = exception; |
| } |
| shouldBe("typeof e.sourceURL", '"string"'); |
| shouldBe("e.line", '32'); |
| |
| e = undefined; |
| try { |
| // Raises an exception that gets picked up by KJS_CHECKEXCEPTIONLIST |
| document.getElementById(1()); |
| } catch (exception) { |
| e = exception; |
| } |
| shouldBe("typeof e.sourceURL", '"string"'); |
| shouldBe("e.line", '42'); |
| |
| e = undefined; |
| // Raises an exception inside a function to check that its line number |
| // isn't overwritten in the assignment node. |
| try { |
| var a = exceptionInFunction(); |
| } catch (exception) { |
| e = exception; |
| } |
| shouldBe("typeof e.sourceURL", '"string"'); |
| shouldBe("e.line", '5'); |
| |
| realEval = eval; |
| delete eval; |
| (function(){ |
| try { |
| eval(""); |
| } catch(exception) { |
| e = exception; |
| } |
| })(); |
| eval = realEval; |
| shouldBe("typeof e.sourceURL", '"string"'); |
| shouldBe("e.line", '64'); |
| |
| var firstPropIsGetter = { |
| get getter() { throw new Error() } |
| }; |
| var secondPropIsGetter = { |
| prop: 1, |
| get getter() { throw new Error() } |
| }; |
| var firstPropIsSetter = { |
| set setter(a) { throw new Error() } |
| }; |
| var secondPropIsSetter = { |
| prop: 1, |
| set setter(a) { throw new Error() } |
| }; |
| |
| try { |
| firstPropIsGetter.getter; |
| } catch(ex) { |
| e = ex; |
| shouldBe("e.line", "74"); |
| } |
| |
| try { |
| secondPropIsGetter.getter; |
| } catch(ex) { |
| e = ex; |
| shouldBe("e.line", "78"); |
| } |
| |
| try { |
| firstPropIsSetter.setter = ''; |
| } catch(ex) { |
| e = ex; |
| shouldBe("e.line", "81"); |
| } |
| |
| try { |
| secondPropIsSetter.setter = ''; |
| } catch(ex) { |
| e = ex; |
| shouldBe("e.line", "85"); |
| } |