1# Copyright 2023 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 5import argparse 6 7from tests import test_helper 8from tests.crossbench import mock_browser 9from tests.crossbench.base import BaseCrossbenchTestCase 10 11from crossbench import path as pth 12from crossbench.browsers.chrome.webdriver import (ChromeWebDriver, 13 LocalChromeWebDriverAndroid) 14from crossbench.browsers.settings import Settings 15 16 17class ChromeWebDriverForTesting(ChromeWebDriver): 18 19 def _extract_version(self) -> str: 20 return mock_browser.MockChromeStable.VERSION 21 22 23class ChromeWebdriverTestCase(BaseCrossbenchTestCase): 24 25 def test_conflicting_finch_flags(self) -> None: 26 with self.assertRaises(argparse.ArgumentTypeError) as cm: 27 ChromeWebDriverForTesting( 28 label="browser-label", 29 path=mock_browser.MockChromeStable.mock_app_path(), 30 settings=Settings( 31 js_flags=[], 32 flags=[ 33 "--disable-field-trial-config", "--enable-field-trial-config" 34 ], 35 platform=self.platform)) 36 msg = str(cm.exception) 37 self.assertIn("--enable-field-trial-config", msg) 38 self.assertIn("--disable-field-trial-config", msg) 39 40 def test_auto_disabling_field_trials(self): 41 browser = ChromeWebDriverForTesting( 42 label="browser-label", 43 path=mock_browser.MockChromeStable.mock_app_path(), 44 settings=Settings(platform=self.platform)) 45 self.assertIn("--disable-field-trial-config", browser.flags) 46 47 browser_field_trial = ChromeWebDriverForTesting( 48 label="browser-label", 49 path=mock_browser.MockChromeStable.mock_app_path(), 50 settings=Settings( 51 flags=["--force-fieldtrials"], platform=self.platform)) 52 self.assertIn("--force-fieldtrials", browser_field_trial.flags) 53 self.assertNotIn("--disable-field-trial-config", browser_field_trial.flags) 54 55 def test_auto_disabling_field_trials_all(self): 56 for field_trial_flag in ChromeWebDriver.FIELD_TRIAL_FLAGS: 57 browser = ChromeWebDriverForTesting( 58 label="browser-label", 59 path=mock_browser.MockChromeStable.mock_app_path(), 60 settings=Settings(flags=[field_trial_flag], platform=self.platform)) 61 flags = browser.flags 62 for no_experiment_flag in ChromeWebDriver.NO_EXPERIMENTS_FLAGS: 63 self.assertNotIn(no_experiment_flag, flags) 64 65 66class LocalChromeWebDriverAndroidTestCase(BaseCrossbenchTestCase): 67 68 def test_is_apk_helper(self): 69 self.assertTrue( 70 LocalChromeWebDriverAndroid.is_apk_helper( 71 pth.AnyPath("/home/user/Documents/chrome/src/" 72 "out/arm64.apk/bin/chrome_public_apk"))) 73 self.assertFalse(LocalChromeWebDriverAndroid.is_apk_helper(None)) 74 self.assertFalse( 75 LocalChromeWebDriverAndroid.is_apk_helper( 76 pth.AnyPath("org.chromium.chrome"))) 77 78 79if __name__ == "__main__": 80 test_helper.run_pytest(__file__) 81