Bug 748924 - PDF viewer: New interface + Mochitest controls (tests)
authorArtur Adib <aadib@mozilla.com>
Fri, 25 May 2012 13:21:59 -0400
changeset 97663 ff2ad97929e82809280f5c1423199b5c0cea2448
parent 97662 d00574eae384b7e7eee97e81ce6ae82d4d4408d5
child 97664 f9b479f908489c51a73c4b69ca8cec1606f752c2
push idunknown
push userunknown
push dateunknown
bugs748924
milestone15.0a1
Bug 748924 - PDF viewer: New interface + Mochitest controls (tests) r=ctalbert
browser/extensions/pdfjs/test/Makefile.in
browser/extensions/pdfjs/test/browser_pdfjs_main.js
browser/extensions/pdfjs/test/file_pdfjs_test.pdf
--- a/browser/extensions/pdfjs/test/Makefile.in
+++ b/browser/extensions/pdfjs/test/Makefile.in
@@ -1,17 +1,17 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
 # You can obtain one at http://mozilla.org/MPL/2.0/.
 
 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
 
 _BROWSER_TEST_FILES = \
   browser_pdfjs_main.js \
   file_pdfjs_test.pdf \
   $(NULL)
--- a/browser/extensions/pdfjs/test/browser_pdfjs_main.js
+++ b/browser/extensions/pdfjs/test/browser_pdfjs_main.js
@@ -1,28 +1,71 @@
 /* Any copyright is dedicated to the Public Domain.
  * 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() {
-  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 tab;
 
-    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);
-
+  waitForExplicitFinish();
   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();
+}
index 68d77cc5b6a8e52657b243f88dba00d39ec45671..ea5ebe39538ca03715041d802ad769005141f200
GIT binary patch
literal 14234
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