Implements #1021 on Z4fx extension
This commit is contained in:
parent
3ca5526f29
commit
5d17ff3f53
7 changed files with 189 additions and 72 deletions
|
@ -757,10 +757,11 @@ var generateTranslatorExportData = Zotero.Promise.coroutine(function* generateTr
|
|||
/**
|
||||
* Build a dummy translator that can be passed to Zotero.Translate
|
||||
*/
|
||||
function buildDummyTranslator(translatorType, code, translatorID="dummy-translator") {
|
||||
let info = {
|
||||
"translatorID":translatorID,
|
||||
"translatorType":translatorType,
|
||||
function buildDummyTranslator(translatorType, code, info={}) {
|
||||
const TRANSLATOR_TYPES = {"import":1, "export":2, "web":4, "search":8};
|
||||
info = Object.assign({
|
||||
"translatorID":"dummy-translator",
|
||||
"translatorType":TRANSLATOR_TYPES[translatorType],
|
||||
"label":"Dummy Translator",
|
||||
"creator":"Simon Kornblith",
|
||||
"target":"",
|
||||
|
@ -768,10 +769,9 @@ function buildDummyTranslator(translatorType, code, translatorID="dummy-translat
|
|||
"browserSupport":"g",
|
||||
"inRepository":false,
|
||||
"lastUpdated":"0000-00-00 00:00:00",
|
||||
};
|
||||
}, info);
|
||||
let translator = new Zotero.Translator(info);
|
||||
translator.code = code;
|
||||
translator.getCode = function() {return Promise.resolve(code)};
|
||||
return translator;
|
||||
}
|
||||
|
||||
|
|
|
@ -561,7 +561,7 @@ describe("Zotero.Translate", function() {
|
|||
item.title = "The Definitive Guide of Owls";
|
||||
item.tags = ['owl', 'tag'];
|
||||
item.complete();
|
||||
}`, 'child-dummy-translator'
|
||||
}`, {translatorID: 'child-dummy-translator'}
|
||||
);
|
||||
sinon.stub(Zotero.Translators, 'get').withArgs('child-dummy-translator').returns(childTranslator);
|
||||
|
||||
|
|
89
test/tests/translatorsTest.js
Normal file
89
test/tests/translatorsTest.js
Normal file
|
@ -0,0 +1,89 @@
|
|||
"use strict";
|
||||
|
||||
describe("Zotero.Translators", function () {
|
||||
describe("#getWebTranslatorsForLocation()", function () {
|
||||
var genericTranslator, topLevelTranslator, frameTranslator;
|
||||
var noMatchURL = 'http://notowls.com/citation/penguin-migration-patterns';
|
||||
var topMatchURL = 'http://www.owl.com/owl_page/snowy_owl';
|
||||
var frameMatchURL = 'http://iframe.owl.com/citation/owl-migration-patterns';
|
||||
|
||||
before(function* (){
|
||||
genericTranslator = buildDummyTranslator('web', `function doDetect() {}; function doWeb(); {}`, {
|
||||
translatorID: 'generic-translator'
|
||||
});
|
||||
topLevelTranslator = buildDummyTranslator('web', `function doDetect() {}; function doWeb(); {}`, {
|
||||
translatorID: 'top-level-translator',
|
||||
target: "https?://www\\.owl\\.com/(citation|owl_page)/.+"
|
||||
});
|
||||
frameTranslator = buildDummyTranslator('web', `function doDetect() {}; function doWeb(); {}`, {
|
||||
translatorID: 'frame-translator',
|
||||
target: "https?://([^.]+\\.)?owl\\.com/(citation|owl_page)/.+",
|
||||
targetAll: "https?://iframe.owl\\.com/(citation|owl_page)/.+"
|
||||
});
|
||||
|
||||
let getAllForType = sinon.stub(Zotero.Translators, 'getAllForType');
|
||||
getAllForType.withArgs('web').resolves([genericTranslator, topLevelTranslator, frameTranslator]);
|
||||
getAllForType.withArgs('webWithTargetAll').resolves([frameTranslator]);
|
||||
|
||||
let regexp = new RegExp(topLevelTranslator.target, 'i');
|
||||
assert.isFalse(regexp.test(noMatchURL));
|
||||
assert.isTrue(regexp.test(topMatchURL));
|
||||
assert.isFalse(regexp.test(frameMatchURL));
|
||||
|
||||
regexp = new RegExp(frameTranslator.target, 'i');
|
||||
assert.isFalse(regexp.test(noMatchURL));
|
||||
assert.isTrue(regexp.test(topMatchURL));
|
||||
assert.isTrue(regexp.test(frameMatchURL));
|
||||
|
||||
regexp = new RegExp(frameTranslator.targetAll, 'i');
|
||||
assert.isFalse(regexp.test(noMatchURL));
|
||||
assert.isFalse(regexp.test(topMatchURL));
|
||||
assert.isTrue(regexp.test(frameMatchURL));
|
||||
});
|
||||
|
||||
after(function* (){
|
||||
Zotero.Translators.getAllForType.restore();
|
||||
});
|
||||
|
||||
describe("when called from a root document", function() {
|
||||
it("should return generic translators when not matching any translator `target`", function* () {
|
||||
var translators = yield Zotero.Translators.getWebTranslatorsForLocation(noMatchURL, noMatchURL);
|
||||
assert.equal(translators[0].length, 1);
|
||||
assert.equal(translators[0][0].translatorID, 'generic-translator');
|
||||
});
|
||||
|
||||
it("should return all matching translators without `targetAll` property", function* () {
|
||||
var translators = yield Zotero.Translators.getWebTranslatorsForLocation(topMatchURL, topMatchURL);
|
||||
assert.equal(translators[0].length, 2);
|
||||
assert.equal(translators[0][0].translatorID, 'generic-translator');
|
||||
assert.equal(translators[0][1].translatorID, 'top-level-translator');
|
||||
});
|
||||
|
||||
it("should return translators that match both `target` and `targetAll` when both properties present", function* () {
|
||||
var translators = yield Zotero.Translators.getWebTranslatorsForLocation(frameMatchURL, frameMatchURL);
|
||||
assert.equal(translators[0].length, 2);
|
||||
assert.equal(translators[0][0].translatorID, 'generic-translator');
|
||||
assert.equal(translators[0][1].translatorID, 'frame-translator');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe("when called from an iframe", function() {
|
||||
it("should not return generic translators or translators without `targetAll` property", function* () {
|
||||
var translators = yield Zotero.Translators.getWebTranslatorsForLocation(frameMatchURL, noMatchURL);
|
||||
assert.equal(translators[0].length, 0);
|
||||
});
|
||||
|
||||
it("should not return translators that match `target` but not `targetAll", function* () {
|
||||
var translators = yield Zotero.Translators.getWebTranslatorsForLocation(noMatchURL, topMatchURL);
|
||||
assert.equal(translators[0].length, 0);
|
||||
});
|
||||
|
||||
it("should return translators that match both `target` and `targetAll`", function* () {
|
||||
var translators = yield Zotero.Translators.getWebTranslatorsForLocation(frameMatchURL, topMatchURL);
|
||||
assert.equal(translators[0].length, 1);
|
||||
assert.equal(translators[0][0].translatorID, 'frame-translator');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue