You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depot_tools/recipes/recipe_modules/osx_sdk/test_api.py

60 lines
2.0 KiB
Python

# Copyright 2024 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import re
from recipe_engine import recipe_test_api
class OSXSDKTestApi(recipe_test_api.RecipeTestApi):
# In tests, this will be the version that we simulate macOS to be.
DEFAULT_MACOS_VERSION = '14.4'
def macos_version(
self,
major_minor: str = DEFAULT_MACOS_VERSION) -> recipe_test_api.TestData:
"""Mock the macOS Major.Minor[.Patch] version that osx_sdk will use to pick
the Xcode SDK version from its internal table.
This will only be used if the recipe does not explicitly select an SDK
version via the osx_sdk properties (which can be mocked via the
`pick_sdk_version` method below).
Example use:
yield api.test(
'my-test-name',
api.osx_sdk.macos_version('13.3'),
)
"""
if not re.match(r'^\d+(\.\d+){1,2}$', major_minor):
raise ValueError(
f'Expected Major.Minor[.Patch] (e.g. 14.4), got {major_minor=}')
return self.step_data('find macOS version',
stdout=self.m.raw_io.output_text(major_minor))
def pick_sdk_version(self,
sdk_version: str = 'deadbeef'
) -> recipe_test_api.TestData:
"""This should be used to pick a precise SDK version.
Recipes used on builders which configure the XCode version via properties
should use this to more accurately reflect how these recipes will run in
production. Specifically, when the XCode version is selected via properties,
the osx_sdk module will not need or attempt to discover the current macOS
version (which is mockable with the `macos_version` method above).
Example use:
yield api.test(
'my-test-name',
api.osx_sdk.pick_sdk_version('13c100'),
)
"""
return self.m.properties(
**{"$depot_tools/osx_sdk": {
"sdk_version": sdk_version,
}})