This is an automated email from the ASF dual-hosted git repository. gerben pushed a commit to branch dom-tests in repository https://gitbox.apache.org/repos/asf/incubator-annotator.git
commit d5bd5cb0fefb8fdee8f6900b00c13f7796550eb5 Author: Gerben <[email protected]> AuthorDate: Mon May 25 15:52:37 2020 +0200 Simple (but failing!) tests for minimal prefix+suffix --- packages/dom/test/text-quote-describe-cases.ts | 95 ++++++++++++++++++++++++++ packages/dom/test/text-quote-describe.ts | 9 +++ 2 files changed, 104 insertions(+) diff --git a/packages/dom/test/text-quote-describe-cases.ts b/packages/dom/test/text-quote-describe-cases.ts new file mode 100644 index 0000000..29c0d83 --- /dev/null +++ b/packages/dom/test/text-quote-describe-cases.ts @@ -0,0 +1,95 @@ +import { TextQuoteSelector } from "../../selector/src"; +import { RangeInfo } from "./utils"; + +const testCases: { + [name: string]: { + html: string, + range: RangeInfo, + expected: TextQuoteSelector, + } +} = { + 'simple': { + html: '<b>lorem ipsum dolor amet yada yada</b>', + range: { + startContainerXPath: '//b/text()', + startOffset: 12, + endContainerXPath: '//b/text()', + endOffset: 20, + }, + expected: { + type: 'TextQuoteSelector', + exact: 'dolor am', + prefix: '', + suffix: '', + }, + }, + 'minimal prefix': { + html: '<b>To annotate or not to annotate.</b>', + range: { + startContainerXPath: '//b/text()', + startOffset: 22, + endContainerXPath: '//b/text()', + endOffset: 26, + }, + expected: { + type: 'TextQuoteSelector', + exact: 'anno', + prefix: 'to ', + suffix: '', + }, + }, + 'minimal suffix': { + html: '<b>To annotate or not to annotate.</b>', + range: { + startContainerXPath: '//b/text()', + startOffset: 7, + endContainerXPath: '//b/text()', + endOffset: 11, + }, + expected: { + type: 'TextQuoteSelector', + exact: 'tate', + prefix: '', + suffix: ' ', + }, + }, + 'use suffix for start of text': { + html: '<b>to annotate or not to annotate.</b>', + range: { + startContainerXPath: '//b/text()', + startOffset: 0, + endContainerXPath: '//b/text()', + endOffset: 2, + }, + expected: { + type: 'TextQuoteSelector', + exact: 'to', + prefix: '', + suffix: ' annotate ', + }, + }, + 'use prefix for end of text': { + html: '<b>To annotate or not to annotate</b>', + range: { + startContainerXPath: '//b/text()', + startOffset: 26, + endContainerXPath: '//b/text()', + endOffset: 30, + }, + expected: { + type: 'TextQuoteSelector', + exact: 'tate', + prefix: 'to anno', + suffix: '', + }, + }, + + // TODO test for: + // emtpy range + // empty scope + // custom scope + // string edges + // element edges, across elements, etc. +}; + +export default testCases; diff --git a/packages/dom/test/text-quote-describe.ts b/packages/dom/test/text-quote-describe.ts index 8d9f74c..15447b7 100644 --- a/packages/dom/test/text-quote-describe.ts +++ b/packages/dom/test/text-quote-describe.ts @@ -20,12 +20,21 @@ import { assert } from 'chai'; import { describeTextQuote } from '../src/text-quote/describe'; +import testCases from './text-quote-describe-cases'; import testMatchCases from './text-quote-match-cases'; import { hydrateRange } from './utils'; const domParser = new window.DOMParser(); describe('createTextQuoteSelectorMatcher', () => { + for (const [name, { html, range, expected }] of Object.entries(testCases)) { + it(`works for case: ${name}`, async () => { + const doc = domParser.parseFromString(html, 'text/html'); + const result = await describeTextQuote(hydrateRange(range, doc), doc); + assert.deepEqual(result, expected); + }) + } + describe('inverts test cases of text quote matcher', () => { const applicableTestCases = Object.entries(testMatchCases) .filter(([_, { expected }]) => expected.length > 0);
