test_platform.py revision a43f34cc2a7a55cea794ecb9bda2eea5c685d1f3
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')),
7094e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson            ):
7194e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson            # branch and revision are not "parsed", but fetched
7294e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson            # from sys.subversion.  Ignore them
7394e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson            (name, version, branch, revision, buildno, builddate, compiler) \
7494e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson                   = platform._sys_version(input)
7594e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson            self.assertEqual(
7694e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson                (name, version, '', '', buildno, builddate, compiler), output)
7794e4e2a7e583471627d76a2f3b2886c9064b7420Benjamin Peterson
78f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson        # Tests for python_implementation(), python_version(), python_branch(),
79f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson        # python_revision(), python_build(), and python_compiler().
80f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson        sys_versions = {
81f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            ("2.6.1 (r261:67515, Dec  6 2008, 15:26:00) \n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]",
82f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson             ('CPython', 'tags/r261', '67515'), self.save_platform)
83f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            :
84f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                ("CPython", "2.6.1", "tags/r261", "67515",
85f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                 ('r261:67515', 'Dec  6 2008 15:26:00'),
86f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                 'GCC 4.0.1 (Apple Computer, Inc. build 5370)'),
87f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            ("IronPython 2.0 (2.0.0.0) on .NET 2.0.50727.3053", None, "cli")
88f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            :
89f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                ("IronPython", "2.0.0", "", "", ("", ""),
90f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                 ".NET 2.0.50727.3053"),
91f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            ("2.5 (trunk:6107, Mar 26 2009, 13:02:18) \n[Java HotSpot(TM) Client VM (\"Apple Computer, Inc.\")]",
92b457b89323e3110159298bb5aa149f56733aaef8Benjamin Peterson            ('Jython', 'trunk', '6107'), "java1.5.0_16")
93f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            :
94b457b89323e3110159298bb5aa149f56733aaef8Benjamin Peterson                ("Jython", "2.5.0", "trunk", "6107",
95b457b89323e3110159298bb5aa149f56733aaef8Benjamin Peterson                 ('trunk:6107', 'Mar 26 2009'), "java1.5.0_16"),
960ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson            ("2.5.2 (63378, Mar 26 2009, 18:03:29)\n[PyPy 1.0.0]",
970ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson             ('PyPy', 'trunk', '63378'), self.save_platform)
980ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson            :
990ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson                ("PyPy", "2.5.2", "trunk", "63378", ('63378', 'Mar 26 2009'),
1000ad9b7727d172fc772a5499da37efcc9385ed7b0Benjamin Peterson                 "")
101f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            }
102f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson        for (version_tag, subversion, sys_platform), info in \
103f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                sys_versions.iteritems():
104f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            sys.version = version_tag
105f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            if subversion is None:
106f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                if hasattr(sys, "subversion"):
107f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                    del sys.subversion
108f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            else:
109f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                sys.subversion = subversion
110f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            if sys_platform is not None:
111f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson                sys.platform = sys_platform
112f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            self.assertEqual(platform.python_implementation(), info[0])
113f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            self.assertEqual(platform.python_version(), info[1])
114f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            self.assertEqual(platform.python_branch(), info[2])
115f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            self.assertEqual(platform.python_revision(), info[3])
116f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            self.assertEqual(platform.python_build(), info[4])
117f521b8c6d25544456394e5cd172b6a24d5d958a6Benjamin Peterson            self.assertEqual(platform.python_compiler(), info[5])
118c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
119c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_system_alias(self):
120c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        res = platform.system_alias(
121c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald            platform.system(),
122c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald            platform.release(),
123c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald            platform.version(),
124c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        )
125c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
126c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_uname(self):
127c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        res = platform.uname()
1285c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson        self.assertTrue(any(res))
129c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
130c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_java_ver(self):
131c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        res = platform.java_ver()
1325915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson        if sys.platform == 'java':
1335c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson            self.assertTrue(all(res))
134c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
135c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_win32_ver(self):
136c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        res = platform.win32_ver()
137c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
138c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_mac_ver(self):
139c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        res = platform.mac_ver()
1407a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren
141a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson        try:
142a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson            import gestalt
143a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson        except ImportError:
144a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson            have_toolbox_glue = False
145a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson        else:
146a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson            have_toolbox_glue = True
147a4e4ef1cea957795b45e9956a6fc6eec76ceebafBenjamin Peterson
14831296c09ed1f1114a325da4ecafc5a8d8f079284Benjamin Peterson        if have_toolbox_glue and platform.uname()[0] == 'Darwin':
1497a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            # We're on a MacOSX system, check that
1507a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            # the right version information is returned
1517a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            fd = os.popen('sw_vers', 'r')
1527a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            real_ver = None
1537a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            for ln in fd:
1547a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren                if ln.startswith('ProductVersion:'):
1557a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren                    real_ver = ln.strip().split()[-1]
1567a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren                    break
1577a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            fd.close()
1585c8da86f3a515ce1a6d5f27fd15e3c5f4d8e931eBenjamin Peterson            self.assertFalse(real_ver is None)
159e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon            result_list = res[0].split('.')
160e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon            expect_list = real_ver.split('.')
161e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon            len_diff = len(result_list) - len(expect_list)
162e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon            # On Snow Leopard, sw_vers reports 10.6.0 as 10.6
163e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon            if len_diff > 0:
164e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon                expect_list.extend(['0'] * len_diff)
165e7e941e7f7a47be54198be79d2280ab3025e5ff1Brett Cannon            self.assertEquals(result_list, expect_list)
1667a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren
1677a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            # res[1] claims to contain
1687a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            # (version, dev_stage, non_release_version)
1697a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            # That information is no longer available
1707a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            self.assertEquals(res[1], ('', '', ''))
1717a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren
1727a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            if sys.byteorder == 'little':
1737a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren                self.assertEquals(res[2], 'i386')
1747a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren            else:
1757a0f4c75b1d2e3ceb758970ad39d468e95dfc6edRonald Oussoren                self.assertEquals(res[2], 'PowerPC')
176c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
177c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_dist(self):
178c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        res = platform.dist()
179c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
180c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    def test_libc_ver(self):
18106853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter        import os
1825915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson        if os.path.isdir(sys.executable) and \
1835915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson           os.path.exists(sys.executable+'.exe'):
18406853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter            # Cygwin horror
18506853fc15055686ec02fd2671fd37cda0f69209bAnthony Baxter            executable = executable + '.exe'
1865915a4dcfebf74d0a2c99848ede619f5bf7d2899Benjamin Peterson        res = platform.libc_ver(sys.executable)
187c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
188fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc    def test_parse_release_file(self):
189fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc
190fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc        for input, output in (
191fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            # Examples of release file contents:
192fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('SuSE Linux 9.3 (x86-64)', ('SuSE Linux ', '9.3', 'x86-64')),
193fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('SUSE LINUX 10.1 (X86-64)', ('SUSE LINUX ', '10.1', 'X86-64')),
194fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('SUSE LINUX 10.1 (i586)', ('SUSE LINUX ', '10.1', 'i586')),
195fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('Fedora Core release 5 (Bordeaux)', ('Fedora Core', '5', 'Bordeaux')),
196fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('Red Hat Linux release 8.0 (Psyche)', ('Red Hat Linux', '8.0', 'Psyche')),
197fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('Red Hat Linux release 9 (Shrike)', ('Red Hat Linux', '9', 'Shrike')),
198fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('Red Hat Enterprise Linux release 4 (Nahant)', ('Red Hat Enterprise Linux', '4', 'Nahant')),
199fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('CentOS release 4', ('CentOS', '4', None)),
200fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ('Rocks release 4.2.1 (Cydonia)', ('Rocks', '4.2.1', 'Cydonia')),
201a43f34cc2a7a55cea794ecb9bda2eea5c685d1f3Benjamin Peterson            ('', ('', '', '')), # If there's nothing there.
202fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            ):
203fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc            self.assertEqual(platform._parse_release_file(input), output)
204fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc
205fbc0b0ca29c0c8120bcf979bac6cb6d64cc87f60Amaury Forgeot d'Arc
206c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwalddef test_main():
207c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    test_support.run_unittest(
208c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald        PlatformTest
209c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    )
210c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald
211c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwaldif __name__ == '__main__':
212c69d1c498f3896803f78de613a54d17be88bbeafWalter Dörwald    test_main()
213