# Copyright 2023 The Bazel Authors. All rights reserved.
#
# 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
#
#    http://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.

load("@rules_bazel_integration_test//bazel_integration_test:defs.bzl", "default_test_runner")
load(":integration_test.bzl", "rules_python_integration_test")

licenses(["notice"])

_WORKSPACE_FLAGS = [
    "--noenable_bzlmod",
]

_WORKSPACE_GAZELLE_PLUGIN_FLAGS = [
    "--override_repository=rules_python_gazelle_plugin=../../../rules_python_gazelle_plugin",
]

_GAZELLE_PLUGIN_FLAGS = [
    "--override_module=rules_python_gazelle_plugin=../../../rules_python_gazelle_plugin",
]

default_test_runner(
    name = "workspace_test_runner",
    bazel_cmds = [
        "info {}".format(" ".join(_WORKSPACE_FLAGS)),
        "test {} //...".format(" ".join(_WORKSPACE_FLAGS)),
    ],
    visibility = ["//visibility:public"],
)

default_test_runner(
    name = "workspace_test_runner_gazelle_plugin",
    bazel_cmds = [
        "info {}".format(" ".join(_WORKSPACE_FLAGS + _WORKSPACE_GAZELLE_PLUGIN_FLAGS)),
        "test {} //...".format(" ".join(_WORKSPACE_FLAGS + _WORKSPACE_GAZELLE_PLUGIN_FLAGS)),
    ],
    visibility = ["//visibility:public"],
)

default_test_runner(
    name = "test_runner",
    visibility = ["//visibility:public"],
)

default_test_runner(
    name = "test_runner_gazelle_plugin",
    bazel_cmds = [
        "info {}".format(" ".join(_GAZELLE_PLUGIN_FLAGS)),
        "test {} //...".format(" ".join(_GAZELLE_PLUGIN_FLAGS)),
    ],
    visibility = ["//visibility:public"],
)

# TODO: add compile_pip_requirements_test_from_external_repo

rules_python_integration_test(
    name = "pip_repository_entry_points_workspace_test",
    timeout = "long",
    bzlmod = False,
    # The dependencies needed for this test are not cross-platform: https://github.com/bazelbuild/rules_python/issues/260
    tags = ["fix-windows"],
    workspace_path = "pip_repository_entry_points",
)

rules_python_integration_test(
    name = "compile_pip_requirements_test",
)

rules_python_integration_test(
    name = "compile_pip_requirements_workspace_test",
    bzlmod = False,
    workspace_path = "compile_pip_requirements",
)

rules_python_integration_test(
    name = "ignore_root_user_error_test",
)

rules_python_integration_test(
    name = "ignore_root_user_error_workspace_test",
    bzlmod = False,
    workspace_path = "ignore_root_user_error",
)

rules_python_integration_test(
    name = "pip_parse_test",
)

rules_python_integration_test(
    name = "pip_parse_workspace_test",
    bzlmod = False,
    workspace_path = "pip_parse",
)

rules_python_integration_test(
    name = "py_cc_toolchain_registered_test",
)

rules_python_integration_test(
    name = "py_cc_toolchain_registered_workspace_test",
    bzlmod = False,
    workspace_path = "py_cc_toolchain_registered",
)
