• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2024 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from __future__ import annotations
6
7import unittest
8
9from crossbench import path as pth
10from crossbench import plt
11from crossbench.browsers.settings import Settings
12from crossbench.browsers.splash_screen import SplashScreen
13from crossbench.browsers.viewport import Viewport
14from crossbench.flags.base import Flags
15from crossbench.flags.chrome import ChromeFlags
16from crossbench.flags.js_flags import JSFlags
17
18
19class SettingsTestCase(unittest.TestCase):
20
21  def test_defaults(self):
22    settings = Settings()
23    self.assertEqual(settings.flags, Flags())
24    self.assertEqual(settings.js_flags, Flags())
25    self.assertIsNone(settings.cache_dir)
26    self.assertEqual(settings.viewport, Viewport.DEFAULT)
27    self.assertIsNone(settings.driver_path)
28    self.assertEqual(settings.splash_screen, SplashScreen.DEFAULT)
29    self.assertTrue(settings.network.is_live)
30    self.assertEqual(settings.platform, plt.PLATFORM)
31
32  def test_custom(self):
33    flags = Flags({"--one": "1", "--two": "2"}).freeze()
34    js_flags = Flags({"--js-one": "js-1", "--js-two": "js-2"}).freeze()
35    settings = Settings(
36        flags,
37        js_flags,
38        cache_dir=pth.LocalPath("cache"),
39        viewport=Viewport.FULLSCREEN,
40        driver_path=pth.LocalPath("driver"),
41        splash_screen=SplashScreen.DETAILED,
42    )
43    self.assertEqual(settings.flags, flags)
44    self.assertEqual(settings.js_flags, js_flags)
45    self.assertEqual(settings.cache_dir, pth.LocalPath("cache"))
46    self.assertEqual(settings.viewport, Viewport.FULLSCREEN)
47    self.assertEqual(settings.driver_path, pth.LocalPath("driver"))
48    self.assertEqual(settings.splash_screen, SplashScreen.DETAILED)
49    self.assertTrue(settings.network.is_live)
50
51  def test_js_flags_alone(self):
52    js_flags = Flags({"--js-one": "js-1", "--js-two": "js-2"}).freeze()
53    settings = Settings(js_flags=js_flags)
54    self.assertEqual(settings.flags, Flags())
55    self.assertEqual(settings.js_flags, js_flags)
56
57  def test_chrome_flags(self):
58    flags = ChromeFlags({"--one": "1", "--two": "2"}).freeze()
59    settings = Settings(flags)
60    self.assertEqual(settings.flags, flags)
61    self.assertIsInstance(settings.flags, ChromeFlags)
62    self.assertEqual(settings.js_flags, JSFlags())
63    self.assertIsInstance(settings.js_flags, JSFlags)
64
65  def test_chrome_flags_js_flags(self):
66    flags = ChromeFlags({
67        "--one": "1",
68        "--two": "2",
69        "--js-flags": "--js-one=js-1"
70    }).freeze()
71    settings = Settings(flags)
72    self.assertEqual(settings.flags, flags)
73    self.assertIsInstance(settings.flags, ChromeFlags)
74    self.assertEqual(settings.js_flags, JSFlags({"--js-one": "js-1"}))
75    self.assertIsInstance(settings.js_flags, JSFlags)
76
77  def test_chrome_flags_separate_js_flags(self):
78    flags = ChromeFlags({"--one": "1", "--two": "2"}).freeze()
79    js_flags = Flags({"--js-one": "js-1", "--js-two": "js-2"}).freeze()
80    settings = Settings(flags, js_flags)
81    self.assertEqual(settings.flags, flags)
82    self.assertIsInstance(settings.flags, ChromeFlags)
83    self.assertEqual(settings.js_flags, js_flags)
84    self.assertIsInstance(settings.js_flags, Flags)
85
86  def test_ambiguous_js_flags(self):
87    flags = ChromeFlags({"--one": "1", "--js-flags": "--js-one=js-1"}).freeze()
88    with self.assertRaises(ValueError) as cm:
89      _ = Settings(flags, js_flags=Flags({"--js-two": "js-2"}))
90    self.assertIn("js-flags", str(cm.exception))
91