Bug 1445807 - Remove unsafe CPOWs in Source Editor tests draft
authorOriol Brufau <oriol-bugzilla@hotmail.com>
Tue, 20 Mar 2018 21:52:13 +0100
changeset 770245 969e1b8f2fa36f07f7c27a68b7870dc5fac0230c
parent 769320 4f1014eb5039bdfdd7a39fb7785d102df1994a6f
push id103363
push userbmo:oriol-bugzilla@hotmail.com
push dateTue, 20 Mar 2018 22:31:24 +0000
bugs1445807
milestone61.0a1
Bug 1445807 - Remove unsafe CPOWs in Source Editor tests MozReview-Commit-ID: 8OaDw0HSTx
devtools/client/sourceeditor/test/browser.ini
devtools/client/sourceeditor/test/browser_css_autocompletion.js
devtools/client/sourceeditor/test/browser_css_getInfo.js
devtools/client/sourceeditor/test/browser_css_statemachine.js
--- a/devtools/client/sourceeditor/test/browser.ini
+++ b/devtools/client/sourceeditor/test/browser.ini
@@ -36,17 +36,14 @@ support-files =
 [browser_editor_history.js]
 [browser_editor_markers.js]
 [browser_editor_movelines.js]
 [browser_editor_prefs.js]
 [browser_editor_script_injection.js]
 [browser_editor_addons.js]
 [browser_codemirror.js]
 [browser_css_autocompletion.js]
-uses-unsafe-cpows = true
 [browser_css_getInfo.js]
-uses-unsafe-cpows = true
 [browser_css_statemachine.js]
-uses-unsafe-cpows = true
 [browser_detectindent.js]
 [browser_vimemacs.js]
 skip-if = os == 'linux'&&debug # bug 981707
 
--- a/devtools/client/sourceeditor/test/browser_css_autocompletion.js
+++ b/devtools/client/sourceeditor/test/browser_css_autocompletion.js
@@ -65,83 +65,76 @@ const TEST_URI = "data:text/html;charset
    /* eslint-enable max-len */
    "  <button class='category-name visible'></button>",
    "  <div class='devtools-toolbarbutton' label='true'>",
    "   <hbox class='toolbarbutton-menubutton-button'></hbox></div>",
    " </body>",
    " </html>"
   ].join("\n"));
 
-let doc = null;
+let browser;
 let index = 0;
 let completer = null;
-let progress;
-let progressDiv;
 let inspector;
 
-function test() {
-  waitForExplicitFinish();
-  addTab(TEST_URI).then(function() {
-    doc = gBrowser.contentDocumentAsCPOW;
-    runTests();
-  });
+add_task(async function test() {
+  let tab = await addTab(TEST_URI);
+  browser = tab.linkedBrowser;
+  await runTests();
+  browser = null;
+  gBrowser.removeCurrentTab();
+});
+
+async function runTests() {
+  let target = TargetFactory.forTab(gBrowser.selectedTab);
+  await target.makeRemote();
+  inspector = InspectorFront(target.client, target.form);
+  let walker = await inspector.getWalker();
+  completer = new CSSCompleter({walker: walker,
+                                cssProperties: getClientCssProperties()});
+  await checkStateAndMoveOn();
+  await completer.walker.release();
+  inspector.destroy();
+  inspector = null;
+  completer = null;
 }
 
-function runTests() {
-  progress = doc.getElementById("progress");
-  progressDiv = doc.querySelector("#progress > div");
-  let target = TargetFactory.forTab(gBrowser.selectedTab);
-  target.makeRemote().then(() => {
-    inspector = InspectorFront(target.client, target.form);
-    inspector.getWalker().then(walker => {
-      completer = new CSSCompleter({walker: walker,
-                                    cssProperties: getClientCssProperties()});
-      checkStateAndMoveOn();
-    });
-  });
-}
-
-function checkStateAndMoveOn() {
+async function checkStateAndMoveOn() {
   if (index == tests.length) {
-    finishUp();
     return;
   }
 
   let [lineCh, expectedSuggestions] = tests[index];
   let [line, ch] = lineCh;
 
-  progress.dataset.progress = ++index;
-  progressDiv.style.width = 100 * index / tests.length + "%";
+  ++index;
+  await ContentTask.spawn(browser, [index, tests.length], function([idx, len]) {
+    let progress = content.document.getElementById("progress");
+    let progressDiv = content.document.querySelector("#progress > div");
+    progress.dataset.progress = idx;
+    progressDiv.style.width = 100 * idx / len + "%";
+  });
 
-  completer.complete(limit(source, lineCh), {line, ch})
-           .then(actualSuggestions => checkState(expectedSuggestions, actualSuggestions))
-           .then(checkStateAndMoveOn);
+  let actualSuggestions = await completer.complete(limit(source, lineCh), {line, ch});
+  await checkState(expectedSuggestions, actualSuggestions);
+  await checkStateAndMoveOn();
 }
 
-function checkState(expected, actual) {
+async function checkState(expected, actual) {
   if (expected.length != actual.length) {
     ok(false, "Number of suggestions did not match up for state " + index +
               ". Expected: " + expected.length + ", Actual: " + actual.length);
-    progress.classList.add("failed");
+    await ContentTask.spawn(browser, null, function() {
+      let progress = content.document.getElementById("progress");
+      progress.classList.add("failed");
+    });
     return;
   }
 
   for (let i = 0; i < actual.length; i++) {
     if (expected[i] != actual[i].label) {
       ok(false, "Suggestion " + i + " of state " + index + " did not match up" +
                  ". Expected: " + expected[i] + ". Actual: " + actual[i].label);
       return;
     }
   }
   ok(true, "Test " + index + " passed. ");
 }
-
-function finishUp() {
-  completer.walker.release().then(() => {
-    inspector.destroy();
-    inspector = null;
-    completer = null;
-    gBrowser.removeCurrentTab();
-    finish();
-  });
-  progress = null;
-  progressDiv = null;
-}
--- a/devtools/client/sourceeditor/test/browser_css_getInfo.js
+++ b/devtools/client/sourceeditor/test/browser_css_getInfo.js
@@ -118,28 +118,20 @@ const TEST_URI = "data:text/html;charset
    "  <h2>State machine tests for CSS autocompleter.</h2><br>",
    "  <div id='progress' data-progress='0'>",
    "   <div></div>",
    "  </div>",
    " </body>",
    " </html>"
   ].join("\n"));
 
-let doc = null;
-function test() {
-  waitForExplicitFinish();
-  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser);
-  BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
-    doc = gBrowser.contentDocumentAsCPOW;
-    runTests();
-  });
-  gBrowser.loadURI(TEST_URI);
-}
+add_task(async function test() {
+  let tab = await addTab(TEST_URI);
+  let browser = tab.linkedBrowser;
 
-function runTests() {
   let completer = new CSSCompleter({
     cssProperties: getClientCssProperties()
   });
   let matches = (arr, toCheck) => !arr.some((x, i) => x != toCheck[i]);
   let checkState = (expected, actual) => {
     if (expected[0] == "null" && actual == null) {
       return true;
     } else if (expected[0] == actual.state && expected[0] == "selector" &&
@@ -153,29 +145,34 @@ function runTests() {
                matches(expected[1], actual.selectors) &&
                expected[2] == actual.propertyName &&
                expected[3] == actual.value) {
       return true;
     }
     return false;
   };
 
-  let progress = doc.getElementById("progress");
-  let progressDiv = doc.querySelector("#progress > div");
   let i = 0;
   for (let expected of tests) {
+    ++i;
     let caret = expected.splice(0, 1)[0];
-    progress.dataset.progress = ++i;
-    progressDiv.style.width = 100 * i / tests.length + "%";
+    await ContentTask.spawn(browser, [i, tests.length], function([idx, len]) {
+      let progress = content.document.getElementById("progress");
+      let progressDiv = content.document.querySelector("#progress > div");
+      progress.dataset.progress = idx;
+      progressDiv.style.width = 100 * idx / len + "%";
+    });
     let actual = completer.getInfoAt(source, caret);
     if (checkState(expected, actual)) {
       ok(true, "Test " + i + " passed. ");
     } else {
       ok(false, "Test " + i + " failed. Expected state : [" + expected + "] " +
          "but found [" + actual.state + ", " +
          (actual.selector || actual.selectors) + ", " +
          actual.propertyName + ", " + actual.value + "].");
-      progress.classList.add("failed");
+      await ContentTask.spawn(browser, null, function() {
+        let progress = content.document.getElementById("progress");
+        progress.classList.add("failed");
+      });
     }
   }
   gBrowser.removeCurrentTab();
-  finish();
-}
+});
--- a/devtools/client/sourceeditor/test/browser_css_statemachine.js
+++ b/devtools/client/sourceeditor/test/browser_css_statemachine.js
@@ -49,27 +49,20 @@ const TEST_URI = "data:text/html;charset
    "  <h2>State machine tests for CSS autocompleter.</h2><br>",
    "  <div id='progress' data-progress='0'>",
    "   <div></div>",
    "  </div>",
    " </body>",
    " </html>"
   ].join("\n"));
 
-var doc = null;
-function test() {
-  waitForExplicitFinish();
-  gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, TEST_URI);
-  BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => {
-    doc = gBrowser.contentDocumentAsCPOW;
-    runTests();
-  });
-}
+add_task(async function test() {
+  let tab = await addTab(TEST_URI);
+  let browser = tab.linkedBrowser;
 
-function runTests() {
   let completer = new CSSCompleter({
     cssProperties: getClientCssProperties()
   });
   let checkState = state => {
     if (state[0] == "null" && (!completer.state || completer.state == "null")) {
       return true;
     } else if (state[0] == completer.state && state[0] == "selector" &&
                state[1] == completer.selectorState &&
@@ -83,29 +76,34 @@ function runTests() {
     } else if (state[0] == completer.state &&
                state[2] == completer.completing &&
                state[0] != "selector" && state[0] != "value") {
       return true;
     }
     return false;
   };
 
-  let progress = doc.getElementById("progress");
-  let progressDiv = doc.querySelector("#progress > div");
   let i = 0;
   for (let testcase of tests) {
-    progress.dataset.progress = ++i;
-    progressDiv.style.width = 100 * i / tests.length + "%";
+    ++i;
+    await ContentTask.spawn(browser, [i, tests.length], function([idx, len]) {
+      let progress = content.document.getElementById("progress");
+      let progressDiv = content.document.querySelector("#progress > div");
+      progress.dataset.progress = idx;
+      progressDiv.style.width = 100 * idx / len + "%";
+    });
     completer.resolveState(limit(source, testcase[0]),
                            {line: testcase[0][0], ch: testcase[0][1]});
     if (checkState(testcase[1])) {
       ok(true, "Test " + i + " passed. ");
     } else {
       ok(false, "Test " + i + " failed. Expected state : [" + testcase[1] + "] " +
          "but found [" + completer.state + ", " + completer.selectorState +
          ", " + completer.completing + ", " +
          (completer.propertyName || completer.selector) + "].");
-      progress.classList.add("failed");
+      await ContentTask.spawn(browser, null, function() {
+        let progress = content.document.getElementById("progress");
+        progress.classList.add("failed");
+      });
     }
   }
   gBrowser.removeCurrentTab();
-  finish();
-}
+});