|
# retoor <retoor@molodetz.nl>
|
|
|
|
from devplacepy.services.markdown_preserve import MarkdownPreserver
|
|
|
|
|
|
def test_extract_and_restore_round_trip():
|
|
preserver = MarkdownPreserver()
|
|
original = "Some text\n```python\nx = 1\n```\nMore text"
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert "```" not in sanitized
|
|
restored = preserver.restore_blocks(sanitized)
|
|
assert restored == original
|
|
|
|
|
|
def test_extract_empty_text():
|
|
preserver = MarkdownPreserver()
|
|
assert preserver.extract_blocks("") == ""
|
|
assert preserver.extract_blocks(None) == ""
|
|
|
|
|
|
def test_extract_no_code_blocks():
|
|
preserver = MarkdownPreserver()
|
|
text = "Just some plain text with no code."
|
|
sanitized = preserver.extract_blocks(text)
|
|
assert sanitized == text
|
|
assert preserver.restore_blocks(sanitized) == text
|
|
|
|
|
|
def test_extract_fenced_with_language():
|
|
preserver = MarkdownPreserver()
|
|
original = "Before\n```python\ndef foo():\n pass\n```\nAfter"
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert "```" not in sanitized
|
|
assert preserver.restore_blocks(sanitized) == original
|
|
|
|
|
|
def test_extract_fenced_without_language():
|
|
preserver = MarkdownPreserver()
|
|
original = "Before\n```\ncode block\n```\nAfter"
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert "```" not in sanitized
|
|
assert preserver.restore_blocks(sanitized) == original
|
|
|
|
|
|
def test_extract_multiple_fenced_blocks():
|
|
preserver = MarkdownPreserver()
|
|
original = "A\n```python\nx = 1\n```\nB\n```js\ny = 2\n```\nC"
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert "```" not in sanitized
|
|
assert preserver.restore_blocks(sanitized) == original
|
|
|
|
|
|
def test_extract_inline_code():
|
|
preserver = MarkdownPreserver()
|
|
original = "Use the `os.path.join` function."
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert "`" not in sanitized
|
|
assert preserver.restore_blocks(sanitized) == original
|
|
|
|
|
|
def test_extract_fenced_and_inline():
|
|
preserver = MarkdownPreserver()
|
|
original = "Text with `inline` and\n```python\ncode\n```\nmore `code` here."
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert "`" not in sanitized
|
|
assert "```" not in sanitized
|
|
assert preserver.restore_blocks(sanitized) == original
|
|
|
|
|
|
def test_restore_text_without_placeholders():
|
|
preserver = MarkdownPreserver()
|
|
preserver.extract_blocks("```python\nx\n```")
|
|
result = preserver.restore_blocks("plain text with no tokens")
|
|
assert result == "plain text with no tokens"
|
|
|
|
|
|
def test_placeholder_uniqueness():
|
|
preserver = MarkdownPreserver()
|
|
original = "A\n```a\n1\n```\nB\n```b\n2\n```\nC\n```c\n3\n```"
|
|
sanitized = preserver.extract_blocks(original)
|
|
assert len(set(sanitized.split())) == len(sanitized.split())
|
|
assert preserver.restore_blocks(sanitized) == original
|
|
|
|
|
|
def test_empty_restore():
|
|
preserver = MarkdownPreserver()
|
|
assert preserver.restore_blocks("") == ""
|