| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 | 
							- /* Copyright 2020 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,
 
-   getSelector,
 
-   getQuerySelector,
 
-   loadAndWait,
 
- } = require("./test_utils.js");
 
- describe("Annotation highlight", () => {
 
-   describe("annotation-highlight.pdf", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait(
 
-         "annotation-highlight.pdf",
 
-         "[data-annotation-id='19R']"
 
-       );
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must show a popup on mouseover", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           let hidden = await page.$eval(
 
-             "[data-annotation-id='21R']",
 
-             el => el.hidden
 
-           );
 
-           expect(hidden).withContext(`In ${browserName}`).toEqual(true);
 
-           await page.hover("[data-annotation-id='19R']");
 
-           await page.waitForSelector("[data-annotation-id='21R']", {
 
-             visible: true,
 
-             timeout: 0,
 
-           });
 
-           hidden = await page.$eval(
 
-             "[data-annotation-id='21R']",
 
-             el => el.hidden
 
-           );
 
-           expect(hidden).withContext(`In ${browserName}`).toEqual(false);
 
-         })
 
-       );
 
-     });
 
-   });
 
- });
 
- describe("Checkbox annotation", () => {
 
-   describe("issue12706.pdf", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("issue12706.pdf", "[data-annotation-id='63R']");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must let checkboxes with the same name behave like radio buttons", async () => {
 
-       const selectors = [63, 70, 79].map(n => `[data-annotation-id='${n}R']`);
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           for (const selector of selectors) {
 
-             await page.click(selector);
 
-             await page.waitForFunction(
 
-               `document.querySelector("${selector} > :first-child").checked`
 
-             );
 
-             for (const otherSelector of selectors) {
 
-               const checked = await page.$eval(
 
-                 `${otherSelector} > :first-child`,
 
-                 el => el.checked
 
-               );
 
-               expect(checked)
 
-                 .withContext(`In ${browserName}`)
 
-                 .toBe(selector === otherSelector);
 
-             }
 
-           }
 
-         })
 
-       );
 
-     });
 
-   });
 
-   describe("issue15597.pdf", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("issue15597.pdf", "[data-annotation-id='7R']");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must check the checkbox", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           const selector = "[data-annotation-id='7R']";
 
-           await page.click(selector);
 
-           await page.waitForFunction(
 
-             `document.querySelector("${selector} > :first-child").checked`
 
-           );
 
-           expect(true).withContext(`In ${browserName}`).toEqual(true);
 
-         })
 
-       );
 
-     });
 
-   });
 
- });
 
- describe("Text widget", () => {
 
-   describe("issue13271.pdf", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("issue13271.pdf", "[data-annotation-id='24R']");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must update all the fields with the same value", async () => {
 
-       const base = "hello world";
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           await page.type(getSelector("25R"), base);
 
-           await page.waitForFunction(`${getQuerySelector("24R")}.value !== ""`);
 
-           await page.waitForFunction(`${getQuerySelector("26R")}.value !== ""`);
 
-           let text = await page.$eval(getSelector("24R"), el => el.value);
 
-           expect(text).withContext(`In ${browserName}`).toEqual(base);
 
-           text = await page.$eval(getSelector("26R"), el => el.value);
 
-           expect(text).withContext(`In ${browserName}`).toEqual(base);
 
-         })
 
-       );
 
-     });
 
-   });
 
- });
 
- describe("Annotation and storage", () => {
 
-   describe("issue14023.pdf", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("issue14023.pdf", "[data-annotation-id='64R']");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must let checkboxes with the same name behave like radio buttons", async () => {
 
-       const text1 = "hello world!";
 
-       const text2 = "!dlrow olleh";
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           // Text field.
 
-           await page.type(getSelector("64R"), text1);
 
-           // Checkbox.
 
-           await page.click("[data-annotation-id='65R']");
 
-           // Radio.
 
-           await page.click("[data-annotation-id='67R']");
 
-           for (const [pageNumber, textId, checkId, radio1Id, radio2Id] of [
 
-             [2, "18R", "19R", "21R", "20R"],
 
-             [5, "23R", "24R", "22R", "25R"],
 
-           ]) {
 
-             await page.evaluate(n => {
 
-               window.document
 
-                 .querySelectorAll(`[data-page-number="${n}"][class="page"]`)[0]
 
-                 .scrollIntoView();
 
-             }, pageNumber);
 
-             // Need to wait to have a displayed text input.
 
-             await page.waitForSelector(getSelector(textId), {
 
-               timeout: 0,
 
-             });
 
-             const text = await page.$eval(getSelector(textId), el => el.value);
 
-             expect(text).withContext(`In ${browserName}`).toEqual(text1);
 
-             let checked = await page.$eval(
 
-               getSelector(checkId),
 
-               el => el.checked
 
-             );
 
-             expect(checked).toEqual(true);
 
-             checked = await page.$eval(getSelector(radio1Id), el => el.checked);
 
-             expect(checked).toEqual(false);
 
-             checked = await page.$eval(getSelector(radio2Id), el => el.checked);
 
-             expect(checked).toEqual(false);
 
-           }
 
-           // Change data on page 5 and check that other pages changed.
 
-           // Text field.
 
-           await page.type(getSelector("23R"), text2);
 
-           // Checkbox.
 
-           await page.click("[data-annotation-id='24R']");
 
-           // Radio.
 
-           await page.click("[data-annotation-id='25R']");
 
-           for (const [pageNumber, textId, checkId, radio1Id, radio2Id] of [
 
-             [1, "64R", "65R", "67R", "68R"],
 
-             [2, "18R", "19R", "21R", "20R"],
 
-           ]) {
 
-             await page.evaluate(n => {
 
-               window.document
 
-                 .querySelectorAll(`[data-page-number="${n}"][class="page"]`)[0]
 
-                 .scrollIntoView();
 
-             }, pageNumber);
 
-             // Need to wait to have a displayed text input.
 
-             await page.waitForSelector(getSelector(textId), {
 
-               timeout: 0,
 
-             });
 
-             const text = await page.$eval(getSelector(textId), el => el.value);
 
-             expect(text)
 
-               .withContext(`In ${browserName}`)
 
-               .toEqual(text2 + text1);
 
-             let checked = await page.$eval(
 
-               getSelector(checkId),
 
-               el => el.checked
 
-             );
 
-             expect(checked).toEqual(false);
 
-             checked = await page.$eval(getSelector(radio1Id), el => el.checked);
 
-             expect(checked).toEqual(false);
 
-             checked = await page.$eval(getSelector(radio2Id), el => el.checked);
 
-             expect(checked).toEqual(false);
 
-           }
 
-         })
 
-       );
 
-     });
 
-   });
 
- });
 
- describe("ResetForm action", () => {
 
-   describe("resetform.pdf", () => {
 
-     let pages;
 
-     beforeAll(async () => {
 
-       pages = await loadAndWait("resetform.pdf", "[data-annotation-id='63R']");
 
-     });
 
-     afterAll(async () => {
 
-       await closePages(pages);
 
-     });
 
-     it("must reset all fields", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           const base = "hello world";
 
-           for (let i = 63; i <= 67; i++) {
 
-             await page.type(getSelector(`${i}R`), base);
 
-           }
 
-           const selectors = [69, 71, 75].map(
 
-             n => `[data-annotation-id='${n}R']`
 
-           );
 
-           for (const selector of selectors) {
 
-             await page.click(selector);
 
-           }
 
-           await page.select(getSelector("78R"), "b");
 
-           await page.select(getSelector("81R"), "f");
 
-           await page.click("[data-annotation-id='82R']");
 
-           await page.waitForFunction(`${getQuerySelector("63R")}.value === ""`);
 
-           for (let i = 63; i <= 68; i++) {
 
-             const text = await page.$eval(getSelector(`${i}R`), el => el.value);
 
-             expect(text).withContext(`In ${browserName}`).toEqual("");
 
-           }
 
-           const ids = [69, 71, 72, 73, 74, 75, 76, 77];
 
-           for (const id of ids) {
 
-             const checked = await page.$eval(
 
-               getSelector(`${id}R`),
 
-               el => el.checked
 
-             );
 
-             expect(checked).withContext(`In ${browserName}`).toEqual(false);
 
-           }
 
-           let selected = await page.$eval(
 
-             `${getSelector("78R")} [value="a"]`,
 
-             el => el.selected
 
-           );
 
-           expect(selected).withContext(`In ${browserName}`).toEqual(true);
 
-           selected = await page.$eval(
 
-             `${getSelector("81R")} [value="d"]`,
 
-             el => el.selected
 
-           );
 
-           expect(selected).withContext(`In ${browserName}`).toEqual(true);
 
-         })
 
-       );
 
-     });
 
-     it("must reset some fields", async () => {
 
-       await Promise.all(
 
-         pages.map(async ([browserName, page]) => {
 
-           const base = "hello world";
 
-           for (let i = 63; i <= 68; i++) {
 
-             await page.type(getSelector(`${i}R`), base);
 
-           }
 
-           const selectors = [69, 71, 72, 73, 75].map(
 
-             n => `[data-annotation-id='${n}R']`
 
-           );
 
-           for (const selector of selectors) {
 
-             await page.click(selector);
 
-           }
 
-           await page.select(getSelector("78R"), "b");
 
-           await page.select(getSelector("81R"), "f");
 
-           await page.click("[data-annotation-id='84R']");
 
-           await page.waitForFunction(`${getQuerySelector("63R")}.value === ""`);
 
-           for (let i = 63; i <= 68; i++) {
 
-             const expected = (i - 3) % 2 === 0 ? "" : base;
 
-             const text = await page.$eval(getSelector(`${i}R`), el => el.value);
 
-             expect(text).withContext(`In ${browserName}`).toEqual(expected);
 
-           }
 
-           let ids = [69, 72, 73, 74, 76, 77];
 
-           for (const id of ids) {
 
-             const checked = await page.$eval(
 
-               getSelector(`${id}R`),
 
-               el => el.checked
 
-             );
 
-             expect(checked)
 
-               .withContext(`In ${browserName + id}`)
 
-               .toEqual(false);
 
-           }
 
-           ids = [71, 75];
 
-           for (const id of ids) {
 
-             const checked = await page.$eval(
 
-               getSelector(`${id}R`),
 
-               el => el.checked
 
-             );
 
-             expect(checked).withContext(`In ${browserName}`).toEqual(true);
 
-           }
 
-           let selected = await page.$eval(
 
-             `${getSelector("78R")} [value="a"]`,
 
-             el => el.selected
 
-           );
 
-           expect(selected).withContext(`In ${browserName}`).toEqual(true);
 
-           selected = await page.$eval(
 
-             `${getSelector("81R")} [value="f"]`,
 
-             el => el.selected
 
-           );
 
-           expect(selected).withContext(`In ${browserName}`).toEqual(true);
 
-         })
 
-       );
 
-     });
 
-   });
 
- });
 
 
  |