// 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.
java_defaults {
    name: "FrameworkMockingServicesTests-jni-defaults",
    jni_libs: [
        "libmockingservicestestjni",
    ],
}

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_base_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_base_license"],
}

android_test {
    name: "FrameworksMockingServicesTests",
    defaults: [
        "FrameworkMockingServicesTests-jni-defaults",
        "modules-utils-testable-device-config-defaults",
    ],

    srcs: [
        "src/**/*.java",
        "src/**/*.kt",
        ":framework-internal-display-sources",
    ],

    static_libs: [
        "androidx.test.core",
        "androidx.test.runner",
        "androidx.test.espresso.core",
        "androidx.test.espresso.contrib",
        "androidx.test.ext.truth",
        "backup_flags_lib",
        "flag-junit",
        "frameworks-base-testutils",
        "hamcrest-library",
        "kotlin-test",
        "mockingservicestests-utils-mockito",
        "mockito-target-extended-minus-junit4",
        "platform-compat-test-rules",
        "platform-test-annotations",
        "service-blobstore",
        "service-jobscheduler",
        "service-permission.impl",
        "service-sdksandbox.impl",
        "services.backup",
        "services.companion",
        "services.core",
        "services.devicepolicy",
        "services.net",
        "services.usage",
        "services.wallpapereffectsgeneration",
        "servicestests-core-utils",
        "servicestests-utils-mockito-extended",
        "testables",
        "truth",
        // TODO: remove once Android migrates to JUnit 4.12, which provides assertThrows
        "testng",
        "compatibility-device-util-axt",
    ],

    libs: [
        "android.test.mock",
        "android.test.base",
        "android.test.runner",
        "servicestests-core-utils",
    ],

    java_resources: [
        ":apex.test",
        ":test.rebootless_apex_v1",
        ":test.rebootless_apex_v2",
    ],

    jni_libs: [
        "libpsi",
    ],

    certificate: "platform",
    platform_apis: true,
    test_suites: [
        "device-tests",
        "automotive-tests",
    ],

    optimize: {
        enabled: false,
    },
}

java_library {
    name: "mockingservicestests-utils-mockito",
    srcs: [
        "utils-mockito/**/*.kt",
    ],
    static_libs: [
        "junit",
        "mockito-target-extended-minus-junit4",
    ],
    libs: [
        "android.test.runner",
    ],
}
