tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ui_tests.py (4189B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 import os
      6 
      7 from taskgraph.transforms.base import TransformSequence
      8 
      9 transforms = TransformSequence()
     10 
     11 
     12 _ANDROID_TASK_NAME_PREFIX = "android-"
     13 
     14 
     15 @transforms.add
     16 def set_component_attribute(config, tasks):
     17    for task in tasks:
     18        component_name = task.pop("component", None)
     19        if not component_name:
     20            task_name = task["name"]
     21            if task_name.startswith(_ANDROID_TASK_NAME_PREFIX):
     22                component_name = task_name[len(_ANDROID_TASK_NAME_PREFIX) :]
     23            else:
     24                raise NotImplementedError(
     25                    f"Cannot determine component name from task {task_name}"
     26                )
     27 
     28        attributes = task.setdefault("attributes", {})
     29        attributes["component"] = component_name
     30 
     31        yield task
     32 
     33 
     34 @transforms.add
     35 def define_ui_test_command_line(config, tasks):
     36    def apk_path(component_fragment, variant, apk_filename):
     37        return os.path.join(
     38            "/builds/worker/workspace/obj-build",
     39            "gradle/build",
     40            f"mobile/android/android-components/{component_fragment}",
     41            f"outputs/apk/{variant}",
     42            apk_filename,
     43        )
     44 
     45    for task in tasks:
     46        component = task["attributes"]["component"]
     47        flank_config = "components/arm.yml"
     48 
     49        apk_app, apk_test = None, None
     50 
     51        if component == "samples-browser":
     52            # Case 2: Exact match for "samples-browser" – gecko paths with "-debug"
     53            apk_app = apk_path(
     54                "samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
     55            )
     56            apk_test = apk_path(
     57                "samples/browser",
     58                "androidTest/gecko/debug",
     59                "samples-browser-gecko-debug-androidTest.apk",
     60            )
     61 
     62        elif component.startswith("samples-"):
     63            # Case 3: Other samples-* (e.g., samples-glean)
     64            sample = component.replace("samples-", "")
     65            apk_app = apk_path(
     66                f"samples/{sample}", "debug", f"samples-{sample}-debug.apk"
     67            )
     68            apk_test = apk_path(
     69                f"samples/{sample}",
     70                "androidTest/debug",
     71                f"samples-{sample}-debug-androidTest.apk",
     72            )
     73 
     74        elif "-" in component:
     75            # Case 1a: Component with dash (e.g., feature-share → components/feature/share)
     76            category, submodule = component.split("-", 1)
     77            apk_app = apk_path(
     78                "samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
     79            )
     80            apk_test = apk_path(
     81                f"components/{category}/{submodule}",
     82                "androidTest/debug",
     83                f"{component}-debug-androidTest.apk",
     84            )
     85 
     86        else:
     87            # Case 1b: Component with no dash (e.g., browser → components/browser/engine-gecko)
     88            apk_app = apk_path(
     89                "samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
     90            )
     91            apk_test = apk_path(
     92                f"components/{component}/engine-gecko",
     93                "androidTest/debug",
     94                "browser-engine-gecko-debug-androidTest.apk",
     95            )
     96 
     97        run = task.setdefault("run", {})
     98        post_gradlew = run.setdefault("post-gradlew", [])
     99        post_gradlew.append([
    100            "python3",
    101            "taskcluster/scripts/tests/test-lab.py",
    102            flank_config,
    103            apk_app,
    104            "--apk_test",
    105            apk_test,
    106        ])
    107 
    108        yield task
    109 
    110 
    111 @transforms.add
    112 def define_treeherder_symbol(config, tasks):
    113    for task in tasks:
    114        treeherder = task.setdefault("treeherder")
    115        treeherder.setdefault("symbol", f"{task['attributes']['component']}(unit)")
    116 
    117        yield task
    118 
    119 
    120 @transforms.add
    121 def define_description(config, tasks):
    122    for task in tasks:
    123        task.setdefault(
    124            "description",
    125            f"Run unit/ui tests on device for {task['attributes']['component']}",
    126        )
    127        yield task