From 1c19fe8d81f97b288af5ccc3810fa2ff3de1a946 Mon Sep 17 00:00:00 2001 From: Dan Stillman Date: Sat, 9 Apr 2016 18:20:34 -0400 Subject: [PATCH] Use proper on-detect handler rather than pageshow in browser tests Otherwise the test could run scrapeThisPage() before translators were ready. It would be good to make scrapeThisPage wait for detection to complete so that an early press still uses a translator for saving, but this way tests can also test for the proper icon (though they don't now). --- chrome/content/zotero/browser.js | 23 +++++++++++++++++++---- test/tests/browserTest.js | 14 +++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/chrome/content/zotero/browser.js b/chrome/content/zotero/browser.js index dae65b6ae..375a18bba 100644 --- a/chrome/content/zotero/browser.js +++ b/chrome/content/zotero/browser.js @@ -54,6 +54,7 @@ var Zotero_Browser = new function() { var _browserData = new WeakMap(); var _attachmentsMap = new WeakMap(); + var _detectCallbacks = []; var _blacklist = [ "googlesyndication.com", @@ -484,6 +485,20 @@ var Zotero_Browser = new function() { } }); + this.addDetectCallback = function (func) { + _detectCallbacks.push(func); + }; + + this.resolveDetectCallbacks = Zotero.Promise.coroutine(function* () { + while (_detectCallbacks.length) { + let cb = _detectCallbacks.shift(); + var res = cb(); + if (res && res.then) { + yield res.then; + } + } + }); + function getSaveButtons() { Components.utils.import("resource:///modules/CustomizableUI.jsm"); var buttons = []; @@ -957,7 +972,7 @@ Zotero_Browser.Tab.prototype._selectItems = function(obj, itemList, callback) { /* * called when translators are available */ -Zotero_Browser.Tab.prototype._translatorsAvailable = function(translate, translators) { +Zotero_Browser.Tab.prototype._translatorsAvailable = Zotero.Promise.coroutine(function* (translate, translators) { var page = this.getPageObject(); page.saveEnabled = true; @@ -1004,8 +1019,8 @@ Zotero_Browser.Tab.prototype._translatorsAvailable = function(translate, transla if(!translators || !translators.length) Zotero.debug("Translate: No translators found"); - // Note: async - Zotero_Browser.updateStatus(); -} + yield Zotero_Browser.updateStatus(); + yield Zotero_Browser.resolveDetectCallbacks(); +}); Zotero_Browser.init(); \ No newline at end of file diff --git a/test/tests/browserTest.js b/test/tests/browserTest.js index d65d1db60..0e80d7478 100644 --- a/test/tests/browserTest.js +++ b/test/tests/browserTest.js @@ -18,7 +18,7 @@ describe("Zotero_Browser", function () { it("should save webpage to current collection", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -39,7 +39,7 @@ describe("Zotero_Browser", function () { getTestDataDirectory().path, "metadata", "journalArticle-single.html" ); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -60,7 +60,7 @@ describe("Zotero_Browser", function () { getTestDataDirectory().path, "book_and_child_note.ris" ); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -81,7 +81,7 @@ describe("Zotero_Browser", function () { it("should save PDF to library root", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -101,7 +101,7 @@ describe("Zotero_Browser", function () { it("should save PDF to current collection", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -120,7 +120,7 @@ describe("Zotero_Browser", function () { it("shouldn't save webpage to My Publications", function* () { var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise; @@ -142,7 +142,7 @@ describe("Zotero_Browser", function () { getTestDataDirectory().path, "metadata", "journalArticle-single.html" ); var deferred = Zotero.Promise.defer(); - win.addEventListener('pageshow', () => deferred.resolve()); + win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); win.loadURI(uri); yield deferred.promise;