// Copyright (C) 2021 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: ["art_license"],
}

java_defaults {
    name: "odsign_e2e_tests_defaults",
    defaults: ["art_module_source_build_java_defaults"],
    srcs: ["test-src/**/*.java"],
    libs: ["tradefed"],
    static_libs: [
        "cts-install-lib-host",
        "frameworks-base-hostutils",
    ],
}

java_test_host {
    name: "odsign_e2e_tests",
    defaults: ["odsign_e2e_tests_defaults"],
    // TODO(b/228838581): Do not add `data` to the defaults unless the bug is
    // fixed.
    data: [
        ":odsign_e2e_test_app",
    ],
    test_config: "odsign-e2e-tests.xml",
    test_suites: [
        "general-tests",
        "cts",
    ],
}

java_test_host {
    name: "odsign_e2e_tests_full",
    defaults: ["odsign_e2e_tests_defaults"],
    // TODO(b/228838581): Do not add `data` to the defaults unless the bug is
    // fixed.
    data: [
        ":odsign_e2e_test_app",
    ],
    java_resources: [
        ":art-gtest-jars-Main",
    ],
    test_config: "odsign-e2e-tests-full.xml",
    test_suites: [
        "general-tests",
    ],
}

cc_library_shared {
    name: "libOdsignTestAppJni",
    defaults: ["art_defaults"],
    srcs: ["jni/**/*.cc"],
    shared_libs: [
        "libnativehelper_compat_libc++",
        "liblog",
    ],
    static_libs: [
        "libbase_ndk",
    ],
    stl: "c++_static",
    sdk_version: "current",
}

android_test_helper_app {
    name: "odsign_e2e_test_app",
    defaults: ["art_module_source_build_java_defaults"],
    manifest: "AndroidManifest.xml",
    srcs: ["src/**/*.java"],
    jni_libs: [
        "libOdsignTestAppJni",
    ],
    compile_multilib: "both",
    libs: [
        "junit",
    ],
    static_libs: [
        "androidx.test.ext.truth",
        "androidx.test.runner",
        "ctstestrunner-axt",
    ],
    sdk_version: "system_current",
    min_sdk_version: "30",
}
