zotero/test/tests/zoteroTest.js
Dan Stillman a2c7e0c00e Support saving and restoring main-window progress meter state
showZoteroPaneProgressMeter() now returns a token capturing the
previous message, meter mode and position, and owner, and
restoreZoteroPaneProgressMeter() restores that state if no other
operation has changed the display since, with nested tokens restoring
in reverse order.
2026-07-16 11:43:31 -04:00

103 lines
3.9 KiB
JavaScript

"use strict";
describe("Zotero", function() {
describe("#restoreZoteroPaneProgressMeter()", function () {
// A token captures the current display state, so taking one and immediately
// restoring it reads the state without changing it
function getProgressState() {
let token = Zotero.showZoteroPaneProgressMeter(undefined);
Zotero.restoreZoteroPaneProgressMeter(token);
return token;
}
afterEach(function () {
Zotero.hideZoteroPaneOverlays();
});
it("should restore nested progress displays to their previous owners", function () {
let token1 = Zotero.showZoteroPaneProgressMeter("One", true);
Zotero.updateZoteroPaneProgressMeter(30);
let token2 = Zotero.showZoteroPaneProgressMeter("Two");
// The new display should start with no percentage, so that a first update
// matching the previous meter's position isn't suppressed
assert.isNull(getProgressState().percentage);
// Restoring an outer token while an inner display is up should do nothing
Zotero.restoreZoteroPaneProgressMeter(token1);
assert.isTrue(Zotero.locked);
// Restoring the inner token should re-show the outer display, including its
// meter position, which is stored scaled by 10
Zotero.restoreZoteroPaneProgressMeter(token2);
let state = getProgressState();
assert.equal(state.message, "One");
assert.isTrue(state.determinate);
assert.equal(state.percentage, 300);
// Now the outer token can restore, unlocking the pane
Zotero.restoreZoteroPaneProgressMeter(token1);
assert.isFalse(Zotero.locked);
});
it("should capture a meter switched to indeterminate by updateZoteroPaneProgressMeter()", function () {
let token1 = Zotero.showZoteroPaneProgressMeter("One", true);
Zotero.updateZoteroPaneProgressMeter(null);
let token2 = Zotero.showZoteroPaneProgressMeter("Two");
assert.isFalse(token2.determinate);
assert.isNull(token2.percentage);
Zotero.restoreZoteroPaneProgressMeter(token2);
let state = getProgressState();
assert.isFalse(state.determinate);
assert.isNull(state.percentage);
Zotero.restoreZoteroPaneProgressMeter(token1);
assert.isFalse(Zotero.locked);
});
it("should capture a meter switched to determinate by updateZoteroPaneProgressMeter()", function () {
let token1 = Zotero.showZoteroPaneProgressMeter("One");
Zotero.updateZoteroPaneProgressMeter(40);
let token2 = Zotero.showZoteroPaneProgressMeter("Two");
assert.isTrue(token2.determinate);
assert.equal(token2.percentage, 400);
Zotero.restoreZoteroPaneProgressMeter(token2);
let state = getProgressState();
assert.isTrue(state.determinate);
assert.equal(state.percentage, 400);
Zotero.restoreZoteroPaneProgressMeter(token1);
assert.isFalse(Zotero.locked);
});
});
describe("VersionHeader", function () {
describe("#update()", function () {
var majorMinorVersion;
before(function () {
majorMinorVersion = Zotero.version.replace(/(\d+\.\d+).*/, '$1');
});
it("should replace app name with Firefox", function () {
var platformVersion = Services.appinfo.platformVersion.match(/^\d+/)[0] + '.0';
var ua1 = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 ${Zotero.clientName}/${Zotero.version}`;
var ua2 = `Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/${platformVersion} ${Zotero.clientName}/${Zotero.version}`;
assert.equal(Zotero.VersionHeader.update(ua1), ua2);
});
it("should show Chrome user agent unchanged", function () {
var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36';
assert.equal(Zotero.VersionHeader.update(ua), ua);
});
it("should show Firefox user agent unchanged", function () {
var ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0';
assert.equal(Zotero.VersionHeader.update(ua), ua);
});
});
});
});