/* Copyright 2018 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { buildGetDocumentParams } from './test_utils'; import { EventBus } from '../../web/ui_utils'; import { getDocument } from '../../src/display/api'; import { PDFFindController } from '../../web/pdf_find_controller'; import { SimpleLinkService } from '../../web/pdf_link_service'; class MockLinkService extends SimpleLinkService { constructor() { super(); this._page = 1; this._pdfDocument = null; } setDocument(pdfDocument) { this._pdfDocument = pdfDocument; } get pagesCount() { return this._pdfDocument.numPages; } get page() { return this._page; } set page(value) { this._page = value; } } describe('pdf_find_controller', function() { let eventBus; let pdfFindController; beforeEach(function(done) { const loadingTask = getDocument(buildGetDocumentParams('tracemonkey.pdf')); loadingTask.promise.then(function(pdfDocument) { const linkService = new MockLinkService(); linkService.setDocument(pdfDocument); eventBus = new EventBus(); pdfFindController = new PDFFindController({ linkService, eventBus, }); pdfFindController.setDocument(pdfDocument); eventBus.dispatch('pagesinit'); done(); }); }); afterEach(function() { eventBus = null; pdfFindController = null; }); it('performs a basic search', function(done) { pdfFindController.executeCommand('find', { query: 'Dynamic', }); const matchesPerPage = [11, 5, 0, 3, 0, 0, 0, 1, 1, 1, 0, 3, 4, 4]; const totalPages = matchesPerPage.length; const totalMatches = matchesPerPage.reduce((a, b) => { return a + b; }); eventBus.on('updatefindmatchescount', function onUpdateFindMatchesCount(evt) { if (pdfFindController.pageMatches.length !== totalPages) { return; } eventBus.off('updatefindmatchescount', onUpdateFindMatchesCount); expect(evt.matchesCount.total).toBe(totalMatches); for (let i = 0; i < totalPages; i++) { expect(pdfFindController.pageMatches[i].length) .toEqual(matchesPerPage[i]); } done(); }); }); });