1# Copyright 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.
4import optparse
5import os
6import unittest
7
8from telemetry.core import browser_options
9
10class BrowserOptionsTest(unittest.TestCase):
11  def testDefaults(self):
12    options = browser_options.BrowserFinderOptions()
13    parser = options.CreateParser()
14    parser.add_option('-x', action='store', default=3)
15    parser.parse_args(['--browser', 'any'])
16    self.assertEquals(options.x, 3) # pylint: disable=E1101
17
18  def testDefaultsPlusOverride(self):
19    options = browser_options.BrowserFinderOptions()
20    parser = options.CreateParser()
21    parser.add_option('-x', action='store', default=3)
22    parser.parse_args(['--browser', 'any', '-x', 10])
23    self.assertEquals(options.x, 10) # pylint: disable=E1101
24
25  def testDefaultsDontClobberPresetValue(self):
26    options = browser_options.BrowserFinderOptions()
27    setattr(options, 'x', 7)
28    parser = options.CreateParser()
29    parser.add_option('-x', action='store', default=3)
30    parser.parse_args(['--browser', 'any'])
31    self.assertEquals(options.x, 7) # pylint: disable=E1101
32
33  def testCount0(self):
34    options = browser_options.BrowserFinderOptions()
35    parser = options.CreateParser()
36    parser.add_option('-x', action='count', dest='v')
37    parser.parse_args(['--browser', 'any'])
38    self.assertEquals(options.v, None) # pylint: disable=E1101
39
40  def testCount2(self):
41    options = browser_options.BrowserFinderOptions()
42    parser = options.CreateParser()
43    parser.add_option('-x', action='count', dest='v')
44    parser.parse_args(['--browser', 'any', '-xx'])
45    self.assertEquals(options.v, 2) # pylint: disable=E1101
46
47  def testOptparseMutabilityWhenSpecified(self):
48    options = browser_options.BrowserFinderOptions()
49    parser = options.CreateParser()
50    parser.add_option('-x', dest='verbosity', action='store_true')
51    options_ret, _ = parser.parse_args(['--browser', 'any', '-x'])
52    self.assertEquals(options_ret, options)
53    self.assertTrue(options.verbosity)
54
55  def testOptparseMutabilityWhenNotSpecified(self):
56    options = browser_options.BrowserFinderOptions()
57
58    parser = options.CreateParser()
59    parser.add_option('-x', dest='verbosity', action='store_true')
60    options_ret, _ = parser.parse_args(['--browser', 'any'])
61    self.assertEquals(options_ret, options)
62    self.assertFalse(options.verbosity)
63
64  def testProfileDirDefault(self):
65    options = browser_options.BrowserFinderOptions()
66    parser = options.CreateParser()
67    parser.parse_args(['--browser', 'any'])
68    self.assertEquals(options.browser_options.profile_dir, None)
69
70  def testProfileDir(self):
71    options = browser_options.BrowserFinderOptions()
72    parser = options.CreateParser()
73    # Need to use a directory that exists.
74    current_dir = os.path.dirname(__file__)
75    parser.parse_args(['--browser', 'any', '--profile-dir', current_dir])
76    self.assertEquals(options.browser_options.profile_dir, current_dir)
77
78  def testExtraBrowserArgs(self):
79    options = browser_options.BrowserFinderOptions()
80    parser = options.CreateParser()
81    parser.parse_args(['--extra-browser-args=--foo --bar'])
82
83    self.assertEquals(options.browser_options.extra_browser_args,
84                      set(['--foo','--bar']))
85
86  def testUseDevToolsActivePort(self):
87    options = browser_options.BrowserFinderOptions()
88    parser = options.CreateParser()
89    parser.parse_args(['--use-devtools-active-port'])
90
91    self.assertEquals(options.browser_options.use_devtools_active_port, True)
92
93  def testMergeDefaultValues(self):
94    options = browser_options.BrowserFinderOptions()
95    options.already_true = True
96    options.already_false = False
97    options.override_to_true = False
98    options.override_to_false = True
99
100    parser = optparse.OptionParser()
101    parser.add_option('--already_true', action='store_true')
102    parser.add_option('--already_false', action='store_true')
103    parser.add_option('--unset', action='store_true')
104    parser.add_option('--default_true', action='store_true', default=True)
105    parser.add_option('--default_false', action='store_true', default=False)
106    parser.add_option('--override_to_true', action='store_true', default=False)
107    parser.add_option('--override_to_false', action='store_true', default=True)
108
109    options.MergeDefaultValues(parser.get_default_values())
110
111    self.assertTrue(options.already_true)
112    self.assertFalse(options.already_false)
113    self.assertTrue(options.unset is None)
114    self.assertTrue(options.default_true)
115    self.assertFalse(options.default_false)
116    self.assertFalse(options.override_to_true)
117    self.assertTrue(options.override_to_false)
118