package(default_visibility = ["//visibility:__pkg__"])

licenses(["notice"])  # Apache License 2.0

exports_files(["LICENSE"])

sh_test(
    name = "ijar_test",
    size = "enormous",
    srcs = ["ijar_test.sh"],
    args = [
        "$(JAVABASE)/bin/javac",
        "$(JAVABASE)/bin/java",
        "$(JAVABASE)/bin/jar",
        "$(JAVABASE)/bin/javap",
        "$(location //third_party/ijar)",
        # We assume unzip and zip to be on the path
        "unzip",
        "zip",
        "$(location :zip_count)",
    ],
    data = [
        "//third_party/ijar",
        "A.java",
        "B.java",
        "Object.java",
        "WellCompressed1.java",
        "WellCompressed2.java",
        ":libtypeannotations2.jar",
        ":libmethodparameters.jar",
        # This is a precompiled .jar file because it needs to be compiled with JDK 11.
        # TODO(cushon): build from source once we have a JDK 11
        "nestmates/nestmates.jar",
        "records/records.jar",
        "sealed/sealed.jar",
        ":source_debug_extension.jar",
        ":keep_for_compile_lib.jar",
        ":largest_regular.jar",
        ":smallest_zip64.jar",
        ":definitely_zip64.jar",
        ":zip_count",
        "TypeAnnotationTest2.java",
        ":libinvokedynamic.jar",
        # Intentionally bad test JAR: file count in central directory
        # wrong.
        "libwrongcentraldir.jar",
        ":dynamic_constant.jar",
        "@bazel_tools//tools/jdk:current_java_runtime",
    ],
    shard_count = 5,
    tags = ["zip"],
    toolchains = [
        "@bazel_tools//tools/jdk:current_java_runtime",
    ],
    deps = [":testenv"],
)

sh_test(
    name = "zip_test",
    size = "large",
    srcs = ["zip_test.sh"],
    args = [
        "$(location //third_party/ijar:zipper)",
        # We assume unzip and zip to be on the path
        "unzip",
        "zip",
    ],
    data = ["//third_party/ijar:zipper"],
    tags = ["zip"],
    deps = [":testenv"],
)

sh_library(
    name = "testenv",
    srcs = ["testenv.sh"],
    deps = [
        "//src/test/shell:bashunit",
        "@bazel_tools//tools/bash/runfiles",
    ],
)

java_library(
    name = "invokedynamic",
    testonly = 1,
    srcs = ["invokedynamic/ClassWithLambda.java"],
)

# For testing purposes: a class which exposes a private nested class in
# public API, classes with annotations and a class with different forms of
# deprecations markers
java_library(
    name = "ijar_testlib",
    srcs = [
        "AnnotatedClass.java",
        "Annotations.java",
        "DeprecatedParts.java",
        "DumbClass.java",
        "EnclosingMethod.java",
        "PrivateMembersClass.java",
    ],
)

# For testing purposes: an interface jar (ijar) which includes the
# interface view of the various test class from above.
genrule(
    name = "interface_ijar_testlib",
    srcs = [":ijar_testlib"],
    outs = ["interface_ijar_testlib.jar"],
    cmd = "$(location //third_party/ijar) $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "interface_ijar_testlib_with_target_label",
    srcs = [":ijar_testlib"],
    outs = ["interface_ijar_testlib_with_target_label.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --injecting_rule_kind foo_library $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "interface_ijar_testlib_nostrip",
    srcs = [":ijar_testlib"],
    outs = ["interface_ijar_testlib_nostrip.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "jar_with_manifest_nostrip",
    srcs = ["jar-with-manifest.jar"],
    outs = ["jar-with-manifest-nostrip.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "jar_with_manifest_and_target_label_nostrip",
    srcs = ["jar-with-manifest-and-target-label.jar"],
    outs = ["jar-with-manifest-and-target-label-nostrip.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "jar_without_manifest_nostrip",
    srcs = ["jar-without-manifest.jar"],
    outs = ["jar-without-manifest-nostrip.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "jar_with_manifest_sections_nostrip",
    testonly = 1,
    srcs = [":jar_with_manifest_sections"],
    outs = ["jar-with-manifest-sections-nostrip.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "jar_with_target_label_and_manifest_sections_nostrip",
    testonly = 1,
    srcs = [":jar_with_target_label_and_manifest_sections"],
    outs = ["jar-with-target-label-and-manifest-sections-nostrip.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "jar_without_manifest_nostrip_idempotence",
    srcs = ["jar-without-manifest-nostrip.jar"],
    outs = ["jar-without-manifest-nostrip-idempotence.jar"],
    cmd = "$(location //third_party/ijar) --target_label //foo:foo --nostrip_jar $< $@",
    tools = ["//third_party/ijar"],
)

genrule(
    name = "empty_with_target_label",
    srcs = [":empty_zip.jar"],
    outs = ["empty_with_target_label.jar"],
    cmd = "$(location //third_party/ijar) $< $@ --target_label //empty",
    tools = ["//third_party/ijar"],
)

java_library(
    name = "typeannotations2",
    srcs = glob(["typeannotations2/**/*.java"]),
)

java_library(
    name = "methodparameters",
    srcs = ["methodparameters/Test.java"],
    javacopts = ["-parameters"],
)

java_binary(
    name = "gen_source_debug_extension",
    srcs = ["GenSourceDebugExtension.java"],
    main_class = "test.GenSourceDebugExtension",
    deps = ["//third_party:asm"],
)

genrule(
    name = "gen_source_debug_extension_jar",
    srcs = [],
    outs = ["source_debug_extension.jar"],
    cmd = "$(location :gen_source_debug_extension) $@",
    tools = ["gen_source_debug_extension"],
)

java_binary(
    name = "gen_dynamic_constant",
    srcs = ["GenDynamicConstant.java"],
    main_class = "test.GenDynamicConstant",
    deps = ["//third_party:asm"],
)

genrule(
    name = "gen_dynamic_constant_jar",
    srcs = [],
    outs = ["dynamic_constant.jar"],
    cmd = "$(location :gen_dynamic_constant) $@",
    tools = [":gen_dynamic_constant"],
)

java_library(
    name = "local_and_anonymous_lib",
    srcs = ["LocalAndAnonymous.java"],
    javacopts = ["-source 8 -target 8"],
)

genrule(
    name = "local_and_anonymous_interface",
    srcs = [":local_and_anonymous_lib"],
    outs = ["local_and_anonymous-interface.jar"],
    cmd = "$(location //third_party/ijar) $< $@",
    tools = ["//third_party/ijar"],
)

java_binary(
    name = "GenKeepForCompile",
    testonly = 1,
    srcs = ["GenKeepForCompile.java"],
    main_class = "GenKeepForCompile",
    deps = [
        "//third_party:asm",
    ],
)

genrule(
    name = "keep_for_compile_lib",
    testonly = 1,
    outs = ["keep_for_compile_lib.jar"],
    cmd = "$(location :GenKeepForCompile) $@",
    tools = [":GenKeepForCompile"],
)

java_binary(
    name = "GenModuleInfo",
    testonly = 1,
    srcs = ["GenModuleInfo.java"],
    main_class = "GenModuleInfo",
    deps = ["//third_party:guava"],
)

genrule(
    name = "module_info",
    testonly = 1,
    outs = ["module_info.jar"],
    cmd = "$(location :GenModuleInfo) $@",
    tools = [":GenModuleInfo"],
)

genrule(
    name = "module_info_interface",
    testonly = 1,
    srcs = [":module_info.jar"],
    outs = ["module_info-interface.jar"],
    cmd = "$(location //third_party/ijar) $< $@",
    tools = ["//third_party/ijar"],
)

java_binary(
    name = "GenKotlinModule",
    testonly = 1,
    srcs = ["GenKotlinModule.java"],
    main_class = "GenKotlinModule",
    deps = ["//third_party:guava"],
)

genrule(
    name = "kotlin_module",
    testonly = 1,
    outs = ["kotlin_module.jar"],
    cmd = "$(location :GenKotlinModule) $@",
    tools = [":GenKotlinModule"],
)

genrule(
    name = "kotlin_module_interface",
    testonly = 1,
    srcs = [":kotlin_module.jar"],
    outs = ["kotlin_module-interface.jar"],
    cmd = "$(location //third_party/ijar) $< $@",
    tools = ["//third_party/ijar"],
)

java_binary(
    name = "GenScalaTasty",
    testonly = 1,
    srcs = ["GenScalaTasty.java"],
    main_class = "GenScalaTasty",
    deps = ["//third_party:guava"],
)

genrule(
    name = "scala_tasty",
    testonly = 1,
    outs = ["scala_tasty.jar"],
    cmd = "$(location :GenScalaTasty) $@",
    tools = [":GenScalaTasty"],
)

genrule(
    name = "scala_tasty-interface",
    testonly = 1,
    srcs = [":scala_tasty.jar"],
    outs = ["scala_tasty-interface.jar"],
    cmd = "$(location //third_party/ijar) $< $@",
    tools = ["//third_party/ijar"],
)

java_binary(
    name = "GenJarWithManifestSections",
    testonly = 1,
    srcs = ["GenJarWithManifestSections.java"],
    main_class = "GenJarWithManifestSections",
    deps = ["//third_party:guava"],
)

genrule(
    name = "jar_with_manifest_sections",
    testonly = 1,
    outs = ["jar-with-manifest-sections.jar"],
    cmd = "$(location :GenJarWithManifestSections) $@",
    tools = [":GenJarWithManifestSections"],
)

genrule(
    name = "jar_with_target_label_and_manifest_sections",
    testonly = 1,
    outs = ["jar-with-target-label-and-manifest-sections.jar"],
    cmd = "$(location :GenJarWithManifestSections) $@ //not:this",
    tools = [":GenJarWithManifestSections"],
)

java_test(
    name = "IjarTests",
    size = "small",
    srcs = [
        "IjarTests.java",
        "StripVerifyingVisitor.java",
    ],
    data = [
        "PrivateNestedClass.java",
        "UseDeprecatedParts.java",
        "UseRestrictedAnnotation.java",
        "jar-with-manifest.jar",
        "jar-with-manifest-and-target-label.jar",
        "jar-with-manifest-sections.jar",
        "jar-without-manifest.jar",
        "package-info.java",
        ":empty_with_target_label",
        ":ijar_testlib",
        ":interface_ijar_testlib",
        ":interface_ijar_testlib_nostrip",
        ":interface_ijar_testlib_with_target_label",
        ":jar_with_manifest_and_target_label_nostrip",
        ":jar_with_manifest_nostrip",
        ":jar_with_manifest_sections_nostrip",
        ":jar_with_target_label_and_manifest_sections_nostrip",
        ":jar_without_manifest_nostrip",
        ":jar_without_manifest_nostrip_idempotence",
        ":kotlin_module-interface.jar",
        ":liblocal_and_anonymous_lib.jar",
        ":local_and_anonymous-interface.jar",
        ":module_info-interface.jar",
        ":scala_tasty-interface.jar",
    ],
    tags = ["zip"],
    test_class = "IjarTests",
    deps = [
        "//third_party:asm",
        "//third_party:guava",
        "//third_party:junit4",
        "//third_party:truth",
    ],
)

test_suite(
    name = "all_tests",
    testonly = 1,
    visibility = ["//visibility:public"],
)

java_binary(
    name = "gen_zip_with_entries",
    srcs = ["GenZipWithEntries.java"],
    jvm_flags = ["-Djdk.util.zip.inhibitZip64=false"],
    main_class = "test.GenZipWithEntries",
    deps = ["//third_party:asm"],
)

[
    genrule(
        name = name,
        outs = [name + ".jar"],
        cmd = "$(location :gen_zip_with_entries) %s $@" % entries,
        tools = [":gen_zip_with_entries"],
    )
    for name, entries in [
        ("largest_regular", 65535),
        ("smallest_zip64", 65536),
        ("definitely_zip64", 70000),
        ("empty_zip", 1),
    ]
]

java_binary(
    name = "zip_count",
    srcs = ["ZipCount.java"],
    jvm_flags = ["-Djdk.util.zip.inhibitZip64=false"],
    main_class = "test.ZipCount",
)

filegroup(
    name = "srcs",
    srcs = glob(["**"]),
    visibility = ["//third_party/ijar:__pkg__"],
)
