mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-24 09:08:07 +02:00
Merge pull request #19470 from ryzokuken/fix-autolinking-edge-cases
Fix autolinking errors
This commit is contained in:
commit
d10cea5dd0
4 changed files with 85 additions and 15 deletions
|
@ -13,7 +13,15 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { closePages, loadAndWait } from "./test_utils.mjs";
|
||||
import { closePages, createPromise, loadAndWait } from "./test_utils.mjs";
|
||||
|
||||
function waitForLinkAnnotations(page) {
|
||||
return createPromise(page, resolve => {
|
||||
window.PDFViewerApplication.eventBus.on("linkannotationsadded", resolve, {
|
||||
once: true,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
describe("autolinker", function () {
|
||||
describe("bug1019475_2.pdf", function () {
|
||||
|
@ -38,6 +46,7 @@ describe("autolinker", function () {
|
|||
it("must appropriately add link annotations when relevant", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await waitForLinkAnnotations(page);
|
||||
const url = await page.$$eval(
|
||||
".annotationLayer > .linkAnnotation > a",
|
||||
annotations => annotations.map(a => a.href)
|
||||
|
@ -73,6 +82,7 @@ describe("autolinker", function () {
|
|||
it("must not add links when unnecessary", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await waitForLinkAnnotations(page);
|
||||
const linkIds = await page.$$eval(
|
||||
".annotationLayer > .linkAnnotation > a",
|
||||
annotations =>
|
||||
|
@ -106,6 +116,7 @@ describe("autolinker", function () {
|
|||
it("must not add links that overlap even if the URLs are different", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await waitForLinkAnnotations(page);
|
||||
const linkIds = await page.$$eval(
|
||||
".annotationLayer > .linkAnnotation > a",
|
||||
annotations =>
|
||||
|
@ -121,4 +132,50 @@ describe("autolinker", function () {
|
|||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("PR 19470", function () {
|
||||
let pages;
|
||||
|
||||
beforeAll(async () => {
|
||||
pages = await loadAndWait(
|
||||
"bug1019475_2.pdf",
|
||||
".annotationLayer",
|
||||
null,
|
||||
null,
|
||||
{
|
||||
enableAutoLinking: true,
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await closePages(pages);
|
||||
});
|
||||
|
||||
it("must not repeatedly add link annotations redundantly", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await waitForLinkAnnotations(page);
|
||||
let url = await page.$$eval(
|
||||
".annotationLayer > .linkAnnotation > a",
|
||||
annotations => annotations.map(a => a.href)
|
||||
);
|
||||
expect(url.length).withContext(`In ${browserName}`).toEqual(1);
|
||||
|
||||
await page.evaluate(() =>
|
||||
window.PDFViewerApplication.pdfViewer.updateScale({
|
||||
drawingDelay: -1,
|
||||
scaleFactor: 2,
|
||||
})
|
||||
);
|
||||
await waitForLinkAnnotations(page);
|
||||
url = await page.$$eval(
|
||||
".annotationLayer > .linkAnnotation > a",
|
||||
annotations => annotations.map(a => a.href)
|
||||
);
|
||||
expect(url.length).withContext(`In ${browserName}`).toEqual(1);
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -87,6 +87,9 @@ describe("autolinker", function () {
|
|||
"CAP.cap@Gmail.Com", // Keep the original case.
|
||||
"mailto:CAP.cap@Gmail.Com",
|
||||
],
|
||||
["partl@mail.boku.ac.at", "mailto:partl@mail.boku.ac.at"],
|
||||
["Irene.Hyna@bmwf.ac.at", "mailto:Irene.Hyna@bmwf.ac.at"],
|
||||
["<hi@foo.bar.baz>", "mailto:hi@foo.bar.baz"],
|
||||
]);
|
||||
});
|
||||
|
||||
|
@ -140,6 +143,7 @@ describe("autolinker", function () {
|
|||
"http//[00:00:00:00:00:00", // Invalid IPv6 address.
|
||||
"http//[]", // Empty IPv6 address.
|
||||
"abc.example.com", // URL without scheme.
|
||||
"JD?M$0QP)lKn06l1apKDC@\\qJ4B!!(5m+j.7F790m", // Not a valid email.
|
||||
].join("\n")
|
||||
);
|
||||
expect(matches.length).toEqual(0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue