| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 import unittest | |
| 5 | |
| 6 from telemetry.core import browser_options | |
| 7 from telemetry.core.chrome import desktop_browser_finder | |
| 8 from telemetry.test import system_stub | |
| 9 | |
| 10 # This file verifies the logic for finding a browser instance on all platforms | |
| 11 # at once. It does so by providing stubs for the OS/sys/subprocess primitives | |
| 12 # that the underlying finding logic usually uses to locate a suitable browser. | |
| 13 # We prefer this approach to having to run the same test on every platform on | |
| 14 # which we want this code to work. | |
| 15 | |
| 16 class FindTestBase(unittest.TestCase): | |
| 17 def setUp(self): | |
| 18 self._options = browser_options.BrowserOptions() | |
| 19 self._options.chrome_root = '../../../' | |
| 20 self._stubs = system_stub.Override(desktop_browser_finder, | |
| 21 ['os', 'subprocess', 'sys']) | |
| 22 | |
| 23 def tearDown(self): | |
| 24 self._stubs.Restore() | |
| 25 | |
| 26 @property | |
| 27 def _files(self): | |
| 28 return self._stubs.os.path.files | |
| 29 | |
| 30 def DoFindAll(self): | |
| 31 return desktop_browser_finder.FindAllAvailableBrowsers(self._options) | |
| 32 | |
| 33 def DoFindAllTypes(self): | |
| 34 browsers = self.DoFindAll() | |
| 35 return [b.browser_type for b in browsers] | |
| 36 | |
| 37 def has_type(array, browser_type): | |
| 38 return len([x for x in array if x.browser_type == browser_type]) != 0 | |
| 39 | |
| 40 class FindSystemTest(FindTestBase): | |
| 41 def setUp(self): | |
| 42 super(FindSystemTest, self).setUp() | |
| 43 self._stubs.sys.platform = 'win32' | |
| 44 | |
| 45 def testFindProgramFiles(self): | |
| 46 self._files.append( | |
| 47 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe') | |
| 48 self._stubs.os.program_files = 'C:\\Program Files' | |
| 49 self.assertTrue('system' in self.DoFindAllTypes()) | |
| 50 | |
| 51 def testFindProgramFilesX86(self): | |
| 52 self._files.append( | |
| 53 'C:\\Program Files(x86)\\Google\\Chrome\\Application\\chrome.exe') | |
| 54 self._stubs.os.program_files_x86 = 'C:\\Program Files(x86)' | |
| 55 self.assertTrue('system' in self.DoFindAllTypes()) | |
| 56 | |
| 57 def testFindLocalAppData(self): | |
| 58 self._files.append( | |
| 59 'C:\\Local App Data\\Google\\Chrome\\Application\\chrome.exe') | |
| 60 self._stubs.os.local_app_data = 'C:\\Local App Data' | |
| 61 self.assertTrue('system' in self.DoFindAllTypes()) | |
| 62 | |
| 63 class FindLocalBuildsTest(FindTestBase): | |
| 64 def setUp(self): | |
| 65 super(FindLocalBuildsTest, self).setUp() | |
| 66 self._stubs.sys.platform = 'win32' | |
| 67 | |
| 68 def testFindBuild(self): | |
| 69 self._files.append('..\\..\\..\\build\\Release\\chrome.exe') | |
| 70 self.assertTrue('release' in self.DoFindAllTypes()) | |
| 71 | |
| 72 def testFindOut(self): | |
| 73 self._files.append('..\\..\\..\\out\\Release\\chrome.exe') | |
| 74 self.assertTrue('release' in self.DoFindAllTypes()) | |
| 75 | |
| 76 def testFindSconsbuild(self): | |
| 77 self._files.append('..\\..\\..\\sconsbuild\\Release\\chrome.exe') | |
| 78 self.assertTrue('release' in self.DoFindAllTypes()) | |
| 79 | |
| 80 def testFindXcodebuild(self): | |
| 81 self._files.append('..\\..\\..\\xcodebuild\\Release\\chrome.exe') | |
| 82 self.assertTrue('release' in self.DoFindAllTypes()) | |
| 83 | |
| 84 class OSXFindTest(FindTestBase): | |
| 85 def setUp(self): | |
| 86 super(OSXFindTest, self).setUp() | |
| 87 self._stubs.sys.platform = 'darwin' | |
| 88 self._files.append('/Applications/Google Chrome Canary.app/' | |
| 89 'Contents/MacOS/Google Chrome Canary') | |
| 90 self._files.append('/Applications/Google Chrome.app/' + | |
| 91 'Contents/MacOS/Google Chrome') | |
| 92 self._files.append( | |
| 93 '../../../out/Release/Chromium.app/Contents/MacOS/Chromium') | |
| 94 self._files.append( | |
| 95 '../../../out/Debug/Chromium.app/Contents/MacOS/Chromium') | |
| 96 self._files.append( | |
| 97 '../../../out/Release/Content Shell.app/Contents/MacOS/Content Shell') | |
| 98 self._files.append( | |
| 99 '../../../out/Debug/Content Shell.app/Contents/MacOS/Content Shell') | |
| 100 | |
| 101 def testFindAll(self): | |
| 102 types = self.DoFindAllTypes() | |
| 103 self.assertEquals( | |
| 104 set(types), | |
| 105 set(['debug', 'release', | |
| 106 'content-shell-debug', 'content-shell-release', | |
| 107 'canary', 'system'])) | |
| 108 | |
| 109 | |
| 110 class LinuxFindTest(FindTestBase): | |
| 111 def setUp(self): | |
| 112 super(LinuxFindTest, self).setUp() | |
| 113 | |
| 114 self._stubs.sys.platform = 'linux2' | |
| 115 self._files.append('/foo/chrome') | |
| 116 self._files.append('../../../out/Release/chrome') | |
| 117 self._files.append('../../../out/Debug/chrome') | |
| 118 self._files.append('../../../out/Release/content_shell') | |
| 119 self._files.append('../../../out/Debug/content_shell') | |
| 120 | |
| 121 self.has_google_chrome_on_path = False | |
| 122 this = self | |
| 123 def call_hook(*args, **kwargs): # pylint: disable=W0613 | |
| 124 if this.has_google_chrome_on_path: | |
| 125 return 0 | |
| 126 raise OSError('Not found') | |
| 127 self._stubs.subprocess.call = call_hook | |
| 128 | |
| 129 def testFindAllWithExact(self): | |
| 130 types = self.DoFindAllTypes() | |
| 131 self.assertEquals( | |
| 132 set(types), | |
| 133 set(['debug', 'release', | |
| 134 'content-shell-debug', 'content-shell-release'])) | |
| 135 | |
| 136 def testFindWithProvidedExecutable(self): | |
| 137 self._options.browser_executable = '/foo/chrome' | |
| 138 self.assertTrue('exact' in self.DoFindAllTypes()) | |
| 139 | |
| 140 def testFindUsingDefaults(self): | |
| 141 self.has_google_chrome_on_path = True | |
| 142 self.assertTrue('release' in self.DoFindAllTypes()) | |
| 143 | |
| 144 del self._files[1] | |
| 145 self.has_google_chrome_on_path = True | |
| 146 self.assertTrue('system' in self.DoFindAllTypes()) | |
| 147 | |
| 148 self.has_google_chrome_on_path = False | |
| 149 del self._files[1] | |
| 150 self.assertEquals(['content-shell-debug', 'content-shell-release'], | |
| 151 self.DoFindAllTypes()) | |
| 152 | |
| 153 def testFindUsingRelease(self): | |
| 154 self.assertTrue('release' in self.DoFindAllTypes()) | |
| 155 | |
| 156 | |
| 157 class WinFindTest(FindTestBase): | |
| 158 def setUp(self): | |
| 159 super(WinFindTest, self).setUp() | |
| 160 | |
| 161 self._stubs.sys.platform = 'win32' | |
| 162 self._stubs.os.local_app_data = 'c:\\Users\\Someone\\AppData\\Local' | |
| 163 self._files.append('c:\\tmp\\chrome.exe') | |
| 164 self._files.append('..\\..\\..\\build\\Release\\chrome.exe') | |
| 165 self._files.append('..\\..\\..\\build\\Debug\\chrome.exe') | |
| 166 self._files.append('..\\..\\..\\build\\Release\\content_shell.exe') | |
| 167 self._files.append('..\\..\\..\\build\\Debug\\content_shell.exe') | |
| 168 self._files.append(self._stubs.os.local_app_data + '\\' + | |
| 169 'Google\\Chrome\\Application\\chrome.exe') | |
| 170 self._files.append(self._stubs.os.local_app_data + '\\' + | |
| 171 'Google\\Chrome SxS\\Application\\chrome.exe') | |
| 172 | |
| 173 def testFindAllGivenDefaults(self): | |
| 174 types = self.DoFindAllTypes() | |
| 175 self.assertEquals(set(types), | |
| 176 set(['debug', 'release', | |
| 177 'content-shell-debug', 'content-shell-release', | |
| 178 'system', 'canary'])) | |
| 179 | |
| 180 def testFindAllWithExact(self): | |
| 181 self._options.browser_executable = 'c:\\tmp\\chrome.exe' | |
| 182 types = self.DoFindAllTypes() | |
| 183 self.assertEquals( | |
| 184 set(types), | |
| 185 set(['exact', | |
| 186 'debug', 'release', | |
| 187 'content-shell-debug', 'content-shell-release', | |
| 188 'system', 'canary'])) | |
| OLD | NEW |