Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/toolkit/components/pdfjs/test/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 7 kB image not shown  

Quelle  browser_pdfjs_zoom.js   Sprache: JAVA

 
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */


requestLongerTimeout(2);

const RELATIVE_DIR = "toolkit/components/pdfjs/test/";
const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR;

const TESTS = [
  {
    action: {
      selector: "#zoomInButton",
      event: "click",
    },
    expectedZoom: 1, // 1 - zoom in
    message: "Zoomed in using the '+' (zoom in) button",
  },

  {
    action: {
      selector: "#zoomOutButton",
      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(async function test() {
  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);

  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async function (newTabBrowser) {
      await waitForPdfJS(
        newTabBrowser,
        TESTROOT + "file_pdfjs_test.pdf#zoom=100"
      );

      await SpecialPowers.spawn(
        newTabBrowser,
        [TESTS],
        async function (contentTESTS) {
          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"
          );

          let initialWidth, previousWidth;
          initialWidth = previousWidth = parseInt(
            content.getComputedStyle(
              content.document.querySelector("div.page[data-page-number='1']")
            ).width
          );

          for (let subTest of contentTESTS) {
            // We zoom using an UI element
            var ev;
            if (subTest.action.selector) {
              // Get the element and trigger the action for changing the zoom
              var el = document.querySelector(subTest.action.selector);
              Assert.ok(
                el,
                "Element '" + subTest.action.selector + "' has been found"
              );

              if (subTest.action.index) {
                el.selectedIndex = subTest.action.index;
              }

              // Dispatch the event for changing the zoom
              ev = new content.Event(subTest.action.event);
            } else {
              // We zoom using keyboard
              // Simulate key press
              ev = new content.KeyboardEvent("keydown", {
                key: subTest.action.event,
                keyCode: subTest.action.keyCode,
                ctrlKey: true,
              });
              el = content;
            }

            el.dispatchEvent(ev);
            await 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.page[data-page-number='1']"
            );
            let actualWidth = parseInt(
              content.getComputedStyle(pageContainer).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) * subTest.expectedZoom;
            Assert.ok(zoom > 0, subTest.message);

            previousWidth = actualWidth;
          }
        }
      );
      await waitForPdfJSClose(newTabBrowser);
    }
  );
});

// Performs a SpecialPowers.spawn round-trip to ensure that any setup
// that needs to be done in the content process by any pending tasks has
// a chance to complete before continuing.
function waitForRoundTrip(browser) {
  return SpecialPowers.spawn(browser, [], () => {});
}

async function waitForRenderAndGetWidth(newTabBrowser) {
  return SpecialPowers.spawn(newTabBrowser, [], async function () {
    function waitForRender(document) {
      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"
    );

    await waitForRender(content.document);

    return parseInt(
      content.getComputedStyle(
        content.document.querySelector("div.page[data-page-number='1']")
      ).width
    );
  });
}

add_task(async function test_browser_zoom() {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async function (newTabBrowser) {
      const promise = waitForPdfJS(
        newTabBrowser,
        TESTROOT + "file_pdfjs_test.pdf"
      );
      await BrowserTestUtils.waitForContentEvent(
        newTabBrowser,
        "documentloaded",
        false,
        null,
        true
      );

      const initialWidth = await waitForRenderAndGetWidth(newTabBrowser);
      await promise;

      // Zoom in
      let newWidthPromise = waitForRenderAndGetWidth(newTabBrowser);
      await waitForRoundTrip(newTabBrowser);
      FullZoom.enlarge();
      Assert.greater(
        await newWidthPromise,
        initialWidth,
        "Zoom in makes the page bigger."
      );

      // Reset
      newWidthPromise = waitForRenderAndGetWidth(newTabBrowser);
      await waitForRoundTrip(newTabBrowser);
      FullZoom.reset();
      is(await newWidthPromise, initialWidth, "Zoom reset restores page.");

      // Zoom out
      newWidthPromise = waitForRenderAndGetWidth(newTabBrowser);
      await waitForRoundTrip(newTabBrowser);
      FullZoom.reduce();
      Assert.less(
        await newWidthPromise,
        initialWidth,
        "Zoom out makes the page smaller."
      );

      // Clean-up after the PDF viewer.
      await waitForPdfJSClose(newTabBrowser);
    }
  );
});

Messung V0.5
C=87 H=99 G=93

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.