translatorsTest.js (4097B)
1 "use strict"; 2 3 describe("Zotero.Translators", function () { 4 describe("#getWebTranslatorsForLocation()", function () { 5 var genericTranslator, topLevelTranslator, frameTranslator; 6 var noMatchURL = 'http://notowls.com/citation/penguin-migration-patterns'; 7 var topMatchURL = 'http://www.owl.com/owl_page/snowy_owl'; 8 var frameMatchURL = 'http://iframe.owl.com/citation/owl-migration-patterns'; 9 10 before(function* (){ 11 genericTranslator = buildDummyTranslator('web', `function doDetect() {}; function doWeb(); {}`, { 12 translatorID: 'generic-translator' 13 }); 14 topLevelTranslator = buildDummyTranslator('web', `function doDetect() {}; function doWeb(); {}`, { 15 translatorID: 'top-level-translator', 16 target: "https?://www\\.owl\\.com/(citation|owl_page)/.+" 17 }); 18 frameTranslator = buildDummyTranslator('web', `function doDetect() {}; function doWeb(); {}`, { 19 translatorID: 'frame-translator', 20 target: "https?://([^.]+\\.)?owl\\.com/(citation|owl_page)/.+", 21 targetAll: "https?://iframe.owl\\.com/(citation|owl_page)/.+" 22 }); 23 24 let getAllForType = sinon.stub(Zotero.Translators, 'getAllForType'); 25 getAllForType.withArgs('web').resolves([genericTranslator, topLevelTranslator, frameTranslator]); 26 getAllForType.withArgs('webWithTargetAll').resolves([frameTranslator]); 27 28 let regexp = new RegExp(topLevelTranslator.target, 'i'); 29 assert.isFalse(regexp.test(noMatchURL)); 30 assert.isTrue(regexp.test(topMatchURL)); 31 assert.isFalse(regexp.test(frameMatchURL)); 32 33 regexp = new RegExp(frameTranslator.target, 'i'); 34 assert.isFalse(regexp.test(noMatchURL)); 35 assert.isTrue(regexp.test(topMatchURL)); 36 assert.isTrue(regexp.test(frameMatchURL)); 37 38 regexp = new RegExp(frameTranslator.targetAll, 'i'); 39 assert.isFalse(regexp.test(noMatchURL)); 40 assert.isFalse(regexp.test(topMatchURL)); 41 assert.isTrue(regexp.test(frameMatchURL)); 42 }); 43 44 after(function* (){ 45 Zotero.Translators.getAllForType.restore(); 46 }); 47 48 describe("when called from a root document", function() { 49 it("should return generic translators when not matching any translator `target`", function* () { 50 var translators = yield Zotero.Translators.getWebTranslatorsForLocation(noMatchURL, noMatchURL); 51 assert.equal(translators[0].length, 1); 52 assert.equal(translators[0][0].translatorID, 'generic-translator'); 53 }); 54 55 it("should return all matching translators without `targetAll` property", function* () { 56 var translators = yield Zotero.Translators.getWebTranslatorsForLocation(topMatchURL, topMatchURL); 57 assert.equal(translators[0].length, 2); 58 assert.equal(translators[0][0].translatorID, 'generic-translator'); 59 assert.equal(translators[0][1].translatorID, 'top-level-translator'); 60 }); 61 62 it("should return translators that match both `target` and `targetAll` when both properties present", function* () { 63 var translators = yield Zotero.Translators.getWebTranslatorsForLocation(frameMatchURL, frameMatchURL); 64 assert.equal(translators[0].length, 2); 65 assert.equal(translators[0][0].translatorID, 'generic-translator'); 66 assert.equal(translators[0][1].translatorID, 'frame-translator'); 67 }); 68 69 }); 70 71 describe("when called from an iframe", function() { 72 it("should not return generic translators or translators without `targetAll` property", function* () { 73 var translators = yield Zotero.Translators.getWebTranslatorsForLocation(frameMatchURL, noMatchURL); 74 assert.equal(translators[0].length, 0); 75 }); 76 77 it("should not return translators that match `target` but not `targetAll", function* () { 78 var translators = yield Zotero.Translators.getWebTranslatorsForLocation(noMatchURL, topMatchURL); 79 assert.equal(translators[0].length, 0); 80 }); 81 82 it("should return translators that match both `target` and `targetAll`", function* () { 83 var translators = yield Zotero.Translators.getWebTranslatorsForLocation(frameMatchURL, topMatchURL); 84 assert.equal(translators[0].length, 1); 85 assert.equal(translators[0][0].translatorID, 'frame-translator'); 86 }); 87 }); 88 }); 89 });