11namespace AngleSharp . Core . Tests . Library
22{
33 using NUnit . Framework ;
4- using static System . Net . Mime . MediaTypeNames ;
54
65 [ TestFixture ]
76 public class RangeTests
@@ -45,7 +44,7 @@ public void CanSelectSomeRange_Issue1119()
4544 var text2 = common . LastChild ;
4645 var range = document . CreateRange ( ) ;
4746 range . StartBefore ( text1 ) ;
48- range . EndAfter ( text2 ) ;
47+ range . EndBefore ( text2 ) ;
4948
5049 Assert . AreEqual ( 0 , range . Start ) ;
5150 Assert . AreEqual ( text1 . Parent , range . Head ) ;
@@ -54,5 +53,145 @@ public void CanSelectSomeRange_Issue1119()
5453 Assert . AreEqual ( common , range . CommonAncestor ) ;
5554 Assert . IsFalse ( range . IsCollapsed ) ;
5655 }
56+
57+ [ Test ]
58+ public void CanSelectSomeRange_Issue1147 ( )
59+ {
60+ var document = "<body></body>" . ToHtmlDocument ( ) ;
61+ var text1 = document . Body . AppendChild ( document . CreateTextNode ( "Text1" ) ) ;
62+ var text2 = document . Body . AppendChild ( document . CreateTextNode ( "TextLonger2" ) ) ;
63+ var range1 = document . CreateRange ( ) ;
64+ var range2 = document . CreateRange ( ) ;
65+ range1 . StartWith ( text1 , "Text" . Length ) ;
66+ range1 . EndWith ( text2 , "TextLonger" . Length ) ;
67+ range2 . StartWith ( text1 , "Text" . Length ) ;
68+ range2 . EndWith ( text2 , "TextLonger" . Length ) ;
69+ range2 . StartWith ( text2 , "TextLonger2" . Length ) ;
70+
71+ Assert . AreEqual ( "Text" . Length , range1 . Start ) ;
72+ Assert . AreEqual ( text1 , range1 . Head ) ;
73+ Assert . AreEqual ( "TextLonger" . Length , range1 . End ) ;
74+ Assert . AreEqual ( text2 , range1 . Tail ) ;
75+ Assert . AreEqual ( document . Body , range1 . CommonAncestor ) ;
76+ Assert . IsFalse ( range1 . IsCollapsed ) ;
77+ Assert . AreEqual ( "TextLonger2" . Length , range2 . Start ) ;
78+ Assert . AreEqual ( "TextLonger2" . Length , range2 . End ) ;
79+ Assert . IsTrue ( range2 . IsCollapsed ) ;
80+ }
81+
82+ [ Test ]
83+ public void CheckCommonAncestor ( )
84+ {
85+ var document = "<body></body>" . ToHtmlDocument ( ) ;
86+ var p1 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
87+ var p2 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
88+ var p11 = p1 . AppendChild ( document . CreateElement ( "p" ) ) ;
89+ var p12 = p1 . AppendChild ( document . CreateElement ( "p" ) ) ;
90+ var p21 = p2 . AppendChild ( document . CreateElement ( "p" ) ) ;
91+
92+ var range1 = document . CreateRange ( ) ;
93+ var range2 = document . CreateRange ( ) ;
94+
95+ range1 . StartAfter ( p11 ) ;
96+ range1 . EndBefore ( p12 ) ;
97+ range2 . StartAfter ( p11 ) ;
98+ range2 . EndBefore ( p21 ) ;
99+
100+ Assert . AreEqual ( p1 , range1 . CommonAncestor ) ;
101+ Assert . AreEqual ( document . Body , range2 . CommonAncestor ) ;
102+ }
103+
104+ [ Test ]
105+ public void CanIntersects ( )
106+ {
107+ var document = "<body></body>" . ToHtmlDocument ( ) ;
108+ var p1 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
109+ var p2 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
110+ var p3 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
111+
112+ var range1 = document . CreateRange ( ) ;
113+ var range2 = document . CreateRange ( ) ;
114+
115+ range1 . StartAfter ( p1 ) ;
116+ range1 . EndBefore ( p3 ) ;
117+ range2 . StartWith ( p1 , 0 ) ;
118+ range2 . EndWith ( p3 , 0 ) ;
119+
120+ Assert . IsFalse ( range1 . Intersects ( p1 ) ) ;
121+ Assert . IsTrue ( range1 . Intersects ( p2 ) ) ;
122+ Assert . IsFalse ( range1 . Intersects ( p3 ) ) ;
123+ Assert . IsTrue ( range1 . Intersects ( document . Body ) ) ;
124+
125+ Assert . IsTrue ( range2 . Intersects ( p1 ) ) ;
126+ Assert . IsTrue ( range2 . Intersects ( p2 ) ) ;
127+ Assert . IsTrue ( range2 . Intersects ( p3 ) ) ;
128+ Assert . IsTrue ( range2 . Intersects ( document . Body ) ) ;
129+ }
130+
131+ [ Test ]
132+ public void CanContains ( )
133+ {
134+ var document = "<body></body>" . ToHtmlDocument ( ) ;
135+ var p1 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
136+ var p2 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
137+ var p3 = document . Body . AppendChild ( document . CreateElement ( "p" ) ) ;
138+
139+ var range1 = document . CreateRange ( ) ;
140+ var range2 = document . CreateRange ( ) ;
141+ var range3 = document . CreateRange ( ) ;
142+
143+ range1 . StartAfter ( p1 ) ;
144+ range1 . EndBefore ( p3 ) ;
145+ range2 . StartWith ( p1 , 0 ) ;
146+ range2 . EndWith ( p3 , 0 ) ;
147+ range3 . Select ( document . Body ) ;
148+
149+ Assert . IsFalse ( range1 . Contains ( p1 , 0 ) ) ;
150+ Assert . IsTrue ( range1 . Contains ( p2 , 0 ) ) ;
151+ Assert . IsFalse ( range1 . Contains ( p3 , 0 ) ) ;
152+ Assert . IsFalse ( range1 . Contains ( document . Body , 0 ) ) ;
153+
154+ Assert . IsFalse ( range2 . Contains ( p1 , 0 ) ) ;
155+ Assert . IsTrue ( range2 . Contains ( p2 , 0 ) ) ;
156+ Assert . IsFalse ( range2 . Contains ( p3 , 0 ) ) ;
157+ Assert . IsFalse ( range2 . Contains ( document . Body , 0 ) ) ;
158+
159+ Assert . IsTrue ( range3 . Contains ( p1 , 0 ) ) ;
160+ Assert . IsTrue ( range3 . Contains ( p2 , 0 ) ) ;
161+ Assert . IsTrue ( range3 . Contains ( p3 , 0 ) ) ;
162+ Assert . IsTrue ( range3 . Contains ( document . Body , 0 ) ) ;
163+ }
164+
165+ [ Test ]
166+ public void CanClearContent ( )
167+ {
168+ var document = @"
169+ <html>
170+ <head></head>
171+ <body>
172+ <p> No deletion before start <span id=""start""></span> This should be cleared </p>
173+ <p> <span id=""toDelete""></span>This should be deleted too <span id=""end""></span> This is not to be deleted</p>
174+ <p> This should not be deleted either</p>
175+ </body>
176+ </html>" . ToHtmlDocument ( ) ;
177+ var start = document . QuerySelector ( "#start" ) ;
178+ var end = document . QuerySelector ( "#end" ) ;
179+ var toDelete = document . QuerySelector ( "#toDelete" ) ;
180+
181+ var range = document . CreateRange ( ) ;
182+
183+ range . StartWith ( start , 0 ) ;
184+ range . EndWith ( end , 0 ) ;
185+
186+ range . ClearContent ( ) ;
187+
188+ var htmlRaw = document . DocumentElement . OuterHtml ;
189+ Assert . IsTrue ( htmlRaw . Contains ( "No deletion before start" ) ) ;
190+ Assert . IsTrue ( htmlRaw . Contains ( "This is not to be deleted" ) ) ;
191+ Assert . IsTrue ( htmlRaw . Contains ( "This should not be deleted either" ) ) ;
192+ Assert . IsFalse ( htmlRaw . Contains ( "This should be cleared" ) ) ;
193+ Assert . IsFalse ( htmlRaw . Contains ( "This should be deleted too" ) ) ;
194+ Assert . IsFalse ( document . Contains ( toDelete ) ) ;
195+ }
57196 }
58197}
0 commit comments