| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | 
							- /* Copyright 2021 Mozilla Foundation
 
-  *
 
-  * Licensed under the Apache License, Version 2.0 (the "License");
 
-  * you may not use this file except in compliance with the License.
 
-  * You may obtain a copy of the License at
 
-  *
 
-  *     http://www.apache.org/licenses/LICENSE-2.0
 
-  *
 
-  * Unless required by applicable law or agreed to in writing, software
 
-  * distributed under the License is distributed on an "AS IS" BASIS,
 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-  * See the License for the specific language governing permissions and
 
-  * limitations under the License.
 
-  */
 
- const { closePages, loadAndWait } = require("./test_utils.js");
 
- describe("accessibility", () => {
 
-   describe("structure tree", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("structure_simple.pdf", ".structTree");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must build structure that maps to text layer", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           await page.waitForSelector(".structTree");
 
-           // Check the headings match up.
 
-           const head1 = await page.$eval(
 
-             ".structTree [role='heading'][aria-level='1'] span",
 
-             el =>
 
-               document.getElementById(el.getAttribute("aria-owns")).textContent
 
-           );
 
-           expect(head1).withContext(`In ${browserName}`).toEqual("Heading 1");
 
-           const head2 = await page.$eval(
 
-             ".structTree [role='heading'][aria-level='2'] span",
 
-             el =>
 
-               document.getElementById(el.getAttribute("aria-owns")).textContent
 
-           );
 
-           expect(head2).withContext(`In ${browserName}`).toEqual("Heading 2");
 
-           // Check the order of the content.
 
-           const texts = await page.$$eval(".structTree [aria-owns]", nodes =>
 
-             nodes.map(
 
-               el =>
 
-                 document.getElementById(el.getAttribute("aria-owns"))
 
-                   .textContent
 
-             )
 
-           );
 
-           expect(texts)
 
-             .withContext(`In ${browserName}`)
 
-             .toEqual([
 
-               "Heading 1",
 
-               "This paragraph 1.",
 
-               "Heading 2",
 
-               "This paragraph 2.",
 
-             ]);
 
-         })
 
-       );
 
-     });
 
-   });
 
-   describe("Annotation", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait(
 
-         "tracemonkey_a11y.pdf",
 
-         ".textLayer .endOfContent"
 
-       );
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     function getSpans(page) {
 
-       return page.evaluate(() => {
 
-         const elements = document.querySelectorAll(
 
-           `.textLayer span[aria-owns]:not([role="presentation"])`
 
-         );
 
-         const results = [];
 
-         for (const element of elements) {
 
-           results.push(element.innerText);
 
-         }
 
-         return results;
 
-       });
 
-     }
 
-     it("must check that some spans are linked to some annotations thanks to aria-owns", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           const spanContents = await getSpans(page);
 
-           expect(spanContents)
 
-             .withContext(`In ${browserName}`)
 
-             .toEqual(["Languages", "@intel.com", "Abstract", "Introduction"]);
 
-         })
 
-       );
 
-     });
 
-   });
 
-   describe("Annotations order", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("fields_order.pdf", ".annotationLayer");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must check that the text fields are in the visual order", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           const ids = await page.evaluate(() => {
 
-             const elements = document.querySelectorAll(
 
-               ".annotationLayer .textWidgetAnnotation"
 
-             );
 
-             const results = [];
 
-             for (const element of elements) {
 
-               results.push(element.getAttribute("data-annotation-id"));
 
-             }
 
-             return results;
 
-           });
 
-           expect(ids)
 
-             .withContext(`In ${browserName}`)
 
-             .toEqual(["32R", "30R", "31R", "34R", "29R", "33R"]);
 
-         })
 
-       );
 
-     });
 
-   });
 
- });
 
 
  |