void testBoundary(Document& document, HTMLTextFormControlElement& textControl) {
  document.updateStyleAndLayout();
  for (unsigned i = 0; i < textControl.innerEditorValue().length(); i++) {
    textControl.setSelectionRange(i, i);
    Position position = document.frame()->selection().start();
    SCOPED_TRACE(::testing::Message()
                 << "offset " << position.computeEditingOffset() << " of "
                 << nodePositionAsStringForTesting(position.anchorNode())
                        .ascii()
                        .data());
    {
      SCOPED_TRACE("HTMLTextFormControlElement::startOfWord");
      testFunctionEquivalence(position, HTMLTextFormControlElement::startOfWord,
                              startOfWord);
    }
    {
      SCOPED_TRACE("HTMLTextFormControlElement::endOfWord");
      testFunctionEquivalence(position, HTMLTextFormControlElement::endOfWord,
                              endOfWord);
    }
    {
      SCOPED_TRACE("HTMLTextFormControlElement::startOfSentence");
      testFunctionEquivalence(position,
                              HTMLTextFormControlElement::startOfSentence,
                              startOfSentence);
    }
    {
      SCOPED_TRACE("HTMLTextFormControlElement::endOfSentence");
      testFunctionEquivalence(
          position, HTMLTextFormControlElement::endOfSentence, endOfSentence);
    }
  }
}