// Copyright (C) 2019 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.

java_library {
    name: "robolectric_android-all-stub",

    static_libs: [
        "conscrypt",
        "core-icu4j",
        "core-libart",
        "ext",
        "framework",
        "icu4j-icudata-jarjar",
        "icu4j-icutzdata-jarjar",
        "ims-common",
        "android.test.base_static",
        "libphonenumber-platform",
        "okhttp",
        "services",
        "services.accessibility",
        "telephony-common",
        "updatable-media",

        "robolectric_tzdata",
        "robolectric_framework_res",
        "robolectric_framework_raw_res",
    ],

    java_resources: [
        // Copy the build.prop
        ":robolectric_build_props",
    ],
    dist: {
        targets: [
            "sdk",
            "win_sdk",
        ],
        dest: "android-all-robolectric.jar",
    }
}

// build.prop file created by module type defined in soong/robolectric.go
robolectric_build_props {
    name: "robolectric_build_props",
}

// package the framework raw/uncompiled resources and assets into a jar
// This logic can be removed once the transition to binary resources is complete
java_library {
    name: "robolectric_framework_raw_res_orig",
    java_resources: [":robolectric_framework_raw_res_files"],
}

// Move the raw/uncompiled resources and assets into raw-res/
// This logic can be removed once the transition to binary resources is complete
java_genrule {
    name: "robolectric_framework_raw_res",
    out: ["robolectric_framework_raw_res.jar"],
    srcs: [":robolectric_framework_raw_res_orig"],
    tools: ["zip2zip"],
    cmd: "$(location zip2zip) " +
        "-i $(location :robolectric_framework_raw_res_orig) " +
        "-o $(location robolectric_framework_raw_res.jar) " +
        "-x META-INF/**/* " +
        "**/*:raw-res/",
}

java_genrule {
    name: "robolectric_framework_res",
    tools: ["zip2zip"],
    srcs: [":framework-res"],
    out: ["robolectric_framework_res.jar"],
    cmd: "$(location zip2zip) " +
        "-i $(location :framework-res) " +
        "-o $(location robolectric_framework_res.jar) " +
        "-x classes.dex " +
        "-x META-INF/**/* " +
        "-0 resources.arsc",
}

// Make robolectric_android-all-stub available as a host jar
java_device_for_host {
    name: "robolectric-host-android_all",
    libs: ["robolectric_android-all-stub"],
}

//#############################################
// Assemble Robolectric_all
//#############################################

java_library_host {
    name: "Robolectric_all",

    static_libs: [
        "Robolectric_shadows_androidx_fragment",
        "Robolectric_shadows_httpclient",
        "Robolectric_shadows_framework",
        "Robolectric_shadows_supportv4",
        "Robolectric_shadows_multidex",
        "Robolectric_robolectric",
        "Robolectric_annotations",
        "Robolectric_resources",
        "Robolectric_shadowapi",
        "Robolectric_sandbox",
        "Robolectric_junit",
        "Robolectric_utils",
        "asm-6.0", // if upgrading to ASM 7.0+, unset my_require_v53_or_lower_class_files in robotest-internal.mk (requires robolectric 4.0.x, see b/135459087)
        "junit",
        "asm-tree-6.0",
        "guava",
        "asm-commons-6.0",
        "bouncycastle-unbundled",
        "robolectric-sqlite4java-0.282",
        "hamcrest",
        "hamcrest-library",
        "robolectric-host-androidx-test-runner",
        "robolectric-host-org_apache_http_legacy",
    ],

    java_resource_dirs: [
        "shadows/framework/src/main/resources",
        "src/main/resources",
    ],
}

// Make Robolectric_all available as a target jar
java_host_for_device {
    name: "Robolectric_all-target",
    libs: ["Robolectric_all"],
}

// Make dependencies available as host jars
java_device_for_host {
    name: "robolectric-host-androidx-test-core",
    libs: ["androidx.test.core"],
}

java_device_for_host {
    name: "robolectric-host-androidx-test-ext-junit",
    libs: ["androidx.test.ext.junit"],
}

java_device_for_host {
    name: "robolectric-host-androidx-test-monitor",
    libs: ["androidx.test.monitor"],
}

java_device_for_host {
    name: "robolectric-host-androidx-test-runner",
    libs: ["androidx.test.runner"],
}

java_device_for_host {
    name: "robolectric-host-androidx",
    libs: ["androidx.fragment_fragment"],
}

java_device_for_host {
    name: "robolectric-host-android-support-v4",
    libs: ["android-support-v4"],
}

java_device_for_host {
    name: "robolectric-host-android-support-multidex",
    libs: ["android-support-multidex"],
}

java_device_for_host {
    name: "robolectric-host-org_apache_http_legacy",
    libs: ["org.apache.http.legacy.stubs"],
}
