test_platform.py revision a519cfc9534016725435c23fc1840d7d43d47c3b
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 51a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_python_implementation(self): 52a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.python_implementation() 53a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg 54a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_python_version(self): 55a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res1 = platform.python_version() 56a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res2 = platform.python_version_tuple() 57c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald self.assertEqual(res1, ".".join(res2)) 58c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 59a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_python_branch(self): 60a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.python_branch() 61c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 62a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_python_revision(self): 63a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.python_revision() 64c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 65a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_python_build(self): 66a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.python_build() 67a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg 68a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg def test_python_compiler(self): 69a519cfc9534016725435c23fc1840d7d43d47c3bMarc-André Lemburg res = platform.python_compiler() 70c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 71c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_system_alias(self): 72c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.system_alias( 73c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald platform.system(), 74c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald platform.release(), 75c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald platform.version(), 76c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald ) 77c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 78c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_uname(self): 79c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.uname() 805915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson self.assert_(any(res)) 81c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 82c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_java_ver(self): 83c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.java_ver() 845915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson if sys.platform == 'java': 855915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson self.assert_(all(res)) 86c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 87c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_win32_ver(self): 88c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.win32_ver() 89c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 90c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_mac_ver(self): 91c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.mac_ver() 927a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren 93a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson try: 94a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson import gestalt 95a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson except ImportError: 96a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson have_toolbox_glue = False 97a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson else: 98a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson have_toolbox_glue = True 99a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson 10031296c09ed1f1114a325da4ecafc5a8d8f079284Benjamin Peterson if have_toolbox_glue and platform.uname()[0] == 'Darwin': 1017a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # We're on a MacOSX system, check that 1027a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # the right version information is returned 1037a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren fd = os.popen('sw_vers', 'r') 1047a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren real_ver = None 1057a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren for ln in fd: 1067a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren if ln.startswith('ProductVersion:'): 1077a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren real_ver = ln.strip().split()[-1] 1087a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren break 1097a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren fd.close() 1107a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren self.failIf(real_ver is None) 1117a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren self.assertEquals(res[0], real_ver) 1127a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren 1137a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # res[1] claims to contain 1147a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # (version, dev_stage, non_release_version) 1157a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren # That information is no longer available 1167a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren self.assertEquals(res[1], ('', '', '')) 1177a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren 1187a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren if sys.byteorder == 'little': 1197a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren self.assertEquals(res[2], 'i386') 1207a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren else: 1217a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren self.assertEquals(res[2], 'PowerPC') 122c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 123c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_dist(self): 124c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald res = platform.dist() 125c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 126c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald def test_libc_ver(self): 12706853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter import os 1285915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson if os.path.isdir(sys.executable) and \ 1295915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson os.path.exists(sys.executable+'.exe'): 13006853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter # Cygwin horror 13106853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter executable = executable + '.exe' 1325915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson res = platform.libc_ver(sys.executable) 133c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 134fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc def test_parse_release_file(self): 135fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 136fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc for input, output in ( 137fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc # Examples of release file contents: 138fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('SuSE Linux 9.3 (x86-64)', ('SuSE Linux ', '9.3', 'x86-64')), 139fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('SUSE LINUX 10.1 (X86-64)', ('SUSE LINUX ', '10.1', 'X86-64')), 140fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('SUSE LINUX 10.1 (i586)', ('SUSE LINUX ', '10.1', 'i586')), 141fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Fedora Core release 5 (Bordeaux)', ('Fedora Core', '5', 'Bordeaux')), 142fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Red Hat Linux release 8.0 (Psyche)', ('Red Hat Linux', '8.0', 'Psyche')), 143fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Red Hat Linux release 9 (Shrike)', ('Red Hat Linux', '9', 'Shrike')), 144fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Red Hat Enterprise Linux release 4 (Nahant)', ('Red Hat Enterprise Linux', '4', 'Nahant')), 145fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('CentOS release 4', ('CentOS', '4', None)), 146fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('Rocks release 4.2.1 (Cydonia)', ('Rocks', '4.2.1', 'Cydonia')), 147fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ): 148fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc self.assertEqual(platform._parse_release_file(input), output) 149fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 150fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc def test_sys_version(self): 151fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 152fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc platform._sys_version_cache.clear() 153fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc for input, output in ( 154fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('2.4.3 (#1, Jun 21 2006, 13:54:21) \n[GCC 3.3.4 (pre 3.3.5 20040809)]', 155fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('CPython', '2.4.3', '', '', '1', 'Jun 21 2006 13:54:21', 'GCC 3.3.4 (pre 3.3.5 20040809)')), 156fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('IronPython 1.0.60816 on .NET 2.0.50727.42', 157fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('IronPython', '1.0.60816', '', '', '', '', '.NET 2.0.50727.42')), 158fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('IronPython 1.0 (1.0.61005.1977) on .NET 2.0.50727.42', 159fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ('IronPython', '1.0.0', '', '', '', '', '.NET 2.0.50727.42')), 160fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc ): 161fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc # branch and revision are not "parsed", but fetched 162fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc # from sys.subversion. Ignore them 163fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc (name, version, branch, revision, buildno, builddate, compiler) \ 164fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc = platform._sys_version(input) 165fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc self.assertEqual( 166fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc (name, version, '', '', buildno, builddate, compiler), output) 167fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc 168c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwalddef test_main(): 169c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald test_support.run_unittest( 170c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald PlatformTest 171c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald ) 172c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald 173c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwaldif __name__ == '__main__': 174c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald test_main() 175