diff --git a/Tests/HTMLRangeTests.m b/Tests/HTMLRangeTests.m
index 978e098..12834a2 100644
--- a/Tests/HTMLRangeTests.m
+++ b/Tests/HTMLRangeTests.m
@@ -887,7 +887,7 @@
XCTAssertEqual(range.endContainer, _firstText);
XCTAssertEqual(range.endOffset, 10);
- //
Title
Hello
New TextSecond text
<--Second comment-->
+ // Title
Hello
New text New TextSecond text
<--Second comment-->
// |______|
[_firstText replaceDataInRange:NSMakeRange(0, 5) withData:@"New"];
@@ -967,4 +967,119 @@
XCTAssertEqual(range.endContainer, _firstText);
XCTAssertEqual(range.endOffset, 8);
}
+
+- (void)testThatCharacterDataMutationsUpdateRangeCorrectly_DifferentBoundaries
+{
+ HTMLRange *range = [[HTMLRange alloc] initWithDowcument:_document];
+
+ // Title
Hello
First textSecond text
<--Second comment-->
+ // |___________________________|
+ [range setStartNode:_firstText startOffset:5];
+ [range setEndNode:_secondText endOffset:3];
+
+ // Title
Hello
First text New TextSecond text
<--Second comment-->
+ // |____________________________________|
+ [_firstText appendData:@" New Text"];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 5);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
New text New TextSecond text
<--Second comment-->
+ // |______________________________________|
+ [_firstText replaceDataInRange:NSMakeRange(0, 5) withData:@"New"];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 0);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
New TextSecond text
<--Second comment-->
+ // |_____________________________|
+ [_firstText setData:@"New Text"];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 0);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+
+ // Title
Hello
NewTextSecond text
<--Second comment-->
+ // |____________________________|
+ [_firstText deleteDataInRange:NSMakeRange(3, 1)];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 0);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
NewNewTextSecond text
<--Second comment-->
+ // |_______________________________|
+ [_firstText insertData:@"New" atOffset:3];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 0);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
NewNewTextSecond text
<--Second comment-->
+ // |____________________________|
+ [range setStartNode:_firstText startOffset:3];
+
+ // Title
Hello
PrefixNewNewTextSecond text
<--Second comment-->
+ // |____________________________|
+ [_firstText insertData:@"Prefix" atOffset:0];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 9);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
PrefixNewTextSecond text
<--Second comment-->
+ // |____________________________|
+ [_firstText deleteDataInRange:NSMakeRange(6, 3)];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 6);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
PreABCDTextSecond text
<--Second comment-->
+ // |_____________________________|
+ [_firstText replaceDataInRange:NSMakeRange(3, 6) withData:@"ABCD"];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 3);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
Pre TextSecond text
<--Second comment-->
+ // |__________________________|
+ [_firstText replaceDataInRange:NSMakeRange(3, 4) withData:@" "];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 3);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 3);
+
+ // Title
Hello
Pre TextPrefixSecond text
<--Second comment-->
+ // |________________________________|
+ [_secondText insertData:@"Prefix" atOffset:0];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 3);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 9);
+
+ // Title
Hello
Pre TextPrefixSecond text
<--Second comment-->
+ // |___________________|
+ [_firstComment setData:@"X"];
+
+ XCTAssertEqual(range.startContainer, _firstText);
+ XCTAssertEqual(range.startOffset, 3);
+ XCTAssertEqual(range.endContainer, _secondText);
+ XCTAssertEqual(range.endOffset, 9);
+}
+
@end