|  | # Lint as: python3 | 
|  | # Copyright 2020 The IREE Authors | 
|  | # | 
|  | # Licensed under the Apache License v2.0 with LLVM Exceptions. | 
|  | # See https://llvm.org/LICENSE.txt for license information. | 
|  | # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  |  | 
|  | # pylint: disable=missing-docstring | 
|  |  | 
|  | import argparse | 
|  | import os | 
|  | import re | 
|  | import subprocess | 
|  | from typing import Sequence | 
|  |  | 
|  |  | 
|  | def create_markdown_table(rows: Sequence[Sequence[str]]): | 
|  | """Converts a 2D array to a Markdown table.""" | 
|  | return '\n'.join([' | '.join(row) for row in rows]) | 
|  |  | 
|  |  | 
|  | def check_and_get_output_lines(command: Sequence[str], | 
|  | dry_run: bool = False, | 
|  | log_stderr: bool = True): | 
|  | print(f'Running: `{" ".join(command)}`') | 
|  | if dry_run: | 
|  | return None, None | 
|  | process = subprocess.run( | 
|  | command, | 
|  | # TODO(#4131) python>=3.7: Use capture_output=True. | 
|  | stderr=subprocess.PIPE, | 
|  | stdout=subprocess.PIPE, | 
|  | # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'. | 
|  | universal_newlines=True) | 
|  |  | 
|  | if log_stderr: | 
|  | for line in process.stderr.splitlines(): | 
|  | print(line) | 
|  |  | 
|  | process.check_returncode() | 
|  |  | 
|  | return process.stdout.splitlines() | 
|  |  | 
|  |  | 
|  | def get_test_targets(test_suite_path: str): | 
|  | """Returns a list of test targets for the given test suite.""" | 
|  | # Check if the suite exists (which may not be true for failing suites). | 
|  | # We use two queries here because the return code for a failed query is | 
|  | # unfortunately the same as the return code for a bazel configuration error. | 
|  | target_dir = test_suite_path.split(':')[0] | 
|  | query = [ | 
|  | 'bazel', 'query', '--ui_event_filters=-DEBUG', | 
|  | '--noshow_loading_progress', '--noshow_progress', f'{target_dir}/...' | 
|  | ] | 
|  | targets = check_and_get_output_lines(query) | 
|  | if test_suite_path not in targets: | 
|  | return [] | 
|  |  | 
|  | query = [ | 
|  | 'bazel', 'query', '--ui_event_filters=-DEBUG', | 
|  | '--noshow_loading_progress', '--noshow_progress', | 
|  | f'tests({test_suite_path})' | 
|  | ] | 
|  | tests = check_and_get_output_lines(query) | 
|  | return tests |