aboutsummaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/test_pdf.py58
-rw-r--r--tests/unit/test_util.py25
2 files changed, 70 insertions, 13 deletions
diff --git a/tests/unit/test_pdf.py b/tests/unit/test_pdf.py
new file mode 100644
index 0000000..aafa717
--- /dev/null
+++ b/tests/unit/test_pdf.py
@@ -0,0 +1,58 @@
+import pytest
+
+from fietsboek import pdf
+
+
+@pytest.mark.parametrize("value, expected", [
+ ('', '""'),
+ ('a', '"\\u{61}"'),
+ ('FOO', '"\\u{46}\\u{4f}\\u{4f}"'),
+ ('äß', '"\\u{e4}\\u{df}"'),
+ ('"', '"\\u{22}"'),
+ ("'", '"\\u{27}"'),
+])
+def test_typst_string(value, expected):
+ assert pdf.typst_string(value) == expected
+
+
+@pytest.mark.parametrize("value, expected", [
+ ("foo", "foo"),
+ ("*foo*", "\\*foo\\*"),
+ ("#strong[foo]", "\\#strong\\[foo\\]"),
+ ("= foo", "\\= foo"),
+ ("par 1\n\npar 2", "par 1\n\npar 2"),
+])
+def test_typst_escape(value, expected):
+ assert pdf.typst_escape(value) == expected
+
+
+@pytest.mark.parametrize("md_source, typst_source", [
+ ("*foo*", "#emph[foo]\n\n"),
+ ("**foo**", "#strong[foo]\n\n"),
+ ("***foo***", "#strong[#emph[foo]]\n\n"),
+ ("[Teksd](https://link)",
+ '#link("\\u{68}\\u{74}\\u{74}\\u{70}\\u{73}\\u{3a}'
+ '\\u{2f}\\u{2f}\\u{6c}\\u{69}\\u{6e}\\u{6b}")[Teksd]\n\n'),
+ ("""\
+# Uperschrift
+
+Teksd""", """\
+#heading(level: 1)[Uperschrift]
+Teksd\n\n"""),
+ ("""\
+* Eitem 1
+* Eitem 2""", """\
+#list(
+[Eitem 1],
+[Eitem 2],
+)"""),
+ ("""\
+1. Eitem 1
+1. Eitem 2""", """\
+#enum(
+[Eitem 1],
+[Eitem 2],
+)"""),
+])
+def test_md_to_typst(md_source, typst_source):
+ assert pdf.md_to_typst(md_source) == typst_source
diff --git a/tests/unit/test_util.py b/tests/unit/test_util.py
index 6dc8e7d..cc92058 100644
--- a/tests/unit/test_util.py
+++ b/tests/unit/test_util.py
@@ -71,19 +71,6 @@ def test_guess_gpx_timezone(gpx_file, offset):
assert timezone.utcoffset(None) == offset
-@pytest.mark.parametrize('gpx_file', [
- 'Teasi_1.gpx.gz',
- 'MyTourbook_1.gpx.gz',
- 'Synthetic_WT2.gpx.gz',
- 'Synthetic_BRouter_1.gpx.gz',
-])
-def test_tour_metadata(gpx_file):
- # Here we simply make sure that we do not crash the metadata extraction
- # function.
- gpx_data = load_gpx_asset(gpx_file)
- assert util.tour_metadata(gpx_data) is not None
-
-
@pytest.mark.parametrize('mps, kph', [(1, 3.6), (10, 36)])
def test_mps_to_kph(mps, kph):
assert util.mps_to_kph(mps) == pytest.approx(kph, 0.1)
@@ -112,3 +99,15 @@ def test_tile_url(app_request):
assert "{y}" in route_url
assert "{z}" in route_url
assert "bobby" in route_url
+
+
+@pytest.mark.parametrize("value, expected", [
+ ("", b""),
+ ("foo", b"foo"),
+ ("<foo>", b"&#x3c;foo&#x3e;"),
+ ("foo bar", b"foo bar"),
+ ("</gpx>", b"&#x3c;&#x2f;gpx&#x3e;"),
+ ("äÖß", b"&#xe4;&#xd6;&#xdf;"),
+])
+def test_xml_escape(value, expected):
+ assert util.xml_escape(value) == expected