// Copyright (C) 2018 The Android Open Source Project
//
// 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.

package {
    default_applicable_licenses: ["Android-Apache-2.0"],
    default_team: "trendy_team_art_mainline",
}

java_library {
    name: "cts-vmtests-dot",
    libs: ["junit"],
    srcs: ["src/dot/**/*.java"],
    installable: false,
    include_srcs: true,
    host_supported: true,
    errorprone: {
        javacflags: [
            "-Xep:IdentityBinaryExpression:WARN",
            "-Xep:BadShiftAmount:WARN",
        ],
    },
}

java_binary_host {
    name: "vmtests-buildutil",
    static_libs: [
        "cts-vmtests-dot",
        "junit",
    ],
    srcs: [
        "build/src/util/build/BuildCTSHostSources.java",
        "build/src/util/build/BuildCTSMainsSources.java",
        "build/src/util/build/BuildUtilBase.java",
        "build/src/util/build/FileUtil.java",
        "build/src/util/build/JUnitTestCollector.java",
    ],
    wrapper: "etc/vmtests-buildutil.sh",
}

java_genrule_host {
    name: "vmtests_generated_host_test_sources",
    tools: [
        "vmtests-buildutil",
        "soong_zip",
    ],
    cmd: "$(location vmtests-buildutil) util.build.BuildCTSHostSources $(genDir) " +
        " && $(location soong_zip) -jar -o $(out) -C $(genDir) -D $(genDir)/dot",
    out: ["vmtests.host.generated.srcjar"],
}

java_library_host {
    name: "host-cts-vmtests",
    libs: [
        "junit",
        "tradefed",
    ],
    srcs: [":vmtests_generated_host_test_sources"],
    installable: false,
}

java_genrule_host {
    name: "vmtests-dfh-dex-generated",
    tools: [
        "cfassembler",
        "soong_zip",
    ],
    tool_files: ["etc/vmtests-cfassembler.sh"],
    srcs: ["src/dot/**/*.dfh"],
    cmd: "$(location etc/vmtests-cfassembler.sh) $(location cfassembler) $(location soong_zip) $(genDir) $(out) $(in)",
    out: ["vmtests_dfh_dex_generated.jar"],
}

java_genrule {
    name: "vmtests_generated_mains_test_sources",
    tools: [
        "vmtests-buildutil",
        "soong_zip",
    ],
    cmd: "mkdir $(genDir)/src" +
        " && $(location vmtests-buildutil) util.build.BuildCTSMainsSources $(genDir)/src " +
        " && $(location soong_zip) -jar -o $(out) -C $(genDir)/src -D $(genDir)/src",
    out: ["vmtests.mains.generated.srcjar"],
}

java_library {
    name: "vmtests-mains",
    installable: true,
    libs: ["cts-vmtests-dot"],
    srcs: [":vmtests_generated_mains_test_sources"],
}

// TODO: Add vmtests-mains' dex jar to vmtests-generated-resources when
//       it can be addressed.

java_library_host {
    name: "vmtests-generated-resources",
    static_libs: [
        "host-cts-vmtests",
        "vmtests-dfh-dex-generated",
    ],
    installable: false,
}

java_library_host {
    name: "cts-tf-dalvik-buildutil",
    srcs: [
        "build/src/**/*.java",
        "src/**/*.java",
    ],
    libs: [
        "junit",
        "jsr305",
        "d8",
        "android-smali",
    ],
    errorprone: {
        javacflags: [
            "-Xep:IdentityBinaryExpression:WARN",
            "-Xep:BadShiftAmount:WARN",
        ],
    },
}

java_genrule_host {
    name: "vm-tests-tf-lib",
    tools: [
        "soong_zip",
        "d8",
    ],
    srcs: [
        "src/**/*",
        ":cts-tf-dalvik-buildutil",
        ":vmtests-generated-resources",
        ":vmtests-mains",
        ":cts-vmtests-dot",
        ":junit",
        ":d8",
        ":android-smali",
    ],
    cmd: "echo Generating BuildDalvikSuite tests" +
        " && mkdir -p $(genDir)/classes" +
        " && unzip -bq $(location :cts-tf-dalvik-buildutil) -d $(genDir)/classes" +
        " && mkdir -p $(genDir)/tests" +
        " && java" +
        "     -cp $(location :cts-tf-dalvik-buildutil):$(location :junit):$(location :d8):$(location :android-smali):$(location :cts-vmtests-dot)" +
        "     util.build.BuildDalvikSuite" +
        "     cts/tools/vm-tests-tf/src" +
        "     $(genDir)/tests" +
        "     $(genDir)/classes" +
        " && echo Generating dexcore tests" +
        " && $(location soong_zip) -jar -o $(genDir)/tests/dot/junit/dexcore.jar-class.jar" +
        "     -C $(genDir)/classes" +
        "         -f $(genDir)/classes/dot/junit/DxUtil.class" +
        "         -f $(genDir)/classes/dot/junit/DxAbstractMain.class" +
        "         -f $(genDir)/classes/dot/junit/AssertionFailedException.class" +
        " && mkdir -p $(genDir)/dexcore" +
        " && $(location d8) -JXms16M -JXmx2048M" +
        "     --output $(genDir)/dexcore" +
        "     $(genDir)/tests/dot/junit/dexcore.jar-class.jar" +
        " && $(location soong_zip) -jar -o $(genDir)/tests/dot/junit/dexcore.jar" +
        "     -C $(genDir)/dexcore" +
        "         -D $(genDir)/dexcore" +
        " && echo Combining tests" +
        " && mkdir -p $(genDir)/out" +
        " && unzip -bq $(location :vmtests-generated-resources) -d $(genDir)/generated-resources" +
        " && cp $(location :vmtests-mains) $(genDir)/mains.jar" +
        " && $(location soong_zip) -o $(out)" +
        "     -C $(genDir)/generated-resources" +
        "         -D $(genDir)/generated-resources" +
        "     -C $(genDir)" +
        "         -D $(genDir)/tests" +
        "     -j -P tests -f $(genDir)/mains.jar",
    out: ["vm-tests-tf-lib.jar"],
}

java_test_host {
    name: "vm-tests-tf",
    static_libs: [
        "compatibility-host-vm-targetprep",
        "vm-tests-tf-lib",
    ],
    test_config: "AndroidTest.xml",
    test_suites: [
        "cts",
        "general-tests",
    ],
}
