15915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Petersonimport sys 2913c15c1c6641195b492837eee1189369abe04b7Benjamin Petersonimport os 3c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwaldimport unittest 4c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwaldimport platform 56e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamotoimport subprocess 6c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 75915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Petersonfrom test import test_support 85915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson 9c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwaldclass PlatformTest(unittest.TestCase): 10c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_architecture(self): 11c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.architecture() 12c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 136e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto if hasattr(os, "symlink"): 146e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto def test_architecture_via_symlink(self): # issue3762 156e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto def get(python): 166e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto cmd = [python, '-c', 176e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto 'import platform; print platform.architecture()'] 186e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto p = subprocess.Popen(cmd, stdout=subprocess.PIPE) 196e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto return p.communicate() 2018c4e8734c7d817163e2c6564eedc246a2c9aa58Hirokazu Yamamoto real = os.path.realpath(sys.executable) 2118c4e8734c7d817163e2c6564eedc246a2c9aa58Hirokazu Yamamoto link = os.path.abspath(test_support.TESTFN) 2218c4e8734c7d817163e2c6564eedc246a2c9aa58Hirokazu Yamamoto os.symlink(real, link) 236e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto try: 2418c4e8734c7d817163e2c6564eedc246a2c9aa58Hirokazu Yamamoto self.assertEqual(get(real), get(link)) 256e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto finally: 2618c4e8734c7d817163e2c6564eedc246a2c9aa58Hirokazu Yamamoto os.remove(link) 276e5e50104c90501477e1ecc739e563f0f9b1129dHirokazu Yamamoto 28c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_platform(self): 29c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald for aliased in (False, True): 30c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald for terse in (False, True): 31c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.platform(aliased, terse) 32c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 33a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_system(self): 34a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.system() 35c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 36a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_node(self): 37a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.node() 38c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 39a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_release(self): 40a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.release() 41c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 42c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_version(self): 43a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.version() 44a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg 45a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_machine(self): 46a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.machine() 47a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg 48a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_processor(self): 49a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.processor() 50a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg 51f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson def setUp(self): 52f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.save_version = sys.version 53f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.save_subversion = sys.subversion 54f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.save_platform = sys.platform 55f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson 56f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson def tearDown(self): 57f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys.version = self.save_version 58f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys.subversion = self.save_subversion 59f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys.platform = self.save_platform 60f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson 6194e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson def test_sys_version(self): 6294e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson # Old test. 6394e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson for input, output in ( 6494e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ('2.4.3 (#1, Jun 21 2006, 13:54:21) \n[GCC 3.3.4 (pre 3.3.5 20040809)]', 6594e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ('CPython', '2.4.3', '', '', '1', 'Jun 21 2006 13:54:21', 'GCC 3.3.4 (pre 3.3.5 20040809)')), 6694e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ('IronPython 1.0.60816 on .NET 2.0.50727.42', 6794e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ('IronPython', '1.0.60816', '', '', '', '', '.NET 2.0.50727.42')), 6894e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ('IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42', 6994e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ('IronPython', '1.0.0', '', '', '', '', '.NET 2.0.50727.42')), 70c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation, date, t) \n[GCC]', 71c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', 'date t', 'GCC')), 72c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation, date, ) \n[GCC]', 73c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', 'date', 'GCC')), 74c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation, date,) \n[GCC]', 75c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', 'date', 'GCC')), 76c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation, date) \n[GCC]', 77c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', 'date', 'GCC')), 78c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation, d) \n[GCC]', 79c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', 'd', 'GCC')), 80c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation, ) \n[GCC]', 81c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', '', 'GCC')), 82c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation,) \n[GCC]', 83c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', '', 'GCC')), 84c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('2.4.3 (truncation) \n[GCC]', 85c36364491fb5bedc736957ce123f30d8a7b7023cMartin Panter ('CPython', '2.4.3', '', '', 'truncation', '', 'GCC')), 8694e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson ): 8794e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson # branch and revision are not "parsed", but fetched 8894e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson # from sys.subversion. Ignore them 8994e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson (name, version, branch, revision, buildno, builddate, compiler) \ 9094e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson = platform._sys_version(input) 9194e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson self.assertEqual( 9294e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson (name, version, '', '', buildno, builddate, compiler), output) 9394e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson 94f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson # Tests for python_implementation(), python_version(), python_branch(), 95f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson # python_revision(), python_build(), and python_compiler(). 96f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys_versions = { 97f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ("2.6.1 (r261:67515, Dec 6 2008, 15:26:00) \n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]", 98f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ('CPython', 'tags/r261', '67515'), self.save_platform) 99f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson : 100f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ("CPython", "2.6.1", "tags/r261", "67515", 101f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ('r261:67515', 'Dec 6 2008 15:26:00'), 102f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson 'GCC 4.0.1 (Apple Computer, Inc. build 5370)'), 103bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti 104f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ("IronPython 2.0 (2.0.0.0) on .NET 2.0.50727.3053", None, "cli") 105f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson : 106f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ("IronPython", "2.0.0", "", "", ("", ""), 107f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ".NET 2.0.50727.3053"), 108bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti 109bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti ("2.6.1 (IronPython 2.6.1 (2.6.10920.0) on .NET 2.0.50727.1433)", None, "cli") 110bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti : 111bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti ("IronPython", "2.6.1", "", "", ("", ""), 112bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti ".NET 2.0.50727.1433"), 113bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti 114bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti ("2.7.4 (IronPython 2.7.4 (2.7.0.40) on Mono 4.0.30319.1 (32-bit))", None, "cli") 115bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti : 116bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti ("IronPython", "2.7.4", "", "", ("", ""), 117bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti "Mono 4.0.30319.1 (32-bit)"), 118bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti 119f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson ("2.5 (trunk:6107, Mar 26 2009, 13:02:18) \n[Java HotSpot(TM) Client VM (\"Apple Computer, Inc.\")]", 120b457b89323e3110159298bb5aa149f56733aaef8Benjamin Peterson ('Jython', 'trunk', '6107'), "java1.5.0_16") 121f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson : 122b457b89323e3110159298bb5aa149f56733aaef8Benjamin Peterson ("Jython", "2.5.0", "trunk", "6107", 123b457b89323e3110159298bb5aa149f56733aaef8Benjamin Peterson ('trunk:6107', 'Mar 26 2009'), "java1.5.0_16"), 124bc385481453bf4fe8205b21c1538955517b2955cEzio Melotti 1250ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson ("2.5.2 (63378, Mar 26 2009, 18:03:29)\n[PyPy 1.0.0]", 1260ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson ('PyPy', 'trunk', '63378'), self.save_platform) 1270ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson : 1280ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson ("PyPy", "2.5.2", "trunk", "63378", ('63378', 'Mar 26 2009'), 1290ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson "") 130f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson } 131f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson for (version_tag, subversion, sys_platform), info in \ 132f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys_versions.iteritems(): 133f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys.version = version_tag 134f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson if subversion is None: 135f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson if hasattr(sys, "subversion"): 136f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson del sys.subversion 137f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson else: 138f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys.subversion = subversion 139f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson if sys_platform is not None: 140f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson sys.platform = sys_platform 141f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.assertEqual(platform.python_implementation(), info[0]) 142f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.assertEqual(platform.python_version(), info[1]) 143f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.assertEqual(platform.python_branch(), info[2]) 144f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.assertEqual(platform.python_revision(), info[3]) 145f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.assertEqual(platform.python_build(), info[4]) 146f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson self.assertEqual(platform.python_compiler(), info[5]) 147c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 148c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_system_alias(self): 149c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.system_alias( 150c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald platform.system(), 151c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald platform.release(), 152c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald platform.version(), 153c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald ) 154c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 155c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_uname(self): 156c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.uname() 1575c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(any(res)) 158c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 159c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray @unittest.skipUnless(sys.platform.startswith('win'), "windows only test") 160c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray def test_uname_win32_ARCHITEW6432(self): 161c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray # Issue 7860: make sure we get architecture from the correct variable 162c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray # on 64 bit Windows: if PROCESSOR_ARCHITEW6432 exists we should be 163c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray # using it, per 164c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray # http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx 165c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray try: 166c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray with test_support.EnvironmentVarGuard() as environ: 167c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray if 'PROCESSOR_ARCHITEW6432' in environ: 168c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray del environ['PROCESSOR_ARCHITEW6432'] 169c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray environ['PROCESSOR_ARCHITECTURE'] = 'foo' 170c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray platform._uname_cache = None 171c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray system, node, release, version, machine, processor = platform.uname() 172c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray self.assertEqual(machine, 'foo') 173c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray environ['PROCESSOR_ARCHITEW6432'] = 'bar' 174c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray platform._uname_cache = None 175c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray system, node, release, version, machine, processor = platform.uname() 176c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray self.assertEqual(machine, 'bar') 177c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray finally: 178c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray platform._uname_cache = None 179c9d1a7845ba18466ee048666239c6b969c9acd33R. David Murray 180c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_java_ver(self): 181c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.java_ver() 1825915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson if sys.platform == 'java': 1835c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertTrue(all(res)) 184c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 185c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_win32_ver(self): 186c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.win32_ver() 187c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 188c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_mac_ver(self): 189c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.mac_ver() 1907a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren 191a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson try: 192a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson import gestalt 193a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson except ImportError: 194a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson have_toolbox_glue = False 195a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson else: 196a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson have_toolbox_glue = True 197a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson 19831296c09ed1f1114a325da4ecafc5a8d8f079284Benjamin Peterson if have_toolbox_glue and platform.uname()[0] == 'Darwin': 1997a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # We're on a MacOSX system, check that 2007a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # the right version information is returned 2017a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren fd = os.popen('sw_vers', 'r') 2027a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren real_ver = None 2037a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren for ln in fd: 2047a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren if ln.startswith('ProductVersion:'): 2057a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren real_ver = ln.strip().split()[-1] 2067a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren break 2077a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren fd.close() 2085c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson self.assertFalse(real_ver is None) 209e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon result_list = res[0].split('.') 210e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon expect_list = real_ver.split('.') 211e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon len_diff = len(result_list) - len(expect_list) 212e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon # On Snow Leopard, sw_vers reports 10.6.0 as 10.6 213e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon if len_diff > 0: 214e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon expect_list.extend(['0'] * len_diff) 2152623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(result_list, expect_list) 2167a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren 2177a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # res[1] claims to contain 2187a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # (version, dev_stage, non_release_version) 2197a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # That information is no longer available 2202623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(res[1], ('', '', '')) 2217a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren 2227a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren if sys.byteorder == 'little': 2230ab67ee79ea6c536168b9ae51af0a85c9b075a40Ned Deily self.assertIn(res[2], ('i386', 'x86_64')) 2247a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren else: 2252623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(res[2], 'PowerPC') 226c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 2273a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren 2283a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren @unittest.skipUnless(sys.platform == 'darwin', "OSX only test") 2293a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren def test_mac_ver_with_fork(self): 2303a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren # Issue7895: platform.mac_ver() crashes when using fork without exec 2313a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren # 2323a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren # This test checks that the fix for that issue works. 2333a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren # 2343a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren pid = os.fork() 2353a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren if pid == 0: 2363a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren # child 2373a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren info = platform.mac_ver() 2383a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren os._exit(0) 2393a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren 2403a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren else: 2413a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren # parent 2423a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren cpid, sts = os.waitpid(pid, 0) 2432623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(cpid, pid) 2442623a37852153363335956afab010cb0beb7e74eEzio Melotti self.assertEqual(sts, 0) 2453a04a25206208fa0aef9dc206196276b7329ba77Ronald Oussoren 246c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_dist(self): 247c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.dist() 248c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 249c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_libc_ver(self): 25006853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter import os 2515915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson if os.path.isdir(sys.executable) and \ 2525915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson os.path.exists(sys.executable+'.exe'): 25306853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter # Cygwin horror 254cd4a21bb8ea184c32d33d534d42bc08b57b405fbGeorg Brandl executable = sys.executable + '.exe' 255cd4a21bb8ea184c32d33d534d42bc08b57b405fbGeorg Brandl else: 256cd4a21bb8ea184c32d33d534d42bc08b57b405fbGeorg Brandl executable = sys.executable 257cd4a21bb8ea184c32d33d534d42bc08b57b405fbGeorg Brandl res = platform.libc_ver(executable) 258c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 259fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc def test_parse_release_file(self): 260fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 261fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc for input, output in ( 262fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc # Examples of release file contents: 263fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('SuSE Linux 9.3 (x86-64)', ('SuSE Linux ', '9.3', 'x86-64')), 264fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('SUSE LINUX 10.1 (X86-64)', ('SUSE LINUX ', '10.1', 'X86-64')), 265fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('SUSE LINUX 10.1 (i586)', ('SUSE LINUX ', '10.1', 'i586')), 266fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Fedora Core release 5 (Bordeaux)', ('Fedora Core', '5', 'Bordeaux')), 267fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Red Hat Linux release 8.0 (Psyche)', ('Red Hat Linux', '8.0', 'Psyche')), 268fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Red Hat Linux release 9 (Shrike)', ('Red Hat Linux', '9', 'Shrike')), 269fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Red Hat Enterprise Linux release 4 (Nahant)', ('Red Hat Enterprise Linux', '4', 'Nahant')), 270fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('CentOS release 4', ('CentOS', '4', None)), 271fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Rocks release 4.2.1 (Cydonia)', ('Rocks', '4.2.1', 'Cydonia')), 272a43f34cc2a7a55cea794ecb9bda2eea5c685d1f3Benjamin Peterson ('', ('', '', '')), # If there's nothing there. 273fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ): 274fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc self.assertEqual(platform._parse_release_file(input), output) 275fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 276fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 277c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwalddef test_main(): 278c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald test_support.run_unittest( 279c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald PlatformTest 280c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald ) 281c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 282c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwaldif __name__ == '__main__': 283c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald test_main() 284