@@ -279,3 +279,91 @@ def test_fragment_decompose():
279279def test_fragment_strips_top_level_tags (input_html , expected ):
280280 parser = LexborHTMLParser (input_html , is_fragment = True )
281281 assert parser .html == expected
282+
283+
284+ def test_fragment_navigation ():
285+ html = "<div>First</div><span>Second</span><p>Third</p>"
286+ parser = LexborHTMLParser (html , is_fragment = True )
287+ div = parser .root
288+ span = div .next
289+ p = span .next
290+ assert div .tag == "div"
291+ assert span .tag == "span"
292+ assert p .tag == "p"
293+ assert div .prev is None
294+ assert span .prev .tag == "div"
295+ assert p .prev .tag == "span"
296+ assert p .next is None
297+ assert div .first_child .is_text_node
298+ assert div .last_child .is_text_node
299+ assert div .first_child .text_content == "First"
300+
301+
302+ def test_fragment_attrs ():
303+ html = "<div id='test' class='foo bar' data-value='123'></div>"
304+ parser = LexborHTMLParser (html , is_fragment = True )
305+ div = parser .root
306+ assert div .attributes == {"id" : "test" , "class" : "foo bar" , "data-value" : "123" }
307+ assert div .attrs ["id" ] == "test"
308+ div .attrs ["new" ] = "value"
309+ assert div .attributes == {
310+ "id" : "test" ,
311+ "class" : "foo bar" ,
312+ "data-value" : "123" ,
313+ "new" : "value" ,
314+ }
315+
316+
317+ def test_fragment_child_alias ():
318+ html = "<div><span>content</span></div>"
319+ parser = LexborHTMLParser (html , is_fragment = True )
320+ div = parser .root
321+ assert div .child == div .first_child
322+
323+
324+ def test_fragment_tag_properties ():
325+ html = "<div id='test'>content</div>"
326+ parser = LexborHTMLParser (html , is_fragment = True )
327+ div = parser .root
328+ assert div .tag == "div"
329+ assert div .tag_id is not None
330+ assert div .mem_id is not None
331+ assert div .id == "test"
332+
333+
334+ def test_fragment_unwrap ():
335+ html = "<div><span>Hello</span> world</div>"
336+ parser = LexborHTMLParser (html , is_fragment = True )
337+ span = parser .root .css_first ("span" )
338+ span .unwrap ()
339+ assert parser .html == "<div>Hello world</div>"
340+
341+
342+ def test_fragment_unwrap_tags ():
343+ html = "<div><i>Hello</i> <b>world</b></div>"
344+ parser = LexborHTMLParser (html , is_fragment = True )
345+ parser .root .unwrap_tags (["i" , "b" ])
346+ assert parser .html == "<div>Hello world</div>"
347+
348+
349+ def test_fragment_eq ():
350+ html = "<div>test</div>"
351+ parser1 = LexborHTMLParser (html , is_fragment = True )
352+ parser2 = LexborHTMLParser (html , is_fragment = True )
353+ assert parser1 .root == parser2 .root .html
354+ assert parser1 .root == "<div>test</div>"
355+
356+
357+ def test_fragment_text_content ():
358+ html = "<div>Hello</div>"
359+ parser = LexborHTMLParser (html , is_fragment = True )
360+ text_node = parser .root .first_child
361+ assert text_node .text_content == "Hello"
362+ assert parser .root .text_content is None
363+
364+
365+ def test_fragment_comment_content ():
366+ html = "<!-- comment -->"
367+ parser = LexborHTMLParser (html , is_fragment = True )
368+ comment_node = parser .root
369+ assert comment_node .comment_content == "comment"
0 commit comments