| # Copyright 2023 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| |
| from dataclasses import dataclass |
| from typing import List, Self |
| |
| from params import Params |
| |
| |
| @dataclass |
| class Command: |
| """Class for generating ffx command from 'Params'.""" |
| |
| sdk_tool_path: str |
| target: str |
| test_url: str |
| realm: str |
| max_severity_logs: str |
| test_args: List[str] |
| test_filters: List[str] |
| run_disabled_tests: bool |
| parallel: str |
| output_directory: str |
| |
| @classmethod |
| def initialize(cls, params: Params) -> Self: |
| """Initialize command from params. |
| |
| Args: |
| params (Params): 'Params' object |
| |
| Returns: |
| Self |
| """ |
| ep = params.execution_params |
| return cls( |
| params.sdk_tool_path, |
| params.target, |
| ep.test_url, |
| ep.realm, |
| ep.max_severity_logs, |
| ep.test_args, |
| ep.test_filters, |
| ep.run_disabled_tests, |
| ep.parallel, |
| params.output_directory, |
| ) |
| |
| def get_command(self, isolate_dir: str) -> List[str]: |
| """Build and return the command to run. |
| |
| Args: |
| isolate_dir (str): Directory to run the command in (if provided) |
| |
| Returns: |
| List[str]: List representation of the final built command. |
| """ |
| # TODO(anmittal): Support test filter. |
| cmd = [os.path.join(self.sdk_tool_path, "ffx")] |
| if isolate_dir: |
| cmd.extend(["--isolate-dir", isolate_dir]) |
| if self.target: |
| cmd.extend(["-t", self.target]) |
| cmd.extend(["test", "run", self.test_url]) |
| if self.realm: |
| cmd.extend(["--realm", self.realm]) |
| if self.output_directory: |
| cmd.extend(["--output-directory", self.output_directory]) |
| if self.max_severity_logs: |
| cmd.extend(["--max-severity-logs", self.max_severity_logs]) |
| if self.parallel: |
| cmd.extend(["--parallel", self.parallel]) |
| if self.run_disabled_tests: |
| cmd.append("--run-disabled") |
| return cmd |