diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-12-05 21:41:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-05 21:41:52 (GMT) |
commit | ea0ca218b0c28b2af2b1f6a5d3383569de7fc2c1 (patch) | |
tree | a24104d328f8f9288fe7bef507eff49cb25a80e1 /Lib | |
parent | 40a61da40d252626f8b9ff524d76c1f0ccb3a4f7 (diff) | |
download | cpython-ea0ca218b0c28b2af2b1f6a5d3383569de7fc2c1.zip cpython-ea0ca218b0c28b2af2b1f6a5d3383569de7fc2c1.tar.gz cpython-ea0ca218b0c28b2af2b1f6a5d3383569de7fc2c1.tar.bz2 |
bpo-35344: platform.platform() uses mac_ver() on macOS (GH-10780)
On macOS, platform.platform() now uses mac_ver(), if it returns a
non-empty release string, to get the macOS version rather than darwin
version.
Diffstat (limited to 'Lib')
-rwxr-xr-x | Lib/platform.py | 8 | ||||
-rw-r--r-- | Lib/test/test_platform.py | 33 |
2 files changed, 41 insertions, 0 deletions
diff --git a/Lib/platform.py b/Lib/platform.py index f089a46..d845525 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -1182,6 +1182,14 @@ def platform(aliased=0, terse=0): if aliased: system, release, version = system_alias(system, release, version) + if system == 'Darwin': + # macOS (darwin kernel) + macos_release = mac_ver()[0] + if macos_release: + # note: 'macOS' is different than 'MacOS' used below + system = 'macOS' + release = macos_release + if system == 'Windows': # MS platforms rel, vers, csd, ptype = win32_ver(version) diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index 978d2f7..c1a7e34 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -10,6 +10,11 @@ from unittest import mock from test import support class PlatformTest(unittest.TestCase): + def clear_caches(self): + platform._platform_cache.clear() + platform._sys_version_cache.clear() + platform._uname_cache = None + def test_architecture(self): res = platform.architecture() @@ -344,5 +349,33 @@ class PlatformTest(unittest.TestCase): self.assertLess(V('0.960923'), V('2.2beta29')) + def test_macos(self): + self.addCleanup(self.clear_caches) + + uname = ('Darwin', 'hostname', '17.7.0', + ('Darwin Kernel Version 17.7.0: ' + 'Thu Jun 21 22:53:14 PDT 2018; ' + 'root:xnu-4570.71.2~1/RELEASE_X86_64'), + 'x86_64', 'i386') + arch = ('64bit', '') + with mock.patch.object(platform, 'uname', return_value=uname), \ + mock.patch.object(platform, 'architecture', return_value=arch): + for mac_ver, expected_terse, expected in [ + # darwin: mac_ver() returns empty strings + (('', '', ''), + 'Darwin-17.7.0', + 'Darwin-17.7.0-x86_64-i386-64bit'), + # macOS: mac_ver() returns macOS version + (('10.13.6', ('', '', ''), 'x86_64'), + 'macOS-10.13.6', + 'macOS-10.13.6-x86_64-i386-64bit'), + ]: + with mock.patch.object(platform, 'mac_ver', + return_value=mac_ver): + self.clear_caches() + self.assertEqual(platform.platform(terse=1), expected_terse) + self.assertEqual(platform.platform(), expected) + + if __name__ == '__main__': unittest.main() |