Skip to content

Commit 3687e1e

Browse files
committed
tests: add a few more tests from pyproject-metadata
Signed-off-by: Henry Schreiner <[email protected]>
1 parent bc2ab34 commit 3687e1e

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed

tests/test_metadata.py

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
from __future__ import annotations
2+
3+
import email.message
4+
import inspect
15
import pathlib
6+
import textwrap
27

38
import pytest
49

@@ -916,3 +921,166 @@ def test_modern_license(self):
916921
]
917922

918923
assert core_metadata.get_payload() is None
924+
925+
@pytest.mark.parametrize(
926+
("items", "data"),
927+
[
928+
pytest.param(
929+
[],
930+
"",
931+
id="empty",
932+
),
933+
pytest.param(
934+
[
935+
("Foo", "Bar"),
936+
],
937+
"Foo: Bar\n",
938+
id="simple",
939+
),
940+
pytest.param(
941+
[
942+
("Foo", "Bar"),
943+
("Foo2", "Bar2"),
944+
],
945+
"""\
946+
Foo: Bar
947+
Foo2: Bar2
948+
""",
949+
id="multiple",
950+
),
951+
pytest.param(
952+
[
953+
("Foo", "Unicøde"),
954+
],
955+
"Foo: Unicøde\n",
956+
id="unicode",
957+
),
958+
pytest.param(
959+
[
960+
("Foo", "🕵️"),
961+
],
962+
"Foo: 🕵️\n",
963+
id="emoji",
964+
),
965+
pytest.param(
966+
[
967+
("Item", None),
968+
],
969+
"",
970+
id="none",
971+
),
972+
pytest.param(
973+
[
974+
("ItemA", "ValueA"),
975+
("ItemB", "ValueB"),
976+
("ItemC", "ValueC"),
977+
],
978+
"""\
979+
ItemA: ValueA
980+
ItemB: ValueB
981+
ItemC: ValueC
982+
""",
983+
id="order 1",
984+
),
985+
pytest.param(
986+
[
987+
("ItemB", "ValueB"),
988+
("ItemC", "ValueC"),
989+
("ItemA", "ValueA"),
990+
],
991+
"""\
992+
ItemB: ValueB
993+
ItemC: ValueC
994+
ItemA: ValueA
995+
""",
996+
id="order 2",
997+
),
998+
pytest.param(
999+
[
1000+
("ItemA", "ValueA1"),
1001+
("ItemB", "ValueB"),
1002+
("ItemC", "ValueC"),
1003+
("ItemA", "ValueA2"),
1004+
],
1005+
"""\
1006+
ItemA: ValueA1
1007+
ItemB: ValueB
1008+
ItemC: ValueC
1009+
ItemA: ValueA2
1010+
""",
1011+
id="multiple keys",
1012+
),
1013+
pytest.param(
1014+
[
1015+
("ItemA", "ValueA"),
1016+
("ItemB", "ValueB1\nValueB2\nValueB3"),
1017+
("ItemC", "ValueC"),
1018+
],
1019+
"""\
1020+
ItemA: ValueA
1021+
ItemB: ValueB1
1022+
ValueB2
1023+
ValueB3
1024+
ItemC: ValueC
1025+
""",
1026+
id="multiline",
1027+
),
1028+
],
1029+
)
1030+
def test_headers(self, items: list[tuple[str, None | str]], data: str) -> None:
1031+
message = metadata.RFC822Message()
1032+
1033+
for name, value in items:
1034+
if value:
1035+
message[name] = value
1036+
1037+
data = textwrap.dedent(data) + "\n"
1038+
assert str(message) == data
1039+
assert bytes(message) == data.encode()
1040+
1041+
assert email.message_from_string(str(message)).items() == [
1042+
(a, "\n ".join(b.splitlines())) for a, b in items if b is not None
1043+
]
1044+
1045+
def test_body(self) -> None:
1046+
message = metadata.RFC822Message()
1047+
1048+
message["ItemA"] = "ValueA"
1049+
message["ItemB"] = "ValueB"
1050+
message["ItemC"] = "ValueC"
1051+
body = inspect.cleandoc(
1052+
"""
1053+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris
1054+
congue semper fermentum. Nunc vitae tempor ante. Aenean aliquet
1055+
posuere lacus non faucibus. In porttitor congue luctus. Vivamus eu
1056+
dignissim orci. Donec egestas mi ac ipsum volutpat, vel elementum
1057+
sapien consectetur. Praesent dictum finibus fringilla. Sed vel
1058+
feugiat leo. Nulla a pharetra augue, at tristique metus.
1059+
1060+
Aliquam fermentum elit at risus sagittis, vel pretium augue congue.
1061+
Donec leo risus, faucibus vel posuere efficitur, feugiat ut leo.
1062+
Aliquam vestibulum vel dolor id elementum. Ut bibendum nunc interdum
1063+
neque interdum, vel tincidunt lacus blandit. Ut volutpat
1064+
sollicitudin dapibus. Integer vitae lacinia ex, eget finibus nulla.
1065+
Donec sit amet ante in neque pulvinar faucibus sed nec justo. Fusce
1066+
hendrerit massa libero, sit amet pulvinar magna tempor quis. ø
1067+
"""
1068+
)
1069+
headers = inspect.cleandoc(
1070+
"""
1071+
ItemA: ValueA
1072+
ItemB: ValueB
1073+
ItemC: ValueC
1074+
"""
1075+
)
1076+
full = f"{headers}\n\n{body}"
1077+
1078+
message.set_payload(textwrap.dedent(body))
1079+
1080+
assert str(message) == full
1081+
1082+
new_message = email.message_from_string(str(message))
1083+
assert new_message.items() == message.items()
1084+
assert new_message.get_payload() == message.get_payload()
1085+
1086+
assert bytes(message) == full.encode("utf-8")

0 commit comments

Comments
 (0)