diff --git a/telethon/extensions/html.py b/telethon/extensions/html.py index 3d3b6993..9732b615 100644 --- a/telethon/extensions/html.py +++ b/telethon/extensions/html.py @@ -159,7 +159,7 @@ def unparse(text: str, entities: Iterable[TypeMessageEntity], _offset: int = 0, html = [] last_offset = 0 for i, entity in enumerate(entities): - if entity.offset > _offset + _length: + if entity.offset >= _offset + _length: break relative_offset = entity.offset - _offset if relative_offset > last_offset: diff --git a/tests/telethon/extensions/test_html.py b/tests/telethon/extensions/test_html.py index a6a869a4..ee497321 100644 --- a/tests/telethon/extensions/test_html.py +++ b/tests/telethon/extensions/test_html.py @@ -2,7 +2,7 @@ Tests for `telethon.extensions.html`. """ from telethon.extensions import html -from telethon.tl.types import MessageEntityBold, MessageEntityTextUrl +from telethon.tl.types import MessageEntityBold, MessageEntityItalic, MessageEntityTextUrl def test_entity_edges(): @@ -36,3 +36,18 @@ def test_trailing_malformed_entities(): entities = [MessageEntityTextUrl(offset=2, length=43, url='https://example.com')] result = html.unparse(text, entities) assert result == '🏆Telegram Official Android Challenge is over🏆' + + +def test_entities_together(): + """ + Test that an entity followed immediately by a different one behaves well. + """ + original = '⚙️Settings' + stripped = '⚙️Settings' + + text, entities = html.parse(original) + assert text == stripped + assert entities == [MessageEntityBold(0, 2), MessageEntityItalic(2, 8)] + + text = html.unparse(text, entities) + assert text == original diff --git a/tests/telethon/extensions/test_markdown.py b/tests/telethon/extensions/test_markdown.py index f4ce0e23..2f263644 100644 --- a/tests/telethon/extensions/test_markdown.py +++ b/tests/telethon/extensions/test_markdown.py @@ -2,7 +2,7 @@ Tests for `telethon.extensions.markdown`. """ from telethon.extensions import markdown -from telethon.tl.types import MessageEntityBold, MessageEntityTextUrl +from telethon.tl.types import MessageEntityBold, MessageEntityItalic, MessageEntityTextUrl def test_entity_edges(): @@ -36,3 +36,18 @@ def test_trailing_malformed_entities(): entities = [MessageEntityTextUrl(offset=2, length=43, url='https://example.com')] result = markdown.unparse(text, entities) assert result == "🏆[Telegram Official Android Challenge is over🏆](https://example.com)" + + +def test_entities_together(): + """ + Test that an entity followed immediately by a different one behaves well. + """ + original = '**⚙️**__Settings__' + stripped = '⚙️Settings' + + text, entities = markdown.parse(original) + assert text == stripped + assert entities == [MessageEntityBold(0, 2), MessageEntityItalic(2, 8)] + + text = markdown.unparse(text, entities) + assert text == original