]> git.parisson.com Git - pdf.js.git/commitdiff
Fixed moz-central manifest; bundling Mochitests
authorArtur Adib <arturadib@gmail.com>
Tue, 22 May 2012 22:56:12 +0000 (18:56 -0400)
committerArtur Adib <arturadib@gmail.com>
Tue, 22 May 2012 22:56:12 +0000 (18:56 -0400)
extensions/firefox/chrome-mozcentral.manifest [new file with mode: 0644]
make.js
test/mozcentral/Makefile.in [new file with mode: 0644]
test/mozcentral/browser_pdfjs_main.js [new file with mode: 0644]
test/mozcentral/file_pdfjs_test.pdf [new file with mode: 0644]
test/mozcentral/head.js [new file with mode: 0644]

diff --git a/extensions/firefox/chrome-mozcentral.manifest b/extensions/firefox/chrome-mozcentral.manifest
new file mode 100644 (file)
index 0000000..8348f37
--- /dev/null
@@ -0,0 +1,8 @@
+resource pdf.js content/
+component {6457a96b-2d68-439a-bcfa-44465fbcdbb1} components/PdfStreamConverter.js
+contract @mozilla.org/streamconv;1?from=application/pdf&to=*/* {6457a96b-2d68-439a-bcfa-44465fbcdbb1}
+
+# Additional resources for pdf.js
+
+# PDFJS_SUPPORTED_LOCALES
+
diff --git a/make.js b/make.js
index 88f7c69a073a2cf5c2013dfb933230a1ca44b3af..05c9cceffa8ffde49946eed88b9a2ebafd27a243 100755 (executable)
--- a/make.js
+++ b/make.js
@@ -377,9 +377,10 @@ target.mozcentral = function() {
   echo('### Building mozilla-central extension');
 
   var MOZCENTRAL_DIR = BUILD_DIR + 'mozcentral/',
-      MOZCENTRAL_EXTENSION_DIR = MOZCENTRAL_DIR + 'browser/app/profile/extensions/uriloader@pdf.js/',
+      MOZCENTRAL_EXTENSION_DIR = MOZCENTRAL_DIR + 'browser/extensions/pdfjs/',
       MOZCENTRAL_CONTENT_DIR = MOZCENTRAL_EXTENSION_DIR + 'content/',
       MOZCENTRAL_L10N_DIR = MOZCENTRAL_DIR + 'browser/locales/en-US/pdfviewer/',
+      MOZCENTRAL_TEST_DIR = MOZCENTRAL_EXTENSION_DIR + 'test/',
       FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/',
       FIREFOX_EXTENSION_FILES_TO_COPY =
         ['*.js',
@@ -415,6 +416,8 @@ target.mozcentral = function() {
   // Copy extension files
   cd('extensions/firefox');
   cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY, ROOT_DIR + MOZCENTRAL_EXTENSION_DIR);
+  mv('-f', ROOT_DIR + MOZCENTRAL_EXTENSION_DIR + '/chrome-mozcentral.manifest',
+           ROOT_DIR + MOZCENTRAL_EXTENSION_DIR + '/chrome.manifest')
   cd(ROOT_DIR);
 
   // Copy a standalone version of pdf.js inside the content directory
@@ -457,6 +460,11 @@ target.mozcentral = function() {
       extensionFiles += file+'\n';
   });
   extensionFiles.to('extension-files');
+  cd(ROOT_DIR);
+
+  // Copy test files
+  mkdir('-p', MOZCENTRAL_TEST_DIR);
+  cp('-Rf', 'test/mozcentral/*', MOZCENTRAL_TEST_DIR);
 };
 
 //
diff --git a/test/mozcentral/Makefile.in b/test/mozcentral/Makefile.in
new file mode 100644 (file)
index 0000000..8c9face
--- /dev/null
@@ -0,0 +1,21 @@
+# 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/extensions/pdfjs/test
+
+include $(DEPTH)/config/autoconf.mk
+include $(topsrcdir)/config/rules.mk
+
+_BROWSER_TEST_FILES = \
+  head.js \
+  browser_pdfjs_main.js \
+  file_pdfjs_test.pdf \
+  $(NULL)
+
+libs:: $(_BROWSER_TEST_FILES)
+       $(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir) 
diff --git a/test/mozcentral/browser_pdfjs_main.js b/test/mozcentral/browser_pdfjs_main.js
new file mode 100644 (file)
index 0000000..d3f5dd6
--- /dev/null
@@ -0,0 +1,102 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+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("pagechange", function onPageChange() {
+    newTabBrowser.removeEventListener("pagechange", onPageChange, true);
+
+    var document = newTabBrowser.contentDocument,
+        window = newTabBrowser.contentWindow;
+
+    //
+    // 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');
+
+    // Thumbnails are created asynchronously - wait for them
+    waitForElement(document, 'canvas#thumbnail2', function(error) {
+      if (error)
+        finish();
+
+      //
+      // Page change from thumbnail click
+      //
+      var pageNumber = document.querySelector('input#pageNumber');
+      is(parseInt(pageNumber.value), 1, 'initial page is 1');
+
+      var thumbnail = document.querySelector('canvas#thumbnail2');
+      ok(thumbnail, 'thumbnail2 is available');
+      if (thumbnail) {
+        thumbnail.click();
+        is(parseInt(pageNumber.value), 2, 'clicking on thumbnail changes page');
+      }
+
+      //
+      // 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');
+
+      nextPage.click();
+      is(parseInt(pageNumber.value), 2, 'page increases after clicking on next');
+
+      prevPage.click();
+      is(parseInt(pageNumber.value), 1, 'page decreases after clicking on previous');
+
+      //
+      // Bookmark button
+      //
+      var viewBookmark = document.querySelector('a#viewBookmark');
+      viewBookmark.click();
+      ok(viewBookmark.href.length > 0, 'viewBookmark button has href');
+
+      //
+      // Zoom in/out
+      //
+      var zoomOut = document.querySelector('button.zoomOut'),
+          zoomIn = document.querySelector('button.zoomIn');
+
+      // Zoom in
+      var oldWidth = document.querySelector('canvas#page1').width;
+      zoomIn.click();
+      var newWidth = document.querySelector('canvas#page1').width;
+      ok(oldWidth < newWidth, 'zooming in increases page width (old: '+oldWidth+', new: '+newWidth+')');
+
+      // Zoom out
+      var oldWidth = document.querySelector('canvas#page1').width;
+      zoomOut.click();
+      var newWidth = document.querySelector('canvas#page1').width;
+      ok(oldWidth > newWidth, 'zooming out decreases page width (old: '+oldWidth+', new: '+newWidth+')');
+
+      finish();
+    });
+  }, true, true);
+
+  registerCleanupFunction(function() {
+    gBrowser.removeTab(tab);
+  });
+}
diff --git a/test/mozcentral/file_pdfjs_test.pdf b/test/mozcentral/file_pdfjs_test.pdf
new file mode 100644 (file)
index 0000000..ea5ebe3
Binary files /dev/null and b/test/mozcentral/file_pdfjs_test.pdf differ
diff --git a/test/mozcentral/head.js b/test/mozcentral/head.js
new file mode 100644 (file)
index 0000000..6ee421b
--- /dev/null
@@ -0,0 +1,21 @@
+// Waits for element 'el' to exist in the DOM of 'doc' before executing 'callback'
+// Useful when elements are created asynchronously, e.g. after a Web Worker task
+function waitForElement(doc, el, callback) {
+  var time = 0,
+      interval = 10,
+      timeout = 5000;
+
+  var checkEl = setInterval(function() {
+    if (doc.querySelector(el)) {
+      clearInterval(checkEl);
+      if (callback) callback();
+    }
+
+    time += interval;
+    if (time > timeout) {
+      ok(false, 'waitForElement timed out on element: '+el);
+      clearInterval(checkEl);
+      if (callback) callback(true);
+    }
+  }, interval);
+}