diff options
Diffstat (limited to 'browser/extensions/pdfjs/test/browser_pdfjs_zoom.js')
-rw-r--r-- | browser/extensions/pdfjs/test/browser_pdfjs_zoom.js | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js b/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js new file mode 100644 index 000000000..f2b73fd99 --- /dev/null +++ b/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js @@ -0,0 +1,154 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +requestLongerTimeout(2); + +Components.utils.import("resource://gre/modules/Promise.jsm", this); + +const RELATIVE_DIR = "browser/extensions/pdfjs/test/"; +const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR; + +const TESTS = [ + { + action: { + selector: "button#zoomIn", + event: "click" + }, + expectedZoom: 1, // 1 - zoom in + message: "Zoomed in using the '+' (zoom in) button" + }, + + { + action: { + selector: "button#zoomOut", + event: "click" + }, + expectedZoom: -1, // -1 - zoom out + message: "Zoomed out using the '-' (zoom out) button" + }, + + { + action: { + keyboard: true, + keyCode: 61, + event: "+" + }, + expectedZoom: 1, // 1 - zoom in + message: "Zoomed in using the CTRL++ keys" + }, + + { + action: { + keyboard: true, + keyCode: 109, + event: "-" + }, + expectedZoom: -1, // -1 - zoom out + message: "Zoomed out using the CTRL+- keys" + }, + + { + action: { + selector: "select#scaleSelect", + index: 5, + event: "change" + }, + expectedZoom: -1, // -1 - zoom out + message: "Zoomed using the zoom picker" + } +]; + +add_task(function* test() { + let handlerService = Cc["@mozilla.org/uriloader/handler-service;1"] + .getService(Ci.nsIHandlerService); + let mimeService = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService); + let handlerInfo = mimeService.getFromTypeAndExtension('application/pdf', 'pdf'); + + // Make sure pdf.js is the default handler. + is(handlerInfo.alwaysAskBeforeHandling, false, + 'pdf handler defaults to always-ask is false'); + is(handlerInfo.preferredAction, Ci.nsIHandlerInfo.handleInternally, + 'pdf handler defaults to internal'); + + info('Pref action: ' + handlerInfo.preferredAction); + + yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" }, + function* (newTabBrowser) { + yield waitForPdfJS(newTabBrowser, TESTROOT + "file_pdfjs_test.pdf" + "#zoom=100"); + + yield ContentTask.spawn(newTabBrowser, TESTS, function* (TESTS) { + let document = content.document; + + function waitForRender() { + return new Promise((resolve) => { + document.addEventListener("pagerendered", function onPageRendered(e) { + if(e.detail.pageNumber !== 1) { + return; + } + + document.removeEventListener("pagerendered", onPageRendered, true); + resolve(); + }, true); + }); + } + + // check that PDF is opened with internal viewer + Assert.ok(content.document.querySelector("div#viewer"), "document content has viewer UI"); + Assert.ok("PDFJS" in content.wrappedJSObject, "window content has PDFJS object"); + + let initialWidth, previousWidth; + initialWidth = previousWidth = + parseInt(content.document.querySelector("div#pageContainer1").style.width); + + for (let test of TESTS) { + // We zoom using an UI element + var ev; + if (test.action.selector) { + // Get the element and trigger the action for changing the zoom + var el = document.querySelector(test.action.selector); + Assert.ok(el, "Element '" + test.action.selector + "' has been found"); + + if (test.action.index){ + el.selectedIndex = test.action.index; + } + + // Dispatch the event for changing the zoom + ev = new Event(test.action.event); + } + // We zoom using keyboard + else { + // Simulate key press + ev = new content.KeyboardEvent("keydown", + { key: test.action.event, + keyCode: test.action.keyCode, + ctrlKey: true }); + el = content; + } + + el.dispatchEvent(ev); + yield waitForRender(); + + var pageZoomScale = content.document.querySelector('select#scaleSelect'); + + // The zoom value displayed in the zoom select + var zoomValue = pageZoomScale.options[pageZoomScale.selectedIndex].innerHTML; + + let pageContainer = content.document.querySelector('div#pageContainer1'); + let actualWidth = parseInt(pageContainer.style.width); + + // the actual zoom of the PDF document + let computedZoomValue = parseInt(((actualWidth/initialWidth).toFixed(2))*100) + "%"; + Assert.equal(computedZoomValue, zoomValue, "Content has correct zoom"); + + // Check that document zooms in the expected way (in/out) + let zoom = (actualWidth - previousWidth) * test.expectedZoom; + Assert.ok(zoom > 0, test.message); + + previousWidth = actualWidth; + } + + var viewer = content.wrappedJSObject.PDFViewerApplication; + yield viewer.close(); + }); + }); +}); |