102 lines
3.7 KiB
Python
102 lines
3.7 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
# Integrates android tests with mach
|
|
|
|
import os
|
|
|
|
from mach.decorators import Command, CommandArgument
|
|
|
|
|
|
def classname_for_test(test, test_path):
|
|
"""Convert path of test file to gradle recognized test suite name"""
|
|
# Example:
|
|
# test = mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt
|
|
# test_path = src/test/java
|
|
# returns = mozilla.components.feature.addons.ui.PermissionsDialogFragmentTest
|
|
return (
|
|
os.path.normpath(test)
|
|
.split(os.path.normpath(test_path))[-1]
|
|
.removeprefix(os.path.sep)
|
|
.replace(os.path.sep, ".")
|
|
.removesuffix(".kt")
|
|
)
|
|
|
|
|
|
def project_for_ac(test, test_path):
|
|
"""Get project name for android-component subprojects from path of test file"""
|
|
# Example:
|
|
# test = mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt
|
|
# test_path = src/test/java
|
|
# returns = feature-addons
|
|
dir = os.path.normpath("mobile/android/android-components/components")
|
|
return (
|
|
os.path.normpath(test)
|
|
.split(os.path.normpath(dir))[-1]
|
|
.split(os.path.normpath(test_path))[0]
|
|
.removeprefix(os.path.sep)
|
|
.removesuffix(os.path.sep)
|
|
.replace(os.path.sep, "-")
|
|
)
|
|
|
|
|
|
@Command(
|
|
"android-test",
|
|
category="testing",
|
|
description="Run Android tests.",
|
|
)
|
|
@CommandArgument(
|
|
"--subproject",
|
|
default="fenix",
|
|
choices=["fenix", "focus", "android-components", "ac"],
|
|
help="Android subproject to run tests for.",
|
|
)
|
|
@CommandArgument(
|
|
"--test",
|
|
default=None,
|
|
help="Test to run",
|
|
)
|
|
def run_android_test(command_context, subproject, test=None, test_objects=[], **kwargs):
|
|
gradle_command = []
|
|
AC = ("android-components", "ac")
|
|
if subproject == "fenix":
|
|
gradle_command = ["testDebug", "testFenixDebugUnitTest"]
|
|
subdir = os.path.join("mobile", "android", "fenix")
|
|
test_path = os.path.join(subdir, "app", "src", "test", "java")
|
|
elif subproject == "focus":
|
|
gradle_command = ["testFocusDebugUnitTest"]
|
|
subdir = os.path.join("mobile", "android", "focus-android")
|
|
test_path = os.path.join(subdir, "app", "src", "test", "java")
|
|
elif subproject in AC:
|
|
subdir = os.path.join("mobile", "android", "android-components")
|
|
if not test_objects and not test:
|
|
return command_context._mach_context.commands.dispatch(
|
|
"gradle",
|
|
command_context._mach_context,
|
|
args=["-q", "test", "--rerun", "-p", subdir],
|
|
)
|
|
test_path = os.path.join("src", "test", "java")
|
|
else:
|
|
return None
|
|
for test_object in test_objects:
|
|
if subproject in AC:
|
|
gradle_command.append(
|
|
":"
|
|
+ project_for_ac(test_object["name"], test_path)
|
|
+ ":testDebugUnitTest"
|
|
)
|
|
gradle_command.append("--tests")
|
|
gradle_command.append(classname_for_test(test_object["name"], test_path))
|
|
if test:
|
|
if subproject in AC:
|
|
gradle_command.append(
|
|
":" + project_for_ac(test, test_path) + ":testDebugUnitTest"
|
|
)
|
|
gradle_command.append("--tests")
|
|
gradle_command.append(classname_for_test(test, test_path))
|
|
return command_context._mach_context.commands.dispatch(
|
|
"gradle",
|
|
command_context._mach_context,
|
|
args=gradle_command + ["-q", "--rerun", "-p", subdir],
|
|
)
|