Bug 1429744: Relax a test of StyleRuleAdded events to allow for the possibility that style rules could arrive before import rules. draft
authorBrad Werth <bwerth@mozilla.com>
Fri, 12 Jan 2018 08:39:50 -0800
changeset 723211 f8b476ab6d4dfc90329421417fe6d20d18fd6883
parent 723064 3d23e6d98a09a3395bf2b0d9cb03dd4be358c715
child 746804 b5b3440055c489f2ebcc3ec1266e6f4b9c47f6b4
push id96367
push userbwerth@mozilla.com
push dateMon, 22 Jan 2018 19:06:55 +0000
bugs1429744
milestone60.0a1
Bug 1429744: Relax a test of StyleRuleAdded events to allow for the possibility that style rules could arrive before import rules. MozReview-Commit-ID: COIK852QzUm The test also verifies that when an import rule event arrives, that the rule has a loaded stylesheet.
layout/inspector/tests/chrome/test_parseStyleSheetObservers.html
--- a/layout/inspector/tests/chrome/test_parseStyleSheetObservers.html
+++ b/layout/inspector/tests/chrome/test_parseStyleSheetObservers.html
@@ -51,40 +51,39 @@ function test1Result() {
 
   document.removeEventListener("StyleRuleAdded", countingAddListener, listenerOptions);
   document.removeEventListener("StyleRuleRemoved", countingRemoveListener, listenerOptions);
 
   SimpleTest.executeSoon(test2Setup);
 }
 
 // Test 2: Import rules should be deferred until sheet is actually loaded.
-// We'll test this by parsing an import rule followed by style rule, then
-// ensuring that the event for the style rule lands first.
+// When the import rule lands, the associated sheet should be loaded.
 // This test is constructed with async functions so we can await an event that
 // might take awhile to arrive (but is guaranteed to arrive, per spec).
 let foundImport = false;
 let foundStyle = false;
 let styleFirstAddProcessor = function(event) {
   info("styleFirstAddProcessor: called with event "+ event.rule.cssText);
   if (event.rule.type == CSSRule.IMPORT_RULE) {
     foundImport = true;
+    isnot(event.rule.styleSheet, null, "Test 2: import rule has stylesheet loaded.");
   } else if (event.rule.type == CSSRule.STYLE_RULE) {
     foundStyle = true;
-    is(foundImport, false, "Test 2: The style rule arrived before the import rule.");
   }
-  return foundImport;
+  return foundImport && foundStyle;
 };
 
 async function test2Setup() {
   info("test2Setup: called");
 
-  // Create a Promise to watch for two StyleRuleAdded events. The first invocation should
-  // be the style rule, and the second should be the import rule. We use the same processor
+  // Create a Promise to watch for two StyleRuleAdded events. The first invocation will
+  // likely be the style rule, though this is not guaranteed. We use the same processor
   // for both events, but the processor will only return true (completing the Promise) when
-  // the import rule has been processed.
+  // both rules have been processed.
   let gotAllStyleRuleAddedEvents = ContentTaskUtils.waitForEvent(document,
     "StyleRuleAdded", true, styleFirstAddProcessor);
 
   InspectorUtils.parseStyleSheet(sheet, "@import url('imported_no_op.css'); p {color: purple;}");
   is(sheet.cssRules.length, 2, "Test 2: Stylesheet now has 2 rules.");
 
   // Await and then process the events we expect to arrive.
   await gotAllStyleRuleAddedEvents;