Commit 9646ac54 authored by Eitan Isaacson's avatar Eitan Isaacson
Browse files

Bug 1369890 - Port mochitest/scroll/test_zoom_text.html to browser test. r=surkov

parent bf41cd14
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ TEST_DIRS += ['tests/mochitest']
BROWSER_CHROME_MANIFESTS += [
  'tests/browser/browser.ini',
  'tests/browser/e10s/browser.ini',
  'tests/browser/scroll/browser.ini',
  'tests/browser/states/browser.ini'
]

+9 −0
Original line number Diff line number Diff line
[DEFAULT]
skip-if = e10s && os == 'win' && release_or_beta
support-files =
  head.js
  !/accessible/tests/browser/events.js
  !/accessible/tests/browser/shared-head.js
  !/accessible/tests/mochitest/*.js

[browser_test_zoom_text.js]
+119 −0
Original line number Diff line number Diff line
/* 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/. */

'use strict';

/* import-globals-from ../../mochitest/layout.js */
loadScripts({ name: 'layout.js', dir: MOCHITESTS_DIR });

async function runTests(browser, accDoc) {
  let paragraph = findAccessibleChildByID(accDoc, "paragraph", [nsIAccessibleText]);
  let offset = 64; // beginning of 4th stanza

  let [x /*,y*/] = getPos(paragraph);
  let [docX, docY] = getPos(accDoc);

  paragraph.scrollSubstringToPoint(offset, offset,
                                   COORDTYPE_SCREEN_RELATIVE, docX, docY);
  testTextPos(paragraph, offset, [x, docY], COORDTYPE_SCREEN_RELATIVE);

  await zoomContent(browser, 2.0);

  paragraph = findAccessibleChildByID(accDoc, "paragraph2", [nsIAccessibleText]);
  offset = 52; // // beginning of 4th stanza
  [x /*,y*/] = getPos(paragraph);
  paragraph.scrollSubstringToPoint(offset, offset,
                                   COORDTYPE_SCREEN_RELATIVE, docX, docY);
  testTextPos(paragraph, offset, [x, docY], COORDTYPE_SCREEN_RELATIVE);
}

/**
 * Test caching of accessible object states
 */
addAccessibleTask(`
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br><hr>
  <p id='paragraph'>
    Пошел котик на торжок<br>
    Купил котик пирожок<br>
    Пошел котик на улочку<br>
    Купил котик булочку<br>
  </p>
  <hr><br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br><hr>
  <p id='paragraph2'>
    Самому ли съесть<br>
    Либо Сашеньке снесть<br>
    Я и сам укушу<br>
    Я и Сашеньке снесу<br>
  </p>
  <hr><br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>
  <br><br><br><br><br><br><br><br><br><br>`,
  runTests
);
+30 −0
Original line number Diff line number Diff line
/* 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/. */

'use strict';

/* exported zoomContent */

// Load the shared-head file first.
/* import-globals-from ../shared-head.js */
Services.scriptloader.loadSubScript(
  'chrome://mochitests/content/browser/accessible/tests/browser/shared-head.js',
  this);

async function zoomContent(browser, zoom)
{
  return ContentTask.spawn(browser, zoom, _zoom => {
    let docShell = content
      .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
      .getInterface(Components.interfaces.nsIWebNavigation)
      .QueryInterface(Components.interfaces.nsIDocShell);
    let docViewer = docShell.contentViewer;

    docViewer.fullZoom = _zoom;
  });
}

// Loading and common.js from accessible/tests/mochitest/ for all tests, as
// well as events.js.
loadScripts({ name: 'common.js', dir: MOCHITESTS_DIR }, 'events.js');
+25 −6
Original line number Diff line number Diff line
@@ -208,14 +208,15 @@ function addAccessibleTask(doc, task) {
      url = `${CURRENT_CONTENT_DIR}e10s/${doc}`;
    } else {
      // Assume it's a markup snippet.
      url = `data:text/html,
        <html>
      url = "data:text/html;charset=utf-8;base64,";
      url += btoa(
        `<html>
          <head>
            <meta charset="utf-8"/>
            <title>Accessibility Test</title>
          </head>
          <body id="body">${doc}</body>
        </html>`;
        </html>`);
    }

    registerCleanupFunction(() => {
@@ -284,16 +285,34 @@ function isDefunct(accessible) {
 * looks for an accessible that matches based on its DOMNode id.
 * @param  {nsIAccessible}  accessible root accessible
 * @param  {String}         id         id to look up accessible for
 * @param  {Array?}         interfaces the interface or an array interfaces
 *                                     to query it/them from obtained accessible
 * @return {nsIAccessible?}            found accessible if any
 */
function findAccessibleChildByID(accessible, id) {
function findAccessibleChildByID(accessible, id, interfaces) {
  if (getAccessibleDOMNodeID(accessible) === id) {
    return accessible;
    return queryInterfaces(accessible, interfaces);
  }
  for (let i = 0; i < accessible.children.length; ++i) {
    let found = findAccessibleChildByID(accessible.getChildAt(i), id);
    if (found) {
      return found;
      return queryInterfaces(found, interfaces);
    }
  }
}

function queryInterfaces(accessible, interfaces) {
  if (!interfaces) {
    return accessible;
  }

  for (let iface of interfaces.filter(i => !(accessible instanceof i))) {
    try {
      accessible.QueryInterface(iface);
    } catch (e) {
      ok(false, "Can't query " + iface);
    }
  }

  return accessible;
}
Loading