blob: eef907a11be89ecb5f06638c38a81f7eb8f42b4e [file] [log] [blame]
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Build definition helpers for MobStore library."""
load("@build_bazel_rules_android//android:rules.bzl", "android_application_test")
# NOTE: API level 16 is the lowest supported by GmsCore (<internal>)
_DEFAULT_TARGET_APIS = [
"16",
"17",
"18",
"19",
# generic_phone:google_20_x86_gms_stable does not exist (20=KitKat Wear)
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
]
_GENERIC_DEVICE_FMT = "generic_phone:google_%s_x86_gms_stable"
_EMULATOR_DIRECTORY = "//tools/android/emulated_devices/%s"
def android_test_multi_api(
name,
target_apis = _DEFAULT_TARGET_APIS,
**kwargs):
"""Simple definition for running an android_application_test against multiple API levels.
For each of the specified API levels we generate an android_application_test for the
given test file run at that API level. All of these tests will be run on
TAP. We also generate a duplicate target at the highest API level for ease
of local testing; it's marked notap so TAP doesn't run the same test twice.
For example, with FooTest.java and API levels 18 and 19, we generate:
...:FooTest_generic_phone_google_18_x86_gms_stable (API level 18)
...:FooTest_generic_phone_google_19_x86_gms_stable (API level 19)
...:FooTest (API level 19)
Args:
name: Name of the "default" test target and used to derive subtargets
target_apis: List of Android API levels as strings for which a test should
be generated. If unspecified, 16-28 excluding 20 are used.
**kwargs: Parameters that are passed to the generated android_application_test rule.
"""
# Generate a verbosely-named test target at each API level for TAP testing
target_devices = []
for target_api in target_apis:
target_device = _GENERIC_DEVICE_FMT % (target_api)
target_devices.append(target_device)
android_test_multi_device(
name = name,
target_devices = target_devices,
**kwargs
)
# Duplicate the highest API target with a simple name for local testing
top_api = target_apis[-1]
test_device = _EMULATOR_DIRECTORY % (_GENERIC_DEVICE_FMT % top_api)
android_application_test(
name = name,
target_devices = [test_device],
tags = ["notap"],
**kwargs
)
# TODO: consider combining with android_test_multi_api
def android_test_multi_device(
name,
target_devices,
**kwargs):
"""Simple definition for running an android_application_test against multiple devices.
Args:
name: Name of the test rule; we generate several sub-targets based on API.
target_devices: List of emulators as strings for which a test should be
generated.
**kwargs: Parameters that are passed to the generated android_application_test rule.
"""
for target_device in target_devices:
sanitized_device = target_device.replace(":", "_") # ":" is invalid
test_name = "%s_%s" % (name, sanitized_device)
test_device = _EMULATOR_DIRECTORY % (target_device)
android_application_test(
name = test_name,
target_devices = [test_device],
**kwargs
)