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).
This commit is contained in:
Dan Stillman 2016-04-09 18:20:34 -04:00
parent b650263d66
commit 1c19fe8d81
2 changed files with 26 additions and 11 deletions

View file

@ -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();

View file

@ -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;