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 import browser_options | |
7 from telemetry import desktop_browser_finder | |
8 from telemetry 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 |