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.
60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
11 months ago
|
# 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,
|
||
|
}})
|