pyladoc/tests/test_rendering_markdown.py

153 lines
5.0 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pyladoc
from . import document_validation
VALIDATE_HTML_CODE_ONLINE = False
WRITE_RESULT_FILES = True
def test_markdown_styling():
pyla = pyladoc.DocumentWriter()
pyla.add_markdown(
"""
Below is an in-depth explanation of the AArch64 (ARM64)
unconditional branch instruction—often simply called the
“B” instruction—and how its 26bit immediate field (imm26)
is laid out and later relocated during linking.
---
## Instruction Layout
The unconditional branch in AArch64 is encoded in a 32bit
instruction. Its layout is as follows:
```
Bits: 31 26 25 0
+-------------+------------------------------+
| Opcode | imm26 |
+-------------+------------------------------+
```
- **Opcode (bits 31:26):**
- For a plain branch (`B`), the opcode is `000101`.
- For a branch with link (`BL`), which saves the return
address (i.e., a call), the opcode is `100101`.
These 6 bits determine the instruction type.
- **Immediate Field (imm26, bits 25:0):**
- This 26bit field holds a signed immediate value.
- **Offset Calculation:** At runtime, the processor:
1. **Shifts** the 26bit immediate left by 2 bits.
(Because instructions are 4-byte aligned,
the two least-significant bits are always zero.)
2. **Sign-extends** the resulting 28bit value to
the full register width (typically 64 bits).
3. **Adds** this value to the program counter
(PC) to obtain the branch target.
- **Reach:**
- With a 26bit signed field thats effectively 28 bits
after the shift, the branch can cover a range
of approximately ±128 MB from the current instruction.
""")
html_code = pyla.to_html()
document_validation.validate_html(html_code, check_for=['strong', 'ol', 'li', 'code', 'hr'])
if WRITE_RESULT_FILES:
with open('tests/out/test_markdown_style.html', 'w', encoding='utf-8') as f:
f.write(html_code)
def test_markdown_table():
pyla = pyladoc.DocumentWriter()
pyla.add_markdown(
"""
## Klemmen
| Anz.| Typ | Beschreibung
|----:|----------|------------------------------------
| 12 | BK9050 | Buskoppler
| 2 | KL1104 | 4 Digitaleingänge
| 2 | KL2404 | 4 Digitalausgänge (0,5 A)
| 3 | KL2424 | 4 Digitalausgänge (2 A)
| 2 | KL4004 | 4 Analogausgänge
| 1 | KL4002 | 2 Analogausgänge
| 22 | KL9188 | Potenzialverteilungsklemme
| 1 | KL9100 | Potenzialeinspeiseklemme
| 3 | KL3054 | 4 Analogeingänge
| 5 | KL3214 | PT100 4 Temperatureingänge (3-Leiter)
| 3 | KL3202 | PT100 2 Temperatureingänge (3-Leiter)
| 1 | KL2404 | 4 Digitalausgänge
| 2 | KL9010 | Endklemme
""")
html_code = pyla.to_html()
document_validation.validate_html(html_code, check_for=['table'])
if WRITE_RESULT_FILES:
with open('tests/out/test_markdown_table.html', 'w', encoding='utf-8') as f:
f.write(html_code)
def test_markdown_equations():
pyla = pyladoc.DocumentWriter()
pyla.add_markdown(
"""
# Source Equations
1. $4(3x + 2) - 5(x - 1) = 3x + 14$
2. $\frac{2y + 5}{4} + \frac{3y - 1}{2} = 5$
3. $\frac{5}{x + 2} + \frac{2}{x - 2} = 3$
4. $8(3b - 5) + 4(b + 2) = 60$
5. $2c^2 - 3c - 5 = 0$
6. $4(2d - 1) + 5(3d + 2) = 7d + 28$
7. $q^2 + 6q + 9 = 16$
# Result Equations
1. $x = \frac{1}{4}$
2. $y = \frac{17}{8}$
3. $z = \frac{7}{3}$
4. $x = 1$ or $x = -6$
5. $a = \frac{1}{3}$ or $a = 2$
6. $x = -\frac{2}{3}$ or $x = 3$
7. $b = \frac{23}{7}$
# Step by Step
1. Distribute: $12x + 8 - 5x + 5 = 3x + 14$
2. Combine like terms: $7x + 13 = 3x + 14$
3. Subtract $3x$: $4x + 13 = 14$
4. Subtract $13$: $4x = 1$
5. Divide by $4$: $x = \frac{1}{4}$
""")
html_code = pyla.to_html()
document_validation.validate_html(html_code, check_for=['h1'])
if WRITE_RESULT_FILES:
with open('tests/out/test_markdown_equations.html', 'w', encoding='utf-8') as f:
f.write(html_code)
def test_markdown_characters():
pyla = pyladoc.DocumentWriter()
pyla.add_markdown(
"""
# Special caracters
Umlaute: ÖÄÜ öäü
Other: ß, €, @, $, %, ~, µ
Units: m³, cm²
Controll characters: <, >, ", ', &, |, /, \\
""")
html_code = pyla.to_html()
document_validation.validate_html(html_code, check_for=['h1'])
if WRITE_RESULT_FILES:
with open('tests/out/test_markdown_characters.html', 'w', encoding='utf-8') as f:
f.write(html_code)