summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html')
-rw-r--r--devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html181
1 files changed, 181 insertions, 0 deletions
diff --git a/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html b/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html
new file mode 100644
index 000000000..c0066659c
--- /dev/null
+++ b/devtools/server/tests/mochitest/test_Debugger.Source.prototype.introductionType.html
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=935203
+
+Debugger.Source.prototype.introductionType should return 'eventHandler' for
+JavaScrip appearing in an inline event handler attribute.
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Debugger.Source.prototype.introductionType should identify event handlers</title>
+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
+ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
+</head>
+<body>
+<pre id="test">
+<script>
+
+Components.utils.import("resource://gre/modules/jsdebugger.jsm");
+addDebuggerToGlobal(this);
+
+var dbg;
+var iframeDO, doc;
+var Tootles, TootlesDO;
+
+window.onload = function () {
+ SimpleTest.waitForExplicitFinish();
+ runNextTest();
+};
+
+addTest(function setup() {
+ // Create an iframe to debug.
+ var iframe = document.createElement("iframe");
+ iframe.src = "data:text/html," +
+ "<div id='Tootles' onclick='debugger;'>I'm a DIV!</div>" +
+ "<script id='Auddie'>function auddie() { debugger; }<\/script>";
+ iframe.onload = onLoadHandler;
+ document.body.appendChild(iframe);
+
+ function onLoadHandler() {
+ // Now that the iframe's window has been created, we can add
+ // it as a debuggee.
+ dbg = new Debugger;
+ iframeDO = dbg.addDebuggee(iframe.contentWindow);
+ doc = iframe.contentWindow.document;
+ Tootles = doc.getElementById('Tootles');
+ TootlesDO = iframeDO.makeDebuggeeValue(Tootles);
+
+ runNextTest();
+ }
+});
+
+
+// Check the introduction type of in-markup event handler code.
+// Send a click event to Tootles, whose handler has a 'debugger' statement,
+// and check that script's introduction type.
+addTest(function ClickOnTootles() {
+ dbg.onDebuggerStatement = TootlesClickDebugger;
+ Tootles.dispatchEvent(new Event('click'));
+
+ function TootlesClickDebugger(frame) {
+ // some sanity checks
+ ok(frame.script.source.element === TootlesDO,
+ "top frame source belongs to element 'Tootles'");
+ is(frame.script.source.elementAttributeName, 'onclick',
+ "top frame source belongs to 'onclick' attribute");
+
+ // And, the actual point of this test:
+ is(frame.script.source.introductionType, 'eventHandler',
+ "top frame source's introductionType is 'eventHandler'");
+
+ runNextTest();
+ }
+});
+
+
+// Check the introduction type of dynamically added event handler code.
+// Add a drag event handler to Tootles as a string, and then send
+// Tootles a drag event.
+addTest(function DragTootles() {
+ dbg.onDebuggerStatement = TootlesDragDebugger;
+ Tootles.setAttribute('ondrag', 'debugger;');
+ Tootles.dispatchEvent(new Event('drag'));
+
+ function TootlesDragDebugger(frame) {
+ // sanity checks
+ ok(frame.script.source.element === TootlesDO,
+ "top frame source belongs to element 'Tootles'");
+ is(frame.script.source.elementAttributeName, 'ondrag',
+ "top frame source belongs to 'ondrag' attribute");
+
+ // And, the actual point of this test:
+ is(frame.script.source.introductionType, 'eventHandler',
+ "top frame source's introductionType is 'eventHandler'");
+
+ runNextTest();
+ }
+});
+
+
+// Check the introduction type of an in-markup script element.
+addTest(function checkAuddie() {
+ var fnDO = iframeDO.getOwnPropertyDescriptor('auddie').value;
+ var AuddieDO = iframeDO.makeDebuggeeValue(doc.getElementById('Auddie'));
+
+ is(fnDO.class, 'Function',
+ "Script element 'Auddie' defined function 'auddie'.");
+ ok(fnDO.script.source.element === AuddieDO,
+ "Function auddie's script belongs to script element 'Auddie'");
+ is(fnDO.script.source.elementAttributeName, undefined,
+ "Function auddie's script doesn't belong to any attribute of 'Auddie'");
+ is(fnDO.script.source.introductionType, 'scriptElement',
+ "Function auddie's script's source was introduced by a script element");
+
+ runNextTest();
+});
+
+
+// Check the introduction type of a dynamically inserted script element.
+addTest(function InsertRover() {
+ dbg.onDebuggerStatement = RoverDebugger;
+ var rover = doc.createElement('script');
+ var roverDO = iframeDO.makeDebuggeeValue(rover);
+ rover.text = 'debugger;';
+ doc.body.appendChild(rover);
+
+ function RoverDebugger(frame) {
+ // sanity checks
+ ok(frame.script.source.element === roverDO,
+ "Rover script belongs to Rover");
+ ok(frame.script.source.elementAttributeName === undefined,
+ "Rover script doesn't belong to an attribute of Rover");
+
+ // Check the introduction type.
+ ok(frame.script.source.introductionType === 'scriptElement',
+ "Rover script's introduction type is 'scriptElement'");
+
+ runNextTest();
+ }
+});
+
+
+// Create a XUL document with a script element, and check its introduction type.
+addTest(function XULDocumentScript() {
+ var xulFrame = document.createElement('iframe');
+ xulFrame.src = "data:application/vnd.mozilla.xul+xml;charset=utf-8," +
+ "<?xml version=\"1.0\"?>" +
+ "<window xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul'>" +
+ "<script id='xulie'>function xulScriptFunc() { debugger; }<\/script>" +
+ "</window>";
+ xulFrame.onload = xulLoaded;
+ info("Appending iframe containing XUL document");
+ document.body.appendChild(xulFrame);
+
+ function xulLoaded() {
+ info("Loaded XUL document");
+ var xulFrameDO = dbg.addDebuggee(xulFrame.contentWindow);
+ var xulDoc = xulFrame.contentWindow.document;
+ var xulieDO = xulFrameDO.makeDebuggeeValue(xulDoc.getElementById('xulie'));
+ var xulFnDO = xulFrameDO.getOwnPropertyDescriptor('xulScriptFunc').value;
+ is(typeof xulFnDO, 'object', "XUL script element defined 'xulScriptFunc'");
+ is(xulFnDO.class, 'Function',
+ "XUL global 'xulScriptFunc' is indeed a function");
+
+ // A XUL document's script elements' code gets shared amongst all
+ // instantiations of the document, so there's no specific DOM element
+ // we can attribute the code to.
+ is(xulFnDO.script.source.element, undefined,
+ "XUL script code should not be attributed to any individual element");
+
+ is(xulFnDO.script.source.introductionType, 'scriptElement',
+ "xulScriptFunc's introduction type is 'scriptElement'");
+ runNextTest();
+ }
+});
+
+</script>
+</pre>
+</body>
+</html>