// 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.

package {
    default_visibility: [":__subpackages__"],
    default_applicable_licenses: ["external_robolectric-shadows_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
// See: http://go/android-license-faq
license {
    name: "external_robolectric-shadows_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-MIT",
    ],
    license_text: [
        "LICENSE",
    ],
}

// Empty library. Should be removed
java_library {
    name: "robolectric_android-all-stub",
    visibility: ["//visibility:public"],
}

// 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_host {
    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_host {
    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",
}

java_device_for_host {
    name: "robolectric_android-all-device-deps",
    libs: [
        "conscrypt-for-host",
        "core-icu4j-for-host",
        "core-libart-for-host",
        "ext",
        "framework-all",
        "icu4j-icudata-jarjar",
        "icu4j-icutzdata-jarjar",
        "ims-common",
        "android.test.base_static",
        "libphonenumber-platform",
        "okhttp-for-host",
        "services",
        "services.accessibility",
        "telephony-common",

    ],
}

java_library_host {
    name: "robolectric-host-android_all",
    static_libs: [
        "robolectric_android-all-device-deps",
        "robolectric_tzdata",
        "robolectric_framework_res",
        "robolectric_framework_raw_res",
    ],
    dist: {
        targets: [
            "sdk",
            "win_sdk",
        ],
        dest: "android-all-robolectric.jar",
    },

    java_resources: [
        // Copy the build.prop
        ":robolectric_build_props",
    ],
    visibility: [
        ":__subpackages__",
        "//prebuilts/misc/common/robolectric",
    ],
}

//#############################################
// 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"],
    visibility: ["//visibility:public"],
}

// 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"],
}
