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