// Copyright (C) 2011 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: ["//visibility:private"],
    default_applicable_licenses: ["external_apache-harmony_license"],
}

// Added automatically by a large-scale-change
// See: http://go/android-license-faq
license {
    name: "external_apache-harmony_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

java_test {
    name: "apache-harmony-tests",
    visibility: [
        "//art/build/sdk",
        "//cts/tests/libcore/luni",
    ],
    hostdex: true,
    srcs: [
        "beans/src/test/java/**/*.java",
        "logging/src/test/java/**/*.java",
        "luni/src/test/java/**/*.java",
        "sql/src/test/java/**/*.java",
        "support/src/test/java/**/*.java",

        "beans/src/test/support/java/**/*.java",
        "logging/src/test/support/java/**/*.java",
        "luni/src/test/support/java/**/*.java",
        "sql/src/test/support/java/**/*.java",
        "support/src/test/support/java/**/*.java",

        "luni/src/test/api/common/**/*.java",
        "luni/src/test/api/unix/**/*.java",
        "luni/src/test/impl/common/**/*.java",
        "luni/src/test/impl/unix/**/*.java",
    ],
    java_resource_dirs: [
        "beans/src/test/resources",
        "logging/src/test/resources",
        "sql/src/test/resources",
        "support/src/test/resources",
    ],
    sdk_version: "none",
    system_modules: "core-all-system-modules",
    libs: [
        "junit",
    ],
    static_libs: [
        "core-tests-support",
    ],
    javacflags: ["-Xmaxwarns 9999999"],
    // Pin java_version until jarjar is certified to support later versions. http://b/72703434
    java_version: "1.8",

    // b/73499927
    errorprone: {
        javacflags: [
            "-Xep:MissingOverride:OFF",
            "-Xep:DoNotCall:OFF",
            "-Xep:TryFailThrowable:OFF",
            "-Xep:ReturnValueIgnored:OFF",
        ],
    },
}
