#!/usr/bin/env bash
# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

################################################################################
# Runs pytest on the repository.
#
# Usage:
#  check/pytest [--actually-quiet] [--flags for pytest] [paths-relative-to-root]
#
# The --actually-quiet argument filters out any progress output from pytest.
#
# You may specify pytest flags and specific files to test. The file paths
# must be relative to the repository root. If no files are specified, everything
# is tested.
################################################################################

# Get the working directory to the repo root.
cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" || exit 1
cd "$(git rev-parse --show-toplevel)" || exit 1

rootdir=$(pwd)

PYTEST_ARGS=()
ACTUALLY_QUIET=""
for arg in "$@"; do
    if [[ "${arg}" == "--actually-quiet" ]]; then
        ACTUALLY_QUIET=1
    else
        PYTEST_ARGS+=("${arg}")
    fi
done

if [ -z "${ACTUALLY_QUIET}" ]; then
    pytest -c dev_tools/conf/pytest.ini --rootdir="$rootdir" "${PYTEST_ARGS[@]}"
else
    # Filter out lines like "...F....x...      [ 42%]", with coloring.
    pytest -c dev_tools/conf/pytest.ini \
           --rootdir="$rootdir" -q --color=yes "${PYTEST_ARGS[@]}" |
        grep -Pv '^(.\[0m)?[\.FEsx]+(.\[36m)?\s+\[\s*\d+%\](.\[0m)?$'
    exit "${PIPESTATUS[0]}"
fi
