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 _browserData = new WeakMap();
var _attachmentsMap = new WeakMap(); var _attachmentsMap = new WeakMap();
var _detectCallbacks = [];
var _blacklist = [ var _blacklist = [
"googlesyndication.com", "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() { function getSaveButtons() {
Components.utils.import("resource:///modules/CustomizableUI.jsm"); Components.utils.import("resource:///modules/CustomizableUI.jsm");
var buttons = []; var buttons = [];
@ -957,7 +972,7 @@ Zotero_Browser.Tab.prototype._selectItems = function(obj, itemList, callback) {
/* /*
* called when translators are available * 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(); var page = this.getPageObject();
page.saveEnabled = true; 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"); if(!translators || !translators.length) Zotero.debug("Translate: No translators found");
// Note: async yield Zotero_Browser.updateStatus();
Zotero_Browser.updateStatus(); yield Zotero_Browser.resolveDetectCallbacks();
} });
Zotero_Browser.init(); Zotero_Browser.init();

View file

@ -18,7 +18,7 @@ describe("Zotero_Browser", function () {
it("should save webpage to current collection", function* () { it("should save webpage to current collection", function* () {
var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html");
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;
@ -39,7 +39,7 @@ describe("Zotero_Browser", function () {
getTestDataDirectory().path, "metadata", "journalArticle-single.html" getTestDataDirectory().path, "metadata", "journalArticle-single.html"
); );
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;
@ -60,7 +60,7 @@ describe("Zotero_Browser", function () {
getTestDataDirectory().path, "book_and_child_note.ris" getTestDataDirectory().path, "book_and_child_note.ris"
); );
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;
@ -81,7 +81,7 @@ describe("Zotero_Browser", function () {
it("should save PDF to library root", function* () { it("should save PDF to library root", function* () {
var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf");
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;
@ -101,7 +101,7 @@ describe("Zotero_Browser", function () {
it("should save PDF to current collection", function* () { it("should save PDF to current collection", function* () {
var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf");
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;
@ -120,7 +120,7 @@ describe("Zotero_Browser", function () {
it("shouldn't save webpage to My Publications", function* () { it("shouldn't save webpage to My Publications", function* () {
var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html");
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;
@ -142,7 +142,7 @@ describe("Zotero_Browser", function () {
getTestDataDirectory().path, "metadata", "journalArticle-single.html" getTestDataDirectory().path, "metadata", "journalArticle-single.html"
); );
var deferred = Zotero.Promise.defer(); var deferred = Zotero.Promise.defer();
win.addEventListener('pageshow', () => deferred.resolve()); win.Zotero_Browser.addDetectCallback(() => deferred.resolve());
win.loadURI(uri); win.loadURI(uri);
yield deferred.promise; yield deferred.promise;