Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  browser_pdfjs_find.js   Sprache: JAVA

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


"use strict";

const TESTROOT = getRootDirectory(gTestPath).replace(
  "chrome://mochitests/content/",
  "http://mochi.test:8888/"
);

// Get a ref to the pdfs we want to open.
const OS_PDF_URL = TESTROOT + "file_pdfjs_object_stream.pdf";
const TEST_PDF_URL = TESTROOT + "file_pdfjs_test.pdf";

var MockSound = SpecialPowers.MockSound;

add_setup(() => {
  MockSound.init();
  registerCleanupFunction(() => MockSound.cleanup());
});

add_task(async function test_find_octet_stream_pdf() {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async browser => {
      await waitForPdfJS(browser, OS_PDF_URL);
      let findEls = ["cmd_find""cmd_findAgain""cmd_findPrevious"].map(id =>
        document.getElementById(id)
      );
      for (let el of findEls) {
        ok(!el.hasAttribute("disabled"), `${el.id} should be enabled`);
      }
      await waitForPdfJSClose(browser);
    }
  );
});

// This code is roughly based on `promiseFindFinished` from
// `toolkit/content/tests/browser/head.js`.
function waitForFinderResult(findbar) {
  return new Promise(resolve => {
    let resultListener = {
      onFindResult(data) {
        findbar.browser.finder.removeResultListener(resultListener);
        resolve(data);
      },
      onCurrentSelection() {},
      onMatchesCountResult() {},
      onHighlightFinished() {},
    };
    findbar.browser.finder.addResultListener(resultListener);
  });
}

function waitForPdfjsResult(findbar) {
  // FIXME: This is a pretty sketchy way to intercept the results from pdfjs...
  return new Promise(resolve => {
    let oldUpdateControlState = findbar.updateControlState;
    function updateControlState(result, findPrevious) {
      if (result !== Ci.nsITypeAheadFind.FIND_PENDING) {
        resolve({ result, findPrevious });
        if (this.updateControlState === updateControlState) {
          this.updateControlState = oldUpdateControlState;
        }
      }
      return oldUpdateControlState.call(this, result, findPrevious);
    }
    findbar.updateControlState = updateControlState;
  });
}

// This code is roughly based on `promiseFindFinished` from
// `toolkit/content/tests/browser/head.js`.
async function doFind(findbar, searchText, waitFunc) {
  info(`performing a find for ${searchText}`);
  findbar.startFind(findbar.FIND_NORMAL);
  let highlightElement = findbar.getElement("highlight");
  if (highlightElement.checked) {
    highlightElement.click();
  }
  await new Promise(resolve => executeSoon(resolve));
  findbar._findField.value = searchText;
  let promise = waitFunc(findbar);
  findbar._find();
  return promise;
}

async function doFindNext(findbar, waitFunc) {
  info("performing findNext");
  let promise = waitFunc(findbar);
  findbar.onFindAgainCommand();
  return promise;
}

add_task(async function test_findbar_in_pdf() {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async browser => {
      await waitForPdfJS(browser, TEST_PDF_URL);
      const tab = gBrowser.getTabForBrowser(browser);
      let findbar = await gBrowser.getFindBar(tab);
      let findResult = await doFind(findbar, "Mozilla", waitForPdfjsResult);
      is(
        findResult.result,
        Ci.nsITypeAheadFind.FIND_FOUND,
        "The Mozilla string was found in the PDF document"
      );
      await waitForPdfJSClose(browser);
    }
  );
});

add_task(async function test_findbar_in_pdf_with_notfound_sound() {
  MockSound.reset();

  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async browser => {
      await waitForPdfJS(browser, TEST_PDF_URL);
      const tab = gBrowser.getTabForBrowser(browser);
      let findbar = await gBrowser.getFindBar(tab);
      let findResult;

      const steps = [
        ["Mozoo", ["beep"]],
        ["Mozxx", []], // silent if searchString has not increased its length
        ["MozooO", ["beep"]],
      ];

      for (let index = 0; index < steps.length; index++) {
        const [searchString, expectedPlayed] = steps[index];
        MockSound.reset();
        findResult = await doFind(findbar, searchString, waitForPdfjsResult);
        is(
          findResult.result,
          Ci.nsITypeAheadFind.FIND_NOTFOUND,
          `Step ${index + 1}, find "${searchString}"`
        );
        SimpleTest.isDeeply(
          MockSound.played,
          expectedPlayed,
          `Step ${index + 1}, Not-found sound`
        );
      }

      // Extra step for testing entireWord
      findbar.toggleEntireWord(true);
      MockSound.reset();
      findResult = await doFind(findbar, "MozooOOX", waitForPdfjsResult);
      is(
        findResult.result,
        Ci.nsITypeAheadFind.FIND_NOTFOUND,
        'Find "MozooOOX" with entireWord on'
      );
      SimpleTest.isDeeply(
        MockSound.played,
        [],
        "No sound when entireWord is on"
      );

      await waitForPdfJSClose(browser);
      findbar.toggleEntireWord(false);
    }
  );
});

add_task(async function test_findbar_in_pdf_with_wrapped_sound() {
  await SpecialPowers.pushPrefEnv({
    set: [["accessibility.typeaheadfind.wrappedSoundURL""beep"]],
  });

  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async browser => {
      await waitForPdfJS(browser, TEST_PDF_URL);
      const tab = gBrowser.getTabForBrowser(browser);
      let findbar = await gBrowser.getFindBar(tab);
      let findResult;

      MockSound.reset();

      // Known: "B2G" appears in the doc 2 times
      findResult = await doFind(findbar, "B2G", waitForPdfjsResult);
      is(findResult.result, Ci.nsITypeAheadFind.FIND_FOUND, 'Find 1st "B2G"');

      findResult = await doFindNext(findbar, waitForPdfjsResult);
      is(findResult.result, Ci.nsITypeAheadFind.FIND_FOUND, 'Find 2nd "B2G"');
      SimpleTest.isDeeply(
        MockSound.played,
        [],
        'No sound for first 2 "B2G" finding'
      );

      findResult = await doFindNext(findbar, waitForPdfjsResult);
      is(
        findResult.result,
        Ci.nsITypeAheadFind.FIND_WRAPPED,
        'Find "B2G" 3rd time'
      );
      SimpleTest.isDeeply(
        MockSound.played,
        ["beep"],
        '"beep" for wrapped event'
      );

      await waitForPdfJSClose(browser);
    }
  );
});

add_task(async function test_findbar_in_pdf_after_adopt() {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async browser => {
      await waitForPdfJS(browser, TEST_PDF_URL);
      const tab = gBrowser.getTabForBrowser(browser);
      let newWindow = await BrowserTestUtils.openNewBrowserWindow();

      info("adopting tab into new window");
      let newTab = newWindow.gBrowser.adoptTab(tab);

      let findbar = await newWindow.gBrowser.getFindBar(newTab);
      let findResult = await doFind(findbar, "Mozilla", waitForPdfjsResult);
      is(
        findResult.result,
        Ci.nsITypeAheadFind.FIND_FOUND,
        "The Mozilla string was found in the PDF document"
      );
      await waitForPdfJSClose(newTab.linkedBrowser);
      await BrowserTestUtils.closeWindow(newWindow);
    }
  );
});

// Make sure that performing a find in the browser continues to work after
// navigating to another page (i.e. Pdfjs disables its pdfjs interception
// listeners).
add_task(async function test_findbar_after_navigate() {
  await BrowserTestUtils.withNewTab(
    { gBrowser, url: "about:blank" },
    async browser => {
      await waitForPdfJS(browser, TEST_PDF_URL);
      const tab = gBrowser.getTabForBrowser(browser);

      ok(
        !gBrowser.isFindBarInitialized(tab),
        "Findbar shouldn't be initialized yet"
      );

      info("navigating to a webpage");
      await waitForPdfJSClose(browser);
      BrowserTestUtils.startLoadingURIString(
        browser,
        "http://mochi.test:8888/document-builder.sjs?html=

hello, world!

"

      );
      await BrowserTestUtils.browserLoaded(browser);

      ok(
        !gBrowser.isFindBarInitialized(tab),
        "Findbar still shouldn't be initialized after navigation"
      );

      let findbar = await gBrowser.getFindBar(tab);
      let findResult = await doFind(findbar, "hello", waitForFinderResult);
      is(
        findResult.result,
        Ci.nsITypeAheadFind.FIND_FOUND,
        "The hello string was found in the HTML document"
      );
    }
  );
});

Messung V0.5
C=94 H=87 G=90

¤ Dauer der Verarbeitung: 0.3 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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge