File: ui_tests.py

package info (click to toggle)
firefox 146.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,653,260 kB
  • sloc: cpp: 7,587,892; javascript: 6,509,455; ansic: 3,755,295; python: 1,410,813; xml: 629,201; asm: 438,677; java: 186,096; sh: 62,697; makefile: 18,086; objc: 13,087; perl: 12,811; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (129 lines) | stat: -rw-r--r-- 4,239 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# 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/.

import os

from taskgraph.transforms.base import TransformSequence

transforms = TransformSequence()


_ANDROID_TASK_NAME_PREFIX = "android-"


@transforms.add
def set_component_attribute(config, tasks):
    for task in tasks:
        component_name = task.pop("component", None)
        if not component_name:
            task_name = task["name"]
            if task_name.startswith(_ANDROID_TASK_NAME_PREFIX):
                component_name = task_name[len(_ANDROID_TASK_NAME_PREFIX) :]
            else:
                raise NotImplementedError(
                    f"Cannot determine component name from task {task_name}"
                )

        attributes = task.setdefault("attributes", {})
        attributes["component"] = component_name

        yield task


@transforms.add
def define_ui_test_command_line(config, tasks):
    def apk_path(component_fragment, variant, apk_filename):
        return os.path.join(
            "/builds/worker/workspace/obj-build",
            "gradle/build",
            f"mobile/android/android-components/{component_fragment}",
            f"outputs/apk/{variant}",
            apk_filename,
        )

    for task in tasks:
        component = task["attributes"]["component"]
        flank_config = "components/arm.yml"

        apk_app, apk_test = None, None

        if component == "samples-browser":
            # Case 2: Exact match for "samples-browser" – gecko paths with "-debug"
            apk_app = apk_path(
                "samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
            )
            apk_test = apk_path(
                "samples/browser",
                "androidTest/gecko/debug",
                "samples-browser-gecko-debug-androidTest.apk",
            )

        elif component.startswith("samples-"):
            # Case 3: Other samples-* (e.g., samples-glean)
            sample = component.replace("samples-", "")
            apk_app = apk_path(
                f"samples/{sample}", "debug", f"samples-{sample}-debug.apk"
            )
            apk_test = apk_path(
                f"samples/{sample}",
                "androidTest/debug",
                f"samples-{sample}-debug-androidTest.apk",
            )

        elif "-" in component:
            # Case 1a: Component with dash (e.g., feature-share → components/feature/share)
            category, submodule = component.split("-", 1)
            apk_app = apk_path(
                "samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
            )
            apk_test = apk_path(
                f"components/{category}/{submodule}",
                "androidTest/debug",
                f"{component}-debug-androidTest.apk",
            )

        else:
            # Case 1b: Component with no dash (e.g., browser → components/browser/engine-gecko)
            apk_app = apk_path(
                "samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
            )
            apk_test = apk_path(
                f"components/{component}/engine-gecko",
                "androidTest/debug",
                "browser-engine-gecko-debug-androidTest.apk",
            )

        run = task.setdefault("run", {})
        post_gradlew = run.setdefault("post-gradlew", [])
        post_gradlew.append(
            [
                "python3",
                "taskcluster/scripts/tests/test-lab.py",
                flank_config,
                apk_app,
                "--apk_test",
                apk_test,
            ]
        )

        yield task


@transforms.add
def define_treeherder_symbol(config, tasks):
    for task in tasks:
        treeherder = task.setdefault("treeherder")
        treeherder.setdefault("symbol", f"{task['attributes']['component']}(unit)")

        yield task


@transforms.add
def define_description(config, tasks):
    for task in tasks:
        task.setdefault(
            "description",
            f"Run unit/ui tests on device for {task['attributes']['component']}",
        )
        yield task