1#!/usr/bin/env python
2# Copyright 2015 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6
7import argparse
8import sys
9import tempfile
10import unittest
11
12from devil import devil_env
13from devil.android import device_errors
14from devil.android import device_utils
15from devil.android.tools import script_common
16
17with devil_env.SysPath(devil_env.PYMOCK_PATH):
18  import mock  # pylint: disable=import-error
19
20with devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH):
21  from dependency_manager import exceptions
22
23
24class GetDevicesTest(unittest.TestCase):
25
26  def testNoSpecs(self):
27    devices = [
28        device_utils.DeviceUtils('123'),
29        device_utils.DeviceUtils('456'),
30    ]
31    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
32                    return_value=devices):
33      self.assertEquals(
34          devices,
35          script_common.GetDevices(None, None))
36
37  def testWithDevices(self):
38    devices = [
39        device_utils.DeviceUtils('123'),
40        device_utils.DeviceUtils('456'),
41    ]
42    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
43                    return_value=devices):
44      self.assertEquals(
45          [device_utils.DeviceUtils('456')],
46          script_common.GetDevices(['456'], None))
47
48  def testMissingDevice(self):
49    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
50                    return_value=[device_utils.DeviceUtils('123')]):
51      with self.assertRaises(device_errors.DeviceUnreachableError):
52        script_common.GetDevices(['456'], None)
53
54  def testNoDevices(self):
55    with mock.patch('devil.android.device_utils.DeviceUtils.HealthyDevices',
56                    return_value=[]):
57      with self.assertRaises(device_errors.NoDevicesError):
58        script_common.GetDevices(None, None)
59
60
61class InitializeEnvironmentTest(unittest.TestCase):
62
63  def setUp(self):
64    # pylint: disable=protected-access
65    self.parser = argparse.ArgumentParser()
66    script_common.AddEnvironmentArguments(self.parser)
67    devil_env.config = devil_env._Environment()
68
69  def testNoAdb(self):
70    args = self.parser.parse_args([])
71    script_common.InitializeEnvironment(args)
72    with self.assertRaises(exceptions.NoPathFoundError):
73      devil_env.config.LocalPath('adb')
74
75  def testAdb(self):
76    with tempfile.NamedTemporaryFile() as f:
77      args = self.parser.parse_args(['--adb-path=%s' % f.name])
78      script_common.InitializeEnvironment(args)
79      self.assertEquals(
80          f.name,
81          devil_env.config.LocalPath('adb'))
82
83  def testNonExistentAdb(self):
84    with tempfile.NamedTemporaryFile() as f:
85      args = self.parser.parse_args(['--adb-path=%s' % f.name])
86    script_common.InitializeEnvironment(args)
87    with self.assertRaises(exceptions.NoPathFoundError):
88      devil_env.config.LocalPath('adb')
89
90
91if __name__ == '__main__':
92  sys.exit(unittest.main())
93
94