From 1e7add0d43ce96f771ca4de47ae604c6de137c59 Mon Sep 17 00:00:00 2001 From: Artur Adib Date: Fri, 25 May 2012 13:21:59 -0400 Subject: [PATCH] Bug 748924 - PDF viewer: New interface + Mochitest controls (tests) r=ctalbert --- browser/extensions/pdfjs/test/Makefile.in | 2 +- .../pdfjs/test/browser_pdfjs_main.js | 75 ++++++++++++++---- .../extensions/pdfjs/test/file_pdfjs_test.pdf | Bin 7878 -> 14234 bytes 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/browser/extensions/pdfjs/test/Makefile.in b/browser/extensions/pdfjs/test/Makefile.in index 56c0149b7da6..77b7a838d941 100644 --- a/browser/extensions/pdfjs/test/Makefile.in +++ b/browser/extensions/pdfjs/test/Makefile.in @@ -6,7 +6,7 @@ DEPTH = ../../../.. topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ -relativesrcdir = browser/features/pdfjs/test +relativesrcdir = browser/extensions/pdfjs/test include $(DEPTH)/config/autoconf.mk include $(topsrcdir)/config/rules.mk diff --git a/browser/extensions/pdfjs/test/browser_pdfjs_main.js b/browser/extensions/pdfjs/test/browser_pdfjs_main.js index d37fd7acd28d..884650892d2c 100644 --- a/browser/extensions/pdfjs/test/browser_pdfjs_main.js +++ b/browser/extensions/pdfjs/test/browser_pdfjs_main.js @@ -2,27 +2,70 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ -const RELATIVE_DIR = "browser/features/pdfjs/test/"; +const RELATIVE_DIR = "browser/extensions/pdfjs/test/"; const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR; function test() { + var tab; + waitForExplicitFinish(); - - var tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf"); - var newTabBrowser = gBrowser.getBrowserForTab(tab); - newTabBrowser.addEventListener("load", function onLoad() { - newTabBrowser.removeEventListener("load", onLoad, true); - - var hasViewer = newTabBrowser.contentDocument.querySelector('div#viewer'); - var hasPDFJS = 'PDFJS' in newTabBrowser.contentWindow.wrappedJSObject; - - ok(hasViewer, "document content has viewer UI"); - ok(hasPDFJS, "window content has PDFJS object"); - - finish(); - }, true, true); - registerCleanupFunction(function() { gBrowser.removeTab(tab); }); + + tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf"); + var newTabBrowser = gBrowser.getBrowserForTab(tab); + newTabBrowser.addEventListener("load", function eventHandler() { + newTabBrowser.removeEventListener("load", eventHandler, true); + + var document = newTabBrowser.contentDocument, + window = newTabBrowser.contentWindow; + + // Runs tests after all 'load' event handlers have fired off + setTimeout(function() { + runTests(document, window); + }, 0); + }, true); +} + + +function runTests(document, window) { + // + // Overall sanity tests + // + ok(document.querySelector('div#viewer'), "document content has viewer UI"); + ok('PDFJS' in window.wrappedJSObject, "window content has PDFJS object"); + + // + // Sidebar: open + // + var sidebar = document.querySelector('button#sidebarToggle'), + outerContainer = document.querySelector('div#outerContainer'); + + sidebar.click(); + ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click'); + + // + // Sidebar: close + // + sidebar.click(); + ok(!outerContainer.classList.contains('sidebarOpen'), 'sidebar closes on click'); + + // + // Page change from prev/next buttons + // + var prevPage = document.querySelector('button#previous'), + nextPage = document.querySelector('button#next'); + + var pageNumber = document.querySelector('input#pageNumber'); + is(parseInt(pageNumber.value), 1, 'initial page is 1'); + + // + // Bookmark button + // + var viewBookmark = document.querySelector('a#viewBookmark'); + viewBookmark.click(); + ok(viewBookmark.href.length > 0, 'viewBookmark button has href'); + + finish(); } diff --git a/browser/extensions/pdfjs/test/file_pdfjs_test.pdf b/browser/extensions/pdfjs/test/file_pdfjs_test.pdf index 68d77cc5b6a8e52657b243f88dba00d39ec45671..ea5ebe39538ca03715041d802ad769005141f200 100644 GIT binary patch delta 11362 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 E0A8=TaAc~X{A}xX-C7?7SDN0C4 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