b.characters("world");
b.retain(2);
b.deleteCharacters("cd");
b.elementStart("a", Attributes.EMPTY_MAP);
b.characters("hEllo");
b.elementStart("b", new AttributesImpl("a", "1"));
b.characters("world");
b.elementStart("B", new AttributesImpl("A", "1", "b", "abc12"));
b.elementEnd();
// A non-ASCII Unicode character.
b.characters("\u2603");
b.elementEnd();
b.elementEnd();
b.deleteElementStart("a", new AttributesImpl("a", "2", "c", ""));
b.deleteCharacters("asdf");
b.deleteElementEnd();
// Now some replaceAttributes with different size and case.
b.replaceAttributes(new AttributesImpl("a", "b"), new AttributesImpl("b", "c", "c", "d"));
b.replaceAttributes(Attributes.EMPTY_MAP, new AttributesImpl("Aa", "aA"));
b.replaceAttributes(new AttributesImpl("B", "A"), new AttributesImpl());
// Try both a fresh empty AttributesImpl() instance and the preallocated
// EMPTY_MAP.
b.replaceAttributes(new AttributesImpl(), Attributes.EMPTY_MAP);
// Now we add similar cases for annotation boundaries. Since consecutive annotation
// boundaries would make the operation ill-formed, we interleave them with further
// updateAttributes tests.
b.annotationBoundary(AnnotationBoundaryMapImpl.builder().build());
b.updateAttributes(new AttributesUpdateImpl());