You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@annotator.apache.org by ge...@apache.org on 2021/06/25 16:09:27 UTC

[incubator-annotator] 02/05: Add cases for matches in multiple nodes

This is an automated email from the ASF dual-hosted git repository.

gerben pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-annotator.git

commit aeb2cd8188bcbd1cd17fea0f076f5b5a95493701
Author: Gerben <ge...@treora.com>
AuthorDate: Fri Jun 25 17:16:33 2021 +0200

    Add cases for matches in multiple nodes
    
    In the case of DOM changes, a different error occurs depending on whether
    the matches are in the same or different text nodes. With different nodes,
    the infinite loop behaviour occurs.
---
 packages/dom/test/text-quote/match-cases.ts | 52 +++++++++++++++++++++++++++--
 packages/dom/test/text-quote/match.test.ts  |  2 +-
 2 files changed, 51 insertions(+), 3 deletions(-)

diff --git a/packages/dom/test/text-quote/match-cases.ts b/packages/dom/test/text-quote/match-cases.ts
index 8d344d3..8948b78 100644
--- a/packages/dom/test/text-quote/match-cases.ts
+++ b/packages/dom/test/text-quote/match-cases.ts
@@ -119,7 +119,7 @@ export const testCases: {
       },
     ],
   },
-  'two matches': {
+  'two matches in one node': {
     html: '<b>lorem ipsum dolor amet yada yada</b>',
     selector: {
       type: 'TextQuoteSelector',
@@ -140,7 +140,34 @@ export const testCases: {
       },
     ],
   },
-  'overlapping matches': {
+  'matches in multiple nodes': {
+    html: `<p>Match again and <b>again </b>and <i>again</i>!`,
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'again',
+    },
+    expected: [
+      {
+        startContainerXPath: '//p/text()[1]',
+        startOffset: 6,
+        endContainerXPath: '//p/text()[1]',
+        endOffset: 11,
+      },
+      {
+        startContainerXPath: '//b/text()',
+        startOffset: 0,
+        endContainerXPath: '//b/text()',
+        endOffset: 5,
+      },
+      {
+        startContainerXPath: '//i/text()',
+        startOffset: 0,
+        endContainerXPath: '//i/text()',
+        endOffset: 5,
+      },
+    ],
+  },
+  'overlapping matches in one node': {
     html: '<b>bananas</b>',
     selector: {
       type: 'TextQuoteSelector',
@@ -161,6 +188,27 @@ export const testCases: {
       },
     ],
   },
+  'overlapping matches stretching multiple nodes': {
+    html: '<b>bana<i>na</i>nas</b>',
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'anana',
+    },
+    expected: [
+      {
+        startContainerXPath: '//b/text()[1]',
+        startOffset: 1,
+        endContainerXPath: '//i/text()',
+        endOffset: 2,
+      },
+      {
+        startContainerXPath: '//b/text()[1]',
+        startOffset: 3,
+        endContainerXPath: '//b/text()[2]',
+        endOffset: 2,
+      },
+    ],
+  },
   'no matches': {
     html: '<b>lorem ipsum dolor amet yada yada</b>',
     selector: {
diff --git a/packages/dom/test/text-quote/match.test.ts b/packages/dom/test/text-quote/match.test.ts
index cfb0753..60819a6 100644
--- a/packages/dom/test/text-quote/match.test.ts
+++ b/packages/dom/test/text-quote/match.test.ts
@@ -173,7 +173,7 @@ describe('createTextQuoteSelectorMatcher', () => {
   });
 
   it.skip('is resistant to splitting text nodes', async () => {
-    const { html, selector, expected } = testCases['two matches'];
+    const { html, selector, expected } = testCases['matches in multiple nodes'];
     const doc = domParser.parseFromString(html, 'text/html');
 
     const matcher = createTextQuoteSelectorMatcher(selector);