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