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 29import platform 30import sys 31import webkitpy.thirdparty.unittest2 as unittest 32 33from webkitpy.common.system.executive import Executive 34from webkitpy.common.system.executive_mock import MockExecutive, MockExecutive2 35from webkitpy.common.system.platforminfo import PlatformInfo 36 37 38def 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 48def 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 63def fake_executive(output=None): 64 if output: 65 return MockExecutive2(output=output) 66 return MockExecutive2(exception=SystemError) 67 68 69class 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 # FIXME: This should be called integration_test_real_code(), but integration tests aren't 74 # yet run by default and there's no reason not to run this everywhere by default. 75 def test_real_code(self): 76 # This test makes sure the real (unmocked) code actually works. 77 info = PlatformInfo(sys, platform, Executive()) 78 self.assertNotEquals(info.os_name, '') 79 self.assertNotEquals(info.os_version, '') 80 self.assertNotEquals(info.display_name(), '') 81 self.assertTrue(info.is_mac() or info.is_win() or info.is_linux() or info.is_freebsd()) 82 self.assertIsNotNone(info.terminal_width()) 83 84 if info.is_mac(): 85 self.assertTrue(info.total_bytes_memory() > 0) 86 else: 87 self.assertIsNone(info.total_bytes_memory()) 88 89 def test_os_name_and_wrappers(self): 90 info = self.make_info(fake_sys('linux2')) 91 self.assertTrue(info.is_linux()) 92 self.assertFalse(info.is_mac()) 93 self.assertFalse(info.is_win()) 94 self.assertFalse(info.is_freebsd()) 95 96 info = self.make_info(fake_sys('linux3')) 97 self.assertTrue(info.is_linux()) 98 self.assertFalse(info.is_mac()) 99 self.assertFalse(info.is_win()) 100 self.assertFalse(info.is_freebsd()) 101 102 info = self.make_info(fake_sys('darwin'), fake_platform('10.6.3')) 103 self.assertEqual(info.os_name, 'mac') 104 self.assertFalse(info.is_linux()) 105 self.assertTrue(info.is_mac()) 106 self.assertFalse(info.is_win()) 107 self.assertFalse(info.is_freebsd()) 108 109 info = self.make_info(fake_sys('win32', tuple([6, 1, 7600]))) 110 self.assertEqual(info.os_name, 'win') 111 self.assertFalse(info.is_linux()) 112 self.assertFalse(info.is_mac()) 113 self.assertTrue(info.is_win()) 114 self.assertFalse(info.is_freebsd()) 115 116 info = self.make_info(fake_sys('cygwin'), executive=fake_executive('6.1.7600')) 117 self.assertEqual(info.os_name, 'win') 118 self.assertFalse(info.is_linux()) 119 self.assertFalse(info.is_mac()) 120 self.assertTrue(info.is_win()) 121 self.assertFalse(info.is_freebsd()) 122 123 info = self.make_info(fake_sys('freebsd8')) 124 self.assertEqual(info.os_name, 'freebsd') 125 self.assertFalse(info.is_linux()) 126 self.assertFalse(info.is_mac()) 127 self.assertFalse(info.is_win()) 128 self.assertTrue(info.is_freebsd()) 129 130 self.assertRaises(AssertionError, self.make_info, fake_sys('vms')) 131 132 def test_os_version(self): 133 self.assertRaises(AssertionError, self.make_info, fake_sys('darwin'), fake_platform('10.4.3')) 134 self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.5.1')).os_version, 'leopard') 135 self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.6.1')).os_version, 'snowleopard') 136 self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.7.1')).os_version, 'lion') 137 self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.8.1')).os_version, 'mountainlion') 138 self.assertEqual(self.make_info(fake_sys('darwin'), fake_platform('10.9.0')).os_version, 'future') 139 140 self.assertEqual(self.make_info(fake_sys('linux2')).os_version, 'lucid') 141 142 self.assertEqual(self.make_info(fake_sys('freebsd8'), fake_platform('', '8.3-PRERELEASE')).os_version, '8.3-PRERELEASE') 143 self.assertEqual(self.make_info(fake_sys('freebsd9'), fake_platform('', '9.0-RELEASE')).os_version, '9.0-RELEASE') 144 145 self.assertRaises(AssertionError, self.make_info, fake_sys('win32', tuple([5, 0, 1234]))) 146 self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 2, 1234]))).os_version, 'future') 147 self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 1, 7600]))).os_version, '7sp0') 148 self.assertEqual(self.make_info(fake_sys('win32', tuple([6, 0, 1234]))).os_version, 'vista') 149 self.assertEqual(self.make_info(fake_sys('win32', tuple([5, 1, 1234]))).os_version, 'xp') 150 151 self.assertRaises(AssertionError, self.make_info, fake_sys('win32'), executive=fake_executive('5.0.1234')) 152 self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('6.2.1234')).os_version, 'future') 153 self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('6.1.7600')).os_version, '7sp0') 154 self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('6.0.1234')).os_version, 'vista') 155 self.assertEqual(self.make_info(fake_sys('cygwin'), executive=fake_executive('5.1.1234')).os_version, 'xp') 156 157 def test_display_name(self): 158 info = self.make_info(fake_sys('darwin')) 159 self.assertNotEquals(info.display_name(), '') 160 161 info = self.make_info(fake_sys('win32', tuple([6, 1, 7600]))) 162 self.assertNotEquals(info.display_name(), '') 163 164 info = self.make_info(fake_sys('linux2')) 165 self.assertNotEquals(info.display_name(), '') 166 167 info = self.make_info(fake_sys('freebsd9')) 168 self.assertNotEquals(info.display_name(), '') 169 170 def test_total_bytes_memory(self): 171 info = self.make_info(fake_sys('darwin'), fake_platform('10.6.3'), fake_executive('1234')) 172 self.assertEqual(info.total_bytes_memory(), 1234) 173 174 info = self.make_info(fake_sys('win32', tuple([6, 1, 7600]))) 175 self.assertIsNone(info.total_bytes_memory()) 176 177 info = self.make_info(fake_sys('linux2')) 178 self.assertIsNone(info.total_bytes_memory()) 179 180 info = self.make_info(fake_sys('freebsd9')) 181 self.assertIsNone(info.total_bytes_memory()) 182