-
-
Notifications
You must be signed in to change notification settings - Fork 691
Expand file tree
/
Copy pathwheelmaker_test.py
More file actions
111 lines (92 loc) · 4.39 KB
/
wheelmaker_test.py
File metadata and controls
111 lines (92 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import io
import unittest
import tools.wheelmaker as wheelmaker
class QuoteAllFilenamesTest(unittest.TestCase):
"""Tests for quote_all_filenames behavior in _WhlFile.
Some wheels (like torch) have all filenames quoted in their RECORD file.
When repacking, we preserve this style to minimize diffs.
"""
def _make_whl_file(self, quote_all: bool) -> wheelmaker._WhlFile:
"""Create a _WhlFile instance for testing."""
buf = io.BytesIO()
return wheelmaker._WhlFile(
buf,
mode="w",
distribution_prefix="test-1.0.0",
quote_all_filenames=quote_all,
)
def test_quote_all_quotes_simple_filenames(self) -> None:
"""When quote_all_filenames=True, all filenames are quoted."""
whl = self._make_whl_file(quote_all=True)
self.assertEqual(whl._quote_filename("foo/bar.py"), '"foo/bar.py"')
def test_quote_all_false_leaves_simple_filenames_unquoted(self) -> None:
"""When quote_all_filenames=False, simple filenames stay unquoted."""
whl = self._make_whl_file(quote_all=False)
self.assertEqual(whl._quote_filename("foo/bar.py"), "foo/bar.py")
def test_quote_all_quotes_filenames_with_commas(self) -> None:
"""Filenames with commas are always quoted, regardless of quote_all_filenames."""
whl = self._make_whl_file(quote_all=True)
self.assertEqual(whl._quote_filename("foo,bar/baz.py"), '"foo,bar/baz.py"')
whl = self._make_whl_file(quote_all=False)
self.assertEqual(whl._quote_filename("foo,bar/baz.py"), '"foo,bar/baz.py"')
class ArcNameFromTest(unittest.TestCase):
def test_arcname_from(self) -> None:
# (name, distribution_prefix, strip_path_prefixes, want) tuples
checks = [
("a/b/c/file.py", "", [], "a/b/c/file.py"),
("a/b/c/file.py", "", ["a"], "/b/c/file.py"),
("a/b/c/file.py", "", ["a/b/"], "c/file.py"),
# only first found is used and it's not cumulative.
("a/b/c/file.py", "", ["a/", "b/"], "b/c/file.py"),
# Examples from docs
("foo/bar/baz/file.py", "", ["foo", "foo/bar/baz"], "/bar/baz/file.py"),
("foo/bar/baz/file.py", "", ["foo/bar/baz", "foo"], "/file.py"),
("foo/file2.py", "", ["foo/bar/baz", "foo"], "/file2.py"),
# Files under the distribution prefix (eg mylib-1.0.0-dist-info)
# are unmodified
("mylib-0.0.1-dist-info/WHEEL", "mylib", [], "mylib-0.0.1-dist-info/WHEEL"),
("mylib/a/b/c/WHEEL", "mylib", ["mylib"], "mylib/a/b/c/WHEEL"),
]
for name, prefix, strip, want in checks:
with self.subTest(
name=name,
distribution_prefix=prefix,
strip_path_prefixes=strip,
want=want,
):
got = wheelmaker.arcname_from(
name=name, distribution_prefix=prefix, strip_path_prefixes=strip
)
self.assertEqual(got, want)
class GetNewRequirementLineTest(unittest.TestCase):
def test_requirement(self):
result = wheelmaker.get_new_requirement_line("requests>=2.0", "")
self.assertEqual(result, "Requires-Dist: requests>=2.0")
def test_requirement_and_extra(self):
result = wheelmaker.get_new_requirement_line("requests>=2.0", "extra=='dev'")
self.assertEqual(result, "Requires-Dist: requests>=2.0; extra=='dev'")
def test_requirement_with_url(self):
result = wheelmaker.get_new_requirement_line(
"requests @ git+https://github.com/psf/requests.git@3aa6386c3", ""
)
self.assertEqual(
result,
"Requires-Dist: requests @ git+https://github.com/psf/requests.git@3aa6386c3",
)
def test_requirement_with_marker(self):
result = wheelmaker.get_new_requirement_line(
"requests>=2.0; python_version>='3.6'", ""
)
self.assertEqual(
result, 'Requires-Dist: requests>=2.0; python_version >= "3.6"'
)
def test_requirement_with_marker_and_extra(self):
result = wheelmaker.get_new_requirement_line(
"requests>=2.0; python_version>='3.6'", "extra=='dev'"
)
self.assertEqual(
result,
"Requires-Dist: requests>=2.0; (python_version >= \"3.6\") and extra=='dev'",
)
if __name__ == "__main__":
unittest.main()