Bug 1468754 Part 7: Add a test of ChangesActor server methods.
MozReview-Commit-ID: 6HQJmrB6qMV
--- a/devtools/server/tests/mochitest/chrome.ini
+++ b/devtools/server/tests/mochitest/chrome.ini
@@ -29,16 +29,17 @@ support-files =
small-image.gif
setup-in-child.js
setup-in-parent.js
webconsole-helpers.js
webextension-helpers.js
[test_animation_actor-lifetime.html]
[test_animation-type-longhand.html]
[test_changes-functions.html]
+[test_changes-stylesheets.html]
[test_connection-manager.html]
skip-if = (verify && debug && (os == 'win'))
[test_connectToFrame.html]
[test_css-logic.html]
[test_css-logic-media-queries.html]
[test_css-logic-specificity.html]
[test_css-properties.html]
[test_Debugger.Source.prototype.introductionScript.html]
new file mode 100644
--- /dev/null
+++ b/devtools/server/tests/mochitest/test_changes-stylesheets.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Test for Bug 1468758 - ChangesActor tracking of stylesheet changes</title>
+<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
+<script type="application/javascript" src="inspector-helpers.js"></script>
+<script type="application/javascript">
+"use strict";
+
+window.onload = function() {
+ SimpleTest.waitForExplicitFinish();
+ runNextTest();
+};
+
+let gChanges = null;
+let gWalker = null;
+let gStyles = null;
+
+addTest(function setup() {
+ const url = document.getElementById("changesContent").href;
+ attachURL(url, async function(err, client, tab, doc) {
+ const {InspectorFront} = require("devtools/shared/fronts/inspector");
+ const inspector = InspectorFront(client, tab);
+ gChanges = await inspector.getChanges();
+ gWalker = await inspector.getWalker();
+ gStyles = await inspector.getPageStyle();
+
+ runNextTest();
+ });
+});
+
+addAsyncTest(async function testInlineStyleModifyRule() {
+ const node = await gWalker.querySelector(gWalker.rootNode, "#first");
+ const applied = await gStyles.getApplied(node, { inherited: false, filter: "" });
+ ok(applied.length > 0, "Applied style should have at least one rule.");
+
+ const rule = applied[0].rule;
+ ok(!rule.parentStyleSheet, "Inline rule should not come from a stylesheet.");
+
+ await rule.setRuleText("color: yellow;");
+ is(await gChanges.changeCount(), 1, "After inline rule change, ChangesActor should have one change.");
+
+ await gChanges.clearChanges();
+ is(await gChanges.changeCount(), 0, "After inline rule clearChanges, ChangesActor should have zero changes.");
+
+ runNextTest();
+});
+
+addAsyncTest(async function testInlineStylesheetModifyRule() {
+ const node = await gWalker.querySelector(gWalker.rootNode, "#first");
+ const applied = await gStyles.getApplied(node, { inherited: false, filter: "" });
+ ok(applied.length > 1, "Applied style should have at least two rules.");
+
+ const rule = applied[1].rule;
+ ok(rule.parentStyleSheet, "Rule should come from a stylesheet.");
+
+ await rule.setRuleText("color: purple;");
+ is(await gChanges.changeCount(), 1, "After rule change, ChangesActor should have one change.");
+
+ await gChanges.popChange();
+ is(await gChanges.changeCount(), 0, "After rule popChange, ChangesActor should have zero changes.");
+
+ runNextTest();
+});
+
+addTest(function cleanup() {
+ gChanges = null;
+ gWalker = null;
+ gStyles = null;
+ runNextTest();
+});
+
+</script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1468754">Mozilla Bug 1468758</a>
+<a id="changesContent" target="_blank" href="changes-data.html">Test Document</a>
+<p id="display"></p>
+<div id="content" style="display: none"></div>
+<pre id="test">
+</pre>
+</body>
+</html>