- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / chrome / android_browser_finder_unittest.py
1 # Copyright 2013 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.backends.chrome import android_browser_finder
8 from telemetry.unittest import system_stub
9
10 class LoggingStub(object):
11   def __init__(self):
12     self.warnings = []
13
14   def info(self, msg, *args):
15     pass
16
17   def warn(self, msg, *args):
18     self.warnings.append(msg % args)
19
20 class AndroidBrowserFinderTest(unittest.TestCase):
21   def setUp(self):
22     self._stubs = system_stub.Override(android_browser_finder,
23                                        ['adb_commands', 'subprocess'])
24     android_browser_finder.adb_works = None  # Blow cache between runs.
25
26   def tearDown(self):
27     self._stubs.Restore()
28
29   def test_no_adb(self):
30     finder_options = browser_options.BrowserFinderOptions()
31
32     def NoAdb(*args, **kargs): # pylint: disable=W0613
33       raise OSError('not found')
34     self._stubs.subprocess.Popen = NoAdb
35     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
36     self.assertEquals(0, len(browsers))
37
38   def test_adb_no_devices(self):
39     finder_options = browser_options.BrowserFinderOptions()
40
41     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
42     self.assertEquals(0, len(browsers))
43
44
45   def test_adb_permissions_error(self):
46     finder_options = browser_options.BrowserFinderOptions()
47
48     self._stubs.subprocess.Popen.communicate_result = (
49         """List of devices attached
50 ????????????\tno permissions""",
51         """* daemon not running. starting it now on port 5037 *
52 * daemon started successfully *
53 """)
54
55     log_stub = LoggingStub()
56     browsers = android_browser_finder.FindAllAvailableBrowsers(
57       finder_options, log_stub)
58     self.assertEquals(3, len(log_stub.warnings))
59     self.assertEquals(0, len(browsers))
60
61
62   def test_adb_two_devices(self):
63     finder_options = browser_options.BrowserFinderOptions()
64
65     self._stubs.adb_commands.attached_devices = ['015d14fec128220c',
66                                                  '015d14fec128220d']
67
68     log_stub = LoggingStub()
69     browsers = android_browser_finder.FindAllAvailableBrowsers(
70       finder_options, log_stub)
71     self.assertEquals(1, len(log_stub.warnings))
72     self.assertEquals(0, len(browsers))
73
74   def test_adb_one_device(self):
75     finder_options = browser_options.BrowserFinderOptions()
76
77     self._stubs.adb_commands.attached_devices = ['015d14fec128220c']
78
79     def OnPM(args):
80       assert args[0] == 'pm'
81       assert args[1] == 'list'
82       assert args[2] == 'packages'
83       return ['package:org.chromium.content_shell_apk',
84               'package.com.google.android.setupwizard']
85
86     self._stubs.adb_commands.shell_command_handlers['pm'] = OnPM
87
88     browsers = android_browser_finder.FindAllAvailableBrowsers(finder_options)
89     self.assertEquals(1, len(browsers))