Index: tools/chrome_remote_control/chrome_remote_control/browser_finder_unittest.py |
diff --git a/tools/chrome_remote_control/chrome_remote_control/browser_finder_unittest.py b/tools/chrome_remote_control/chrome_remote_control/browser_finder_unittest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..39994af289bc52856241f4e6767b9ee524230d81 |
--- /dev/null |
+++ b/tools/chrome_remote_control/chrome_remote_control/browser_finder_unittest.py |
@@ -0,0 +1,134 @@ |
+# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+import unittest |
+import browser |
+import browser_options |
+import browser_finder |
+import os as real_os |
+ |
+# This file verifies the logic for finding a browser instance on all platforms |
+# at once. It does so by providing stubs for the OS/sys/subprocess primitives |
+# that the underlying finding logic usually uses to locate a suitable browser. |
+# We prefer this approach to having to run the same test on every platform on |
+# which we want this code to work. |
+ |
+class StubOSPath(object): |
+ def __init__(self, stub_os): |
+ self._os_stub = stub_os |
+ |
+ def exists(self, path): |
+ return path in self._os_stub.files |
+ |
+ def join(self, *args): |
+ return real_os.path.join(*args) |
+ |
+ def dirname(self, filename): |
+ return real_os.path.dirname(filename) |
+ |
+class StubOS(object): |
+ def __init__(self): |
+ self.path = StubOSPath(self) |
+ self.files = [] |
+ |
+class StubSys(object): |
+ def __init__(self): |
+ self.platform = "" |
+ |
+class StubSubprocess(object): |
+ def __init__(self): |
+ self.call_hook = None |
+ |
+ def call(self, *args, **kwargs): |
+ if not self.call_hook: |
+ raise Exception("Should not be reached.") |
+ return self.call_hook(*args, **kwargs) |
+ |
+class FindTestBase(unittest.TestCase): |
+ def setUp(self): |
+ self._options = browser_options.BrowserOptions() |
+ self._options.chrome_root = "../../../" |
+ self._os_stub = StubOS() |
+ self._sys_stub = StubSys() |
+ self._subprocess_stub = StubSubprocess() |
+ |
+ @property |
+ def _files(self): |
+ return self._os_stub.files |
+ |
+ def DoFind(self): |
+ return browser_finder.FindBestPossibleBrowser(self._options, |
+ self._os_stub, self._sys_stub, self._subprocess_stub) |
+ |
+ def DoFindAll(self): |
+ return browser_finder.FindAllPossibleBrowsers(self._options, |
+ self._os_stub, self._sys_stub, self._subprocess_stub) |
+ |
+def has_type(array, type): |
+ return len([x for x in array if x.type == type]) != 0 |
+ |
+class OSXFindTest(FindTestBase): |
+ def setUp(self): |
+ super(OSXFindTest, self).setUp() |
+ self._sys_stub.platform = 'darwin' |
+ self._files.append("/Applications/Google Chrome Canary.app/" |
+ "Contents/MacOS/Google Chrome Canary") |
+ self._files.append("/Applications/Google Chrome.app/" + |
+ "Contents/MacOS/Google Chrome") |
+ |
+ def testFindCanaryWithBothPresent(self): |
+ x = self.DoFind() |
+ self.assertEquals("canary", x.type) |
+ |
+ def testFind(self): |
+ ary = self.DoFindAll() |
+ self.assertTrue(has_type(ary, 'canary')) |
+ self.assertTrue(has_type(ary, 'system')) |
+ |
+ del self._files[0] |
+ ary = self.DoFindAll() |
+ self.assertFalse(has_type(ary, 'canary')) |
+ self.assertTrue(has_type(ary, 'system')) |
+ |
+ |
+class LinuxFindTest(FindTestBase): |
+ def setUp(self): |
+ super(LinuxFindTest, self).setUp() |
+ |
+ self._sys_stub.platform = 'linux2' |
+ self._files.append("/foo/chrome") |
+ self._files.append("../../../out/Release/chrome") |
+ self._files.append("../../../out/Debug/chrome") |
+ |
+ self._has_google_chrome_on_path = False |
+ this = self |
+ def call_hook(*args, **kwargs): |
+ if this._has_google_chrome_on_path: |
+ return 0 |
+ raise OSError("Not found") |
+ self._subprocess_stub.call_hook = call_hook |
+ |
+ def testFindWithProvidedExecutable(self): |
+ self._options.browser_executable = "/foo/chrome" |
+ x = self.DoFind() |
+ self.assertEquals("exact", x.type) |
+ |
+ def testFindUsingDefaults(self): |
+ self._has_google_chrome_on_path = True |
+ x = self.DoFind() |
+ self.assertEquals("release", x.type) |
+ |
+ del self._files[1] |
+ self._has_google_chrome_on_path = True |
+ x = self.DoFind() |
+ self.assertEquals("system", x.type) |
+ |
+ self._has_google_chrome_on_path = False |
+ x = self.DoFind() |
+ self.assertEquals(x, None) |
+ |
+ def testFindUsingRelease(self): |
+ self._options.browser_types_to_use.append("debug") |
+ x = self.DoFind() |
+ self.assertEquals("release", x.type) |
+ |