Add a few more cases.
diff --git a/packages/dom/test/text-quote-match.ts b/packages/dom/test/text-quote-match.ts
index 4e9eb57..65d5c15 100644
--- a/packages/dom/test/text-quote-match.ts
+++ b/packages/dom/test/text-quote-match.ts
@@ -39,8 +39,8 @@
     expected: RangeInfo[],
   }
 } = {
-  "simple": {
-    html: `<b>lorem ipsum dolor amet yada yada</b>`,
+  'simple': {
+    html: '<b>lorem ipsum dolor amet yada yada</b>',
     selector: {
       type: 'TextQuoteSelector',
       exact: 'dolor am',
@@ -54,6 +54,93 @@
       },
     ]
   },
+  'across elements': {
+    html: '<b>lorem <i>ipsum dolor</i> amet yada yada</b>',
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'dolor am',
+    },
+    expected: [
+      {
+        startContainer: '//i/text()',
+        startOffset: 6,
+        endContainer: '//b/text()[2]',
+        endOffset: 3,
+      },
+    ]
+  },
+  'exact element contents': {
+    html: '<b>lorem <i>ipsum dolor</i> amet yada yada</b>',
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'ipsum dolor',
+    },
+    expected: [
+      {
+        startContainer: '//i/text()',
+        startOffset: 0,
+        endContainer: '//b/text()[2]',
+        endOffset: 0,
+      },
+    ]
+  },
+  'text inside <head>': {
+    html: '<head><title>The title</title></head><b>lorem ipsum dolor amet yada yada</b>',
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'title',
+    },
+    expected: [
+      {
+        startContainer: '//title/text()',
+        startOffset: 4,
+        endContainer: '//b/text()[1]',
+        endOffset: 0,
+      },
+    ]
+  },
+  'two matches': {
+    html: '<b>lorem ipsum dolor amet yada yada</b>',
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'yada',
+    },
+    expected: [
+      {
+        startContainer: '//b/text()',
+        startOffset: 23,
+        endContainer: '//b/text()',
+        endOffset: 27,
+      },
+      {
+        startContainer: '//b/text()',
+        startOffset: 28,
+        endContainer: '//b/text()',
+        endOffset: 32,
+      },
+    ]
+  },
+  'overlapping matches': {
+    html: '<b>bananas</b>',
+    selector: {
+      type: 'TextQuoteSelector',
+      exact: 'ana',
+    },
+    expected: [
+      {
+        startContainer: '//b/text()',
+        startOffset: 1,
+        endContainer: '//b/text()',
+        endOffset: 4,
+      },
+      {
+        startContainer: '//b/text()',
+        startOffset: 3,
+        endContainer: '//b/text()',
+        endOffset: 6,
+      },
+    ]
+  },
 };
 
 describe('createTextQuoteSelectorMatcher', () => {
@@ -61,7 +148,7 @@
     it(`works for case: '${name}'`, async () => {
       const doc = domParser.parseFromString(html, 'text/html');
       const matcher = createTextQuoteSelectorMatcher(selector);
-      const matches = await asyncIterableToArray(matcher(doc.body));
+      const matches = await asyncIterableToArray(matcher(doc));
       assert.equal(matches.length, expected.length);
       matches.forEach((match, i) => {
         assert.include(match, hydrateRange(expected[i], doc));