browserTest.js (6000B)
1 "use strict"; 2 3 describe("Zotero_Browser", function () { 4 var win, collection; 5 6 before(function* () { 7 this.timeout(60000); 8 yield Zotero.Translators.init(); 9 10 win = yield loadBrowserWindow(); 11 collection = yield createDataObject('collection'); 12 }); 13 14 after(function* () { 15 win.close(); 16 }); 17 18 afterEach(function () { 19 Zotero.ProgressWindowSet.closeAll(); 20 }) 21 22 var waitForTranslateIcon = Zotero.Promise.coroutine(function* () { 23 var button = win.document.getElementById('zotero-toolbar-save-button'); 24 if (button.classList.contains('translate')) { 25 return; 26 } 27 Zotero.debug("Waiting for translator icon"); 28 do { 29 yield Zotero.Promise.delay(50); 30 } 31 while (!button.classList.contains('translate')); 32 }); 33 34 35 it("should save webpage to current collection", function* () { 36 var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); 37 var deferred = Zotero.Promise.defer(); 38 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 39 win.loadURI(uri); 40 yield deferred.promise; 41 42 yield loadZoteroPane(win); 43 var collection = yield createDataObject('collection'); 44 45 var promise = waitForItemEvent('add'); 46 yield win.Zotero_Browser.scrapeThisPage(); 47 var ids = yield promise; 48 var items = Zotero.Items.get(ids); 49 assert.lengthOf(items, 1); 50 assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'webpage'); 51 assert.isTrue(collection.hasItem(items[0].id)); 52 }) 53 54 it("should save journal article to current collection", function* () { 55 var uri = OS.Path.join( 56 getTestDataDirectory().path, "metadata", "journalArticle-single.html" 57 ); 58 var deferred = Zotero.Promise.defer(); 59 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 60 win.loadURI(uri); 61 yield deferred.promise; 62 63 yield loadZoteroPane(win); 64 var collection = yield createDataObject('collection'); 65 66 var promise = waitForItemEvent('add'); 67 yield win.Zotero_Browser.scrapeThisPage(); 68 var ids = yield promise; 69 var items = Zotero.Items.get(ids); 70 assert.lengthOf(items, 1); 71 assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'journalArticle'); 72 assert.isTrue(collection.hasItem(items[0].id)); 73 }) 74 75 it("should save book with child note to current collection", function* () { 76 var uri = OS.Path.join( 77 getTestDataDirectory().path, "book_and_child_note.ris" 78 ); 79 var deferred = Zotero.Promise.defer(); 80 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 81 win.loadURI(uri); 82 yield deferred.promise; 83 84 // Detection runs twice for local files, so wait for the icon to actually appear 85 yield waitForTranslateIcon(); 86 87 yield loadZoteroPane(win); 88 var collection = yield createDataObject('collection'); 89 90 var promise = waitForItemEvent('add'); 91 yield win.Zotero_Browser.scrapeThisPage(); 92 93 var ids = yield promise; 94 var items = Zotero.Items.get(ids); 95 assert.lengthOf(items, 2); 96 assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'book'); 97 assert.isTrue(collection.hasItem(items[0].id)); 98 assert.equal(Zotero.ItemTypes.getName(items[1].itemTypeID), 'note'); 99 }); 100 101 it("should save PDF to library root", function* () { 102 var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); 103 var deferred = Zotero.Promise.defer(); 104 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 105 win.loadURI(uri); 106 yield deferred.promise; 107 108 yield loadZoteroPane(win); 109 110 var promise = waitForItemEvent('add'); 111 yield win.Zotero_Browser.scrapeThisPage(); 112 var ids = yield promise; 113 var items = Zotero.Items.get(ids); 114 assert.lengthOf(items, 1); 115 assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'attachment'); 116 assert.equal(items[0].getField('title'), 'test.pdf'); 117 assert.equal(items[0].attachmentContentType, 'application/pdf'); 118 assert.equal(Zotero.Attachments.linkModeToName(items[0].attachmentLinkMode), 'imported_url'); 119 }); 120 121 it("should save PDF to current collection", function* () { 122 var uri = OS.Path.join(getTestDataDirectory().path, "test.pdf"); 123 var deferred = Zotero.Promise.defer(); 124 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 125 win.loadURI(uri); 126 yield deferred.promise; 127 128 yield loadZoteroPane(win); 129 var collection = yield createDataObject('collection'); 130 131 var promise = waitForItemEvent('add'); 132 yield win.Zotero_Browser.scrapeThisPage(); 133 var ids = yield promise; 134 var items = Zotero.Items.get(ids); 135 assert.lengthOf(items, 1); 136 assert.equal(Zotero.ItemTypes.getName(items[0].itemTypeID), 'attachment'); 137 assert.isTrue(collection.hasItem(items[0].id)); 138 }); 139 140 it("shouldn't save webpage to My Publications", function* () { 141 var uri = OS.Path.join(getTestDataDirectory().path, "snapshot", "index.html"); 142 var deferred = Zotero.Promise.defer(); 143 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 144 win.loadURI(uri); 145 yield deferred.promise; 146 147 yield loadZoteroPane(win); 148 yield win.ZoteroPane.collectionsView.selectByID("P" + Zotero.Libraries.userLibraryID); 149 150 var promise = waitForDialog(function (dialog) { 151 assert.include( 152 dialog.document.documentElement.textContent, 153 Zotero.getString('save.error.cannotAddToMyPublications') 154 ); 155 }); 156 yield win.Zotero_Browser.scrapeThisPage(); 157 yield promise; 158 }) 159 160 it("shouldn't save journal article to My Publications", function* () { 161 var uri = OS.Path.join( 162 getTestDataDirectory().path, "metadata", "journalArticle-single.html" 163 ); 164 var deferred = Zotero.Promise.defer(); 165 win.Zotero_Browser.addDetectCallback(() => deferred.resolve()); 166 win.loadURI(uri); 167 yield deferred.promise; 168 169 yield loadZoteroPane(win); 170 yield win.ZoteroPane.collectionsView.selectByID("P" + Zotero.Libraries.userLibraryID); 171 172 var promise = waitForDialog(function (dialog) { 173 assert.include( 174 dialog.document.documentElement.textContent, 175 Zotero.getString('save.error.cannotAddToMyPublications') 176 ); 177 }, false, 'chrome://zotero/content/progressWindow.xul'); 178 yield win.Zotero_Browser.scrapeThisPage(); 179 yield promise; 180 }) 181 })