Skip to content

Commit b5733b8

Browse files
Czakiagronholm
authored andcommitted
Better discovery of macos system version to determine proper platform tag (#314)
1 parent 18aa6ae commit b5733b8

15 files changed

+562
-6
lines changed

tests/test_macosx_libfile.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import os
2+
import sys
3+
import distutils.util
4+
5+
from wheel.macosx_libfile import extract_macosx_min_system_version
6+
from wheel.pep425tags import get_platform
7+
8+
9+
def test_read_from_dynlib():
10+
dirname = os.path.dirname(__file__)
11+
dylib_dir = os.path.join(dirname, "testdata",
12+
"macosx_minimal_system_version")
13+
versions = [
14+
("test_lib_10_6_fat.dynlib", "10.6"),
15+
("test_lib_10_10_fat.dynlib", "10.10"),
16+
("test_lib_10_14_fat.dynlib", "10.14"),
17+
("test_lib_10_6.dynlib", "10.6"),
18+
("test_lib_10_10.dynlib", "10.10"),
19+
("test_lib_10_14.dynlib", "10.14"),
20+
("test_lib_10_6_386.dynlib", "10.6"),
21+
("test_lib_10_10_386.dynlib", "10.10"),
22+
("test_lib_10_14_386.dynlib", "10.14"),
23+
("test_lib_multiple_fat.dynlib", "10.14")
24+
]
25+
for file_name, ver in versions:
26+
extracted = extract_macosx_min_system_version(
27+
os.path.join(dylib_dir, file_name)
28+
)
29+
str_ver = str(extracted[0]) + "." + str(extracted[1])
30+
assert str_ver == ver
31+
assert extract_macosx_min_system_version(
32+
os.path.join(dylib_dir, "test_lib.c")
33+
) is None
34+
35+
36+
def return_factory(return_val):
37+
def fun(*args, **kwargs):
38+
return return_val
39+
40+
return fun
41+
42+
43+
class TestGetPlatformMacosx:
44+
def test_simple(self, monkeypatch):
45+
dirname = os.path.dirname(__file__)
46+
dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version")
47+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.14-x86_64"))
48+
assert get_platform(dylib_dir) == "macosx_10_14_x86_64"
49+
50+
def test_version_bump(self, monkeypatch, capsys):
51+
dirname = os.path.dirname(__file__)
52+
dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version")
53+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64"))
54+
assert get_platform(dylib_dir) == "macosx_10_14_x86_64"
55+
captured = capsys.readouterr()
56+
assert "[WARNING] This wheel needs higher macosx version than" in captured.err
57+
58+
def test_information_about_problematic_files_python_version(self, monkeypatch, capsys):
59+
dirname = os.path.dirname(__file__)
60+
dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version")
61+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64"))
62+
monkeypatch.setattr(os, "walk", return_factory(
63+
[(dylib_dir, [], ["test_lib_10_6.dynlib", "test_lib_10_10_fat.dynlib"])]
64+
))
65+
assert get_platform(dylib_dir) == "macosx_10_10_x86_64"
66+
captured = capsys.readouterr()
67+
assert "[WARNING] This wheel needs higher macosx version than" in captured.err
68+
assert "your python is compiled against." in captured.err
69+
assert "test_lib_10_10_fat.dynlib" in captured.err
70+
71+
def test_information_about_problematic_files_env_variable(self, monkeypatch, capsys):
72+
dirname = os.path.dirname(__file__)
73+
dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version")
74+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64"))
75+
monkeypatch.setenv("MACOSX_DEPLOYMENT_TARGET", "10.8")
76+
monkeypatch.setattr(os, "walk", return_factory(
77+
[(dylib_dir, [], ["test_lib_10_6.dynlib", "test_lib_10_10_fat.dynlib"])]
78+
))
79+
assert get_platform(dylib_dir) == "macosx_10_10_x86_64"
80+
captured = capsys.readouterr()
81+
assert "[WARNING] This wheel needs higher macosx version than" in captured.err
82+
assert "is set in MACOSX_DEPLOYMENT_TARGET variable." in captured.err
83+
assert "test_lib_10_10_fat.dynlib" in captured.err
84+
85+
def test_bump_platform_tag_by_env_variable(self, monkeypatch, capsys):
86+
dirname = os.path.dirname(__file__)
87+
dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version")
88+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64"))
89+
monkeypatch.setattr(os, "walk", return_factory(
90+
[(dylib_dir, [], ["test_lib_10_6.dynlib", "test_lib_10_6_fat.dynlib"])]
91+
))
92+
assert get_platform(dylib_dir) == "macosx_10_9_x86_64"
93+
monkeypatch.setenv("MACOSX_DEPLOYMENT_TARGET", "10.10")
94+
assert get_platform(dylib_dir) == "macosx_10_10_x86_64"
95+
captured = capsys.readouterr()
96+
assert captured.err == ""
97+
98+
def test_warning_on_to_low_env_variable(self, monkeypatch, capsys):
99+
dirname = os.path.dirname(__file__)
100+
dylib_dir = os.path.join(dirname, "testdata", "macosx_minimal_system_version")
101+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("macosx-10.9-x86_64"))
102+
monkeypatch.setenv("MACOSX_DEPLOYMENT_TARGET", "10.8")
103+
monkeypatch.setattr(os, "walk", return_factory(
104+
[(dylib_dir, [], ["test_lib_10_6.dynlib", "test_lib_10_6_fat.dynlib"])]
105+
))
106+
assert get_platform(dylib_dir) == "macosx_10_9_x86_64"
107+
captured = capsys.readouterr()
108+
assert "MACOSX_DEPLOYMENT_TARGET is set to lower value than your python" in captured.err
109+
110+
111+
def test_get_platform_linux(monkeypatch):
112+
monkeypatch.setattr(distutils.util, "get_platform", return_factory("linux_x86_64"))
113+
monkeypatch.setattr(sys, "maxsize", 2147483647)
114+
assert get_platform(None) == "linux_i686"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
int num_of_letters(char* text){
2+
int num = 0;
3+
char * lett = text;
4+
while (lett != 0){
5+
if (*lett >= 'a' && *lett <= 'z'){
6+
num += 1;
7+
} else if (*lett >= 'A' && *lett <= 'Z'){
8+
num += 1;
9+
}
10+
lett += 1;
11+
}
12+
return num;
13+
}
756 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
764 Bytes
Binary file not shown.
Binary file not shown.
Binary file not shown.
756 Bytes
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)