www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

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 });