File: mach_commands.py

package info (click to toggle)
firefox 147.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,324 kB
  • sloc: cpp: 7,607,156; javascript: 6,532,492; ansic: 3,775,158; python: 1,415,368; xml: 634,556; asm: 438,949; java: 186,241; sh: 62,751; makefile: 18,079; objc: 13,092; perl: 12,808; 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 (94 lines) | stat: -rw-r--r-- 2,859 bytes parent folder | download | duplicates (2)
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
# 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 argparse
import os
import subprocess

from mach.decorators import Command, CommandArgument
from mozbuild.base import MozbuildObject
from mozbuild.nodeutil import find_node_executable

suites = [
    "aboutdebugging",
    "accessibility",
    "all",
    "application",
    "compatibility",
    "debugger",
    "framework",
    "netmonitor",
    "performance",
    "shared_components",
    "webconsole",
]


class DevToolsNodeTestRunner(MozbuildObject):
    """Run DevTools node tests."""

    def run_node_tests(self, suite=None, artifact=None):
        """Run the DevTools node test suites."""
        devtools_bin_dir = os.path.join(self.topsrcdir, "devtools", "client", "bin")
        test_runner_script = os.path.join(
            devtools_bin_dir, "devtools-node-test-runner.js"
        )

        if suite and suite not in suites:
            print(
                f"ERROR: Invalid suite '{suite}'. Valid suites are: {', '.join(suites)}"
            )
            return 1

        # Build the command to run
        node_binary, _ = find_node_executable()
        cmd = [node_binary, test_runner_script]

        # Add artifact argument if specified
        if artifact:
            cmd.append(f"--artifact={artifact}")

        # Add suite argument
        cmd.append(f"--suite={suite}")

        print(f"Running: {' '.join(cmd)}")
        print(f"Working directory: {devtools_bin_dir}")

        try:
            # Run the test runner from the devtools bin directory
            result = subprocess.run(cmd, cwd=devtools_bin_dir, check=False)
            return result.returncode
        except FileNotFoundError:
            print(
                "ERROR: Node.js not found. Please ensure Node.js is installed and in your PATH."
            )
            return 1
        except Exception as e:
            print(f"ERROR: Failed to run DevTools node tests: {e}")
            return 1


@Command(
    "devtools-node-test",
    category="testing",
    description="Run DevTools node tests",
    parser=argparse.ArgumentParser(),
)
@CommandArgument(
    "--suite",
    default="all",
    help=f"(optional) Test suite to run. Runs all suites when omitted. Available suites: {', '.join(suites)}",
)
@CommandArgument(
    "--artifact",
    help="Path to write test error artifacts as JSON. Useful for CI integration "
    "and error reporting.",
)
def run_devtools_node_test(command_context, suite=None, artifact=None, **kwargs):
    """Run DevTools node tests."""
    runner = DevToolsNodeTestRunner.from_environment(
        cwd=os.getcwd(), detect_virtualenv_mozinfo=False
    )

    return runner.run_node_tests(suite=suite, artifact=artifact)