/* 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);
  });
}