test_inlineScripts.html (2319B)
1 <!DOCTYPE html> 2 <html> 3 <meta charset=utf-8> 4 <title>Tests for nsIScriptError</title> 5 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 6 <div id="log"></div> 7 8 <!-- Verify that column is correct, even for inline scripts with HTML on the same line --> 9 <span>some html</span> <script>var inlineScriptStack = new Error().stack;</script> 10 <script> 11 function waitForError (expectedMessage){ 12 return new Promise(resolve => { 13 const listener = { 14 QueryInterface: ChromeUtils.generateQI(["nsIConsoleListener"]) 15 }; 16 17 listener.observe = function(message) { 18 if (message.message.includes(expectedMessage)) { 19 message.QueryInterface(Ci.nsIScriptError); 20 resolve(message); 21 Services.console.unregisterListener(listener); 22 } 23 }; 24 25 Services.console.registerListener(listener); 26 }); 27 } 28 29 var onInlineScriptError = waitForError("doThrow"); 30 var onModuleError = waitForError("doThrowInModule"); 31 SimpleTest.expectUncaughtException(); 32 </script> 33 <span>some more html</span><script>doThrow() // eslint-disable-line no-undef</script> 34 <script>var b;</script><hr><script type="module">SimpleTest.expectUncaughtException();doThrowInModule() // eslint-disable-line no-undef</script> 35 <script> 36 add_task(async () => { 37 info("Check line and column information in Error#stack"); 38 const { groups } = inlineScriptStack.match(/(?<line>\d+):(?<column>\d+)/); 39 is(groups.line, "9", "line of Error#stack in inline script is correct"); 40 is(groups.column, "58", "column of Error#stack in inline script is correct"); 41 42 info("Check line and column information Error message in inline script"); 43 const errorMessage = await onInlineScriptError; 44 is(errorMessage.lineNumber, 33, "The exception line is correct"); 45 is(errorMessage.columnNumber, 38, "The exception column is correct"); 46 47 info("Check line and column information Error message in inline module"); 48 const errorMessageInModule = await onModuleError; 49 is(errorMessageInModule.lineNumber, 34, "The module exception line is correct"); 50 is(errorMessageInModule.columnNumber, 89, "The module exception column is correct"); 51 }); 52 </script> 53 </html>