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