"""
Expose each test as a bazel target
"""

load(
    "@com_googlesource_gerrit_bazlets//tools:junit.bzl",
    "junit_tests",
)

def tests(tests, srcprefix = "tst/", extra_tags = []):
    """
    Create a target each of the tests

    Each target is the full push (removing srcprefix) replacing directory
    separators with underscores.

    e.g. a test under tst/a/b/c/A.test will become the target
    //org.eclipse.jgit.tests:a_b_c_A

    Args:
      tests: a glob of tests files
      srcprefix: prefix between org.eclipse.jgit.tests and the package
        start
      extra_tags: additional tags to add to the generated targets
    """
    for src in tests:
        name = src[len(srcprefix):len(src) - len(".java")].replace("/", "_")
        labels = []
        timeout = "moderate"
        if name.startswith("org_eclipse_jgit_"):
            package = name[len("org.eclipse.jgit_"):]
            if package.startswith("internal_storage_"):
                package = package[len("internal.storage_"):]
            index = package.find("_")
            if index > 0:
                labels.append(package[:index])
            else:
                labels.append(index)
        if "lib" not in labels:
            labels.append("lib")

        labels.extend(extra_tags)

        # TODO(http://eclip.se/534285): Make this test pass reliably
        # and remove the flaky attribute.
        flaky = src.endswith("CrissCrossMergeTest.java")

        additional_deps = []
        if src.endswith("RootLocaleTest.java"):
            additional_deps = [
                "//org.eclipse.jgit.pgm:pgm",
                "//org.eclipse.jgit.ui:ui",
            ]
        if src.endswith("WalkEncryptionTest.java"):
            additional_deps = [
                "//org.eclipse.jgit:insecure_cipher_factory",
            ]
        if src.endswith("SecurityManagerMissingPermissionsTest.java"):
            additional_deps = [
                "//lib:slf4j-simple",
            ]
        if src.endswith("JDKHttpConnectionTest.java"):
            additional_deps = [
                "//lib:mockito",
            ]
        if src.endswith("TransportHttpTest.java"):
            additional_deps = [
                "//lib:mockito",
            ]
        if src.endswith("ArchiveCommandTest.java"):
            additional_deps = [
                "//lib:commons-compress",
                "//lib:xz",
                "//org.eclipse.jgit.archive:jgit-archive",
            ]
        if src.endswith("RevWalkSortTest.java") or \
           src.endswith("RevWalkSortTopoWithCommitGraphTest.java"):
            additional_deps = [
                "//lib:assertj-core",
            ]
        if src.endswith("FileRepositoryBuilderAfterOpenConfigTest.java") or \
           src.endswith("RefDirectoryAfterOpenConfigTest.java") or \
           src.endswith("SnapshottingRefDirectoryTest.java"):
            additional_deps = [
                ":base",
            ]
        heap_size = "-Xmx256m"
        if src.endswith("HugeCommitMessageTest.java"):
            heap_size = "-Xmx512m"
        if src.endswith("EolRepositoryTest.java") or src.endswith("GcCommitSelectionTest.java"):
            timeout = "long"

        junit_tests(
            name = name,
            tags = labels,
            srcs = [src],
            deps = additional_deps + [
                ":helpers",
                ":tst_rsrc",
                "//lib:javaewah",
                "//lib:junit",
                "//lib:slf4j-api",
                "//lib:slf4j-simple",
                "//org.eclipse.jgit:jgit",
                "//org.eclipse.jgit.junit:junit",
                "//org.eclipse.jgit.lfs:jgit-lfs",
            ],
            flaky = flaky,
            jvm_flags = [heap_size, "-Dfile.encoding=UTF-8"],
            timeout = timeout,
        )
