load("@rules_python//python:defs.bzl", "py_binary", "py_test")
load("@py_deps//:requirements.bzl", "requirement")

py_test(
    name = "pytest",
    srcs = glob(["tests/*.py"]),
    data = glob(["tests/support/**"]),
    main = "tests/run_pytest.py",
    deps = [
        "//pylib/anki",
        requirement("pytest"),
    ],
)

py_test(
    name = "mypy",
    srcs = [
        "tests/run_mypy.py",
    ],
    args = [
        "anki",
        "$(location mypy.ini)",
        "$(location //python/stubs:extendsitepkgs)",
    ],
    data = [
        "mypy.ini",
        "//python/stubs",
        "//python/stubs:extendsitepkgs",
    ],
    env = {"EXTRA_SITE_PACKAGES": "$(location //python/stubs)"},
    main = "tests/run_mypy.py",
    deps = [
        "//pylib/anki",
        "//pylib/anki:proto",
        requirement("mypy"),
    ],
)

py_test(
    name = "pylint",
    srcs = [
        "tests/run_pylint.py",
    ],
    args = [
        "anki",
        "$(location .pylintrc)",
    ],
    data = [".pylintrc"],
    main = "tests/run_pylint.py",
    deps = [
        "//pylib/anki",
        requirement("pylint"),
    ],
)

py_test(
    name = "format_check",
    srcs = [
        "//pylib/tools:py_source_files",
        "//pylib/anki:py_source_files",
    ] + glob([
        "tests/**/*.py",
    ]),
    args = [
        "$(location .isort.cfg)",
    ],
    data = [".isort.cfg"],
    main = "tests/run_format.py",
    deps = [
        requirement("black"),
        requirement("isort"),
    ],
)

py_binary(
    name = "format",
    srcs = [
        "tests/run_format.py",
    ],
    args = [
        "$(location .isort.cfg)",
        "fix",
    ],
    data = [".isort.cfg"],
    main = "tests/run_format.py",
    tags = ["manual"],
    deps = [
        requirement("black"),
        requirement("isort"),
    ],
)
