Home | History | Annotate | Download | only in system
      1 # Copyright (C) 2011 Google Inc. All rights reserved.
      2 #
      3 # Redistribution and use in source and binary forms, with or without
      4 # modification, are permitted provided that the following conditions are
      5 # met:
      6 #
      7 #    * Redistributions of source code must retain the above copyright
      8 # notice, this list of conditions and the following disclaimer.
      9 #    * Redistributions in binary form must reproduce the above
     10 # copyright notice, this list of conditions and the following disclaimer
     11 # in the documentation and/or other materials provided with the
     12 # distribution.
     13 #    * Neither the name of Google Inc. nor the names of its
     14 # contributors may be used to endorse or promote products derived from
     15 # this software without specific prior written permission.
     16 #
     17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 
     29 import platform
     30 import sys
     31 import unittest
     32 
     33 from webkitpy.common.system.executive import Executive
     34 from webkitpy.common.system.executive_mock import MockExecutive, MockExecutive2
     35 from webkitpy.common.system.platforminfo import PlatformInfo
     36 
     37 
     38 def fake_sys(platform_str='darwin', windows_version_tuple=None):
     39 
     40     class FakeSysModule(object):
     41         platform = platform_str
     42         if windows_version_tuple:
     43             getwindowsversion = lambda x: windows_version_tuple
     44 
     45     return FakeSysModule()
     46 
     47 
     48 def fake_platform(mac_version_string='10.6.3', release_string='bar'):
     49 
     50     class FakePlatformModule(object):
     51         def mac_ver(self):
     52             return tuple([mac_version_string, tuple(['', '', '']), 'i386'])
     53 
     54         def platform(self):
     55             return 'foo'
     56 
     57         def release(self):
     58             return release_string
     59 
     60     return FakePlatformModule()
     61 
     62 
     63 def fake_executive(output=None):
     64     if output:
     65         return MockExecutive2(output=output)
     66     return MockExecutive2(exception=SystemError)
     67 
     68 
     69 class TestPlatformInfo(unittest.TestCase):
     70     def make_info(self, sys_module=None, platform_module=None, executive=None):
     71         return PlatformInfo(sys_module or fake_sys(), platform_module or fake_platform(), executive or fake_executive())
     72 
     73     def test_real_code(self):
     74         # This test makes sure the real (unmocked) code actually works.
     75         info = PlatformInfo(sys, platform, Executive())
     76         self.assertNotEquals(info.os_name, '')
     77         self.assertNotEquals(info.os_version, '')
     78         self.assertNotEquals(info.display_name(), '')
     79         self.assertTrue(info.is_mac() or info.is_win() or info.is_linux() or info.is_freebsd())
     80         self.assertIsNotNone(info.terminal_width())
     81 
     82         if info.is_mac():
     83             self.assertTrue(info.total_bytes_memory() > 0)
     84         else:
     85             self.assertIsNone(info.total_bytes_memory())
     86 
     87     def test_os_name_and_wrappers(self):
     88         info = self.make_info(fake_sys('linux2'))
     89         self.assertTrue(info.is_linux())
     90         self.assertFalse(info.is_mac())
     91         self.assertFalse(info.is_win())
     92         self.assertFalse(info.is_freebsd())
     93 
     94         info = self.make_info(fake_sys('linux3'))
     95         self.assertTrue(info.is_linux())
     96         self.assertFalse(info.is_mac())
     97         self.assertFalse(info.is_win())
     98         self.assertFalse(info.is_freebsd())
     99 
    100         info = self.make_info(fake_sys('darwin'), fake_platform('10.6.3'))
    101         self.assertEqual(info.os_name, 'mac')
    102         self.assertFalse(info.is_linux())
    103         self.assertTrue(info.is_mac())
    104         self.assertFalse(info.is_win())
    105         self.assertFalse(info.is_freebsd())
    106 
    107         info = self.make_info(fake_sys('win32', tuple([6, 1, 7600])))
    108         self.assertEqual(info.os_name, 'win')
    109         self.assertFalse(info.is_linux())
    110         self.assertFalse(info.is_mac())
    111         self.assertTrue(info.is_win())
    112         self.assertFalse(info.is_freebsd())
    113 
    114         info = self.make_info(fake_sys('cygwin'), executive=fake_executive('6.1.7600'))
    115         self.assertEqual(info.os_name, 'win')
    116         self.assertFalse(info.is_linux())
    117         self.assertFalse(info.is_mac())
    118         self.assertTrue(info.is_win())
    119         self.assertFalse(info.is_freebsd())
    120 
    121         info = self.make_info(fake_sys('freebsd8'))
    122         self.assertEqual(info.os_name, 'freebsd')
    123         self.assertFalse(info.is_linux())
    124         self.assertFalse(info.is_mac())
    125         self.assertFalse(info.is_win())
    126         self.assertTrue(info.is_freebsd())
    127 
    128         self.assertRaises(AssertionError, self.make_info, fake_sys('vms'))
    129 
    130     def test_os_version(self):
    131         self.assertRaises(AssertionError, self.make_info, fake_sys('darwin'), fake_platform('10.4.3'))
    132         self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.5.1')).os_version, 'leopard')
    133         self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.6.1')).os_version, 'snowleopard')
    134         self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.7.1')).os_version, 'lion')
    135         self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.8.1')).os_version, 'mountainlion')
    136         self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.9.0')).os_version, 'mavericks')
    137         self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.10.0')).os_version, 'future')
    138 
    139         self.assertEqual(self.make_info(fake_sys('linux2')).os_version, 'lucid')
    140 
    141         self.assertEqual(self.make_info(fake_sys('freebsd8'), fake_platform('', '8.3-PRERELEASE')).os_version, '8.3-PRERELEASE')
    142         self.assertEqual(self.make_info(fake_sys('freebsd9'), fake_platform('', '9.0-RELEASE')).os_version, '9.0-RELEASE')
    143 
    144         self.assertRaises(AssertionError, self.make_info, fake_sys('win32', tuple([5, 0, 1234])))
    145         self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 2, 1234]))).os_version, 'future')
    146         self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 1, 7600]))).os_version, '7sp0')
    147         self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 0, 1234]))).os_version, 'vista')
    148         self.assertEqual(self.make_info(fake_sys('win32', tuple([5, 1, 1234]))).os_version, 'xp')
    149 
    150         self.assertRaises(AssertionError, self.make_info, fake_sys('win32'), executive=fake_executive('5.0.1234'))
    151         self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('6.2.1234')).os_version, 'future')
    152         self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('6.1.7600')).os_version, '7sp0')
    153         self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('6.0.1234')).os_version, 'vista')
    154         self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('5.1.1234')).os_version, 'xp')
    155 
    156     def test_display_name(self):
    157         info = self.make_info(fake_sys('darwin'))
    158         self.assertNotEquals(info.display_name(), '')
    159 
    160         info = self.make_info(fake_sys('win32', tuple([6, 1, 7600])))
    161         self.assertNotEquals(info.display_name(), '')
    162 
    163         info = self.make_info(fake_sys('linux2'))
    164         self.assertNotEquals(info.display_name(), '')
    165 
    166         info = self.make_info(fake_sys('freebsd9'))
    167         self.assertNotEquals(info.display_name(), '')
    168 
    169     def test_total_bytes_memory(self):
    170         info = self.make_info(fake_sys('darwin'), fake_platform('10.6.3'), fake_executive('1234'))
    171         self.assertEqual(info.total_bytes_memory(), 1234)
    172 
    173         info = self.make_info(fake_sys('win32', tuple([6, 1, 7600])))
    174         self.assertIsNone(info.total_bytes_memory())
    175 
    176         info = self.make_info(fake_sys('linux2'))
    177         self.assertIsNone(info.total_bytes_memory())
    178 
    179         info = self.make_info(fake_sys('freebsd9'))
    180         self.assertIsNone(info.total_bytes_memory())
    181