| # Copyright 2023 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import attr |
| import pytest |
| |
| from chrome.test.variations import test_utils |
| from chrome.test.variations.fixtures.result_sink import AddTag |
| |
| @attr.define(frozen=True) |
| class TestOptions: |
| platform: str = attr.attrib() |
| channel: str = attr.attrib() |
| chrome_version: str = attr.attrib() |
| changelist: int = attr.attrib() |
| |
| def pytest_addoption(parser): |
| # By default, running on the hosted platform. |
| parser.addoption('--target-platform', |
| default=test_utils.get_hosted_platform(), |
| dest='target_platform', |
| choices=['linux', 'win', 'mac', 'android', 'webview', |
| 'android_webview', 'cros', 'lacros'], |
| help='If present, run for the target platform, ' |
| 'defaults to the host platform.') |
| |
| parser.addoption('--channel', |
| default='dev', |
| choices=['dev', 'canary', 'beta', 'stable', 'extended'], |
| help='The channel of Chrome to download.') |
| |
| parser.addoption('--chrome-version', |
| dest='chrome_version', |
| help='The version of Chrome to download. ' |
| 'If this is set, --channel will be ignored.') |
| |
| parser.addoption('--changelist', |
| dest='changelist', |
| help='google3 changelist number (optional).') |
| |
| @pytest.fixture(scope="session") |
| def test_options(pytestconfig) -> TestOptions: |
| return TestOptions( |
| platform=pytestconfig.getoption('target_platform'), |
| channel=pytestconfig.getoption('channel'), |
| chrome_version=pytestconfig.getoption('chrome_version'), |
| changelist=pytestconfig.getoption('changelist') |
| ) |
| |
| @pytest.fixture(autouse=True) |
| def tag_test_options(test_options, add_tag:AddTag) -> None: |
| # Add test parameters to result logs. |
| add_tag('platform', test_options.platform) |
| add_tag('channel', test_options.channel) |
| if test_options.chrome_version: |
| add_tag('chrome_version', test_options.chrome_version) |
| if test_options.changelist: |
| add_tag('changelist', test_options.changelist) |