commit 1c19fe8d81f97b288af5ccc3810fa2ff3de1a946
parent b650263d665a5e559a4d868598c4ee30f14957aa
Author: Dan Stillman <dstillman@zotero.org>
Date: Sat, 9 Apr 2016 18:20:34 -0400
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).
Diffstat:
2 files changed, 26 insertions(+), 11 deletions(-)
diff --git 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
@@ -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;