| # Copyright (C) 2023 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. |
| |
| load("@bazel_skylib//lib:paths.bzl", "paths") |
| load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite") |
| load("@rules_testing//lib:truth.bzl", "matching") |
| load("@rules_testing//lib:util.bzl", "util") |
| load(":framework_resources.bzl", "framework_resources") |
| |
| def _exists(unused_value): |
| return True |
| |
| _exist_matcher = matching.custom( |
| "matcher to check that a set is not empty", |
| _exists, |
| ) |
| |
| def _test_native_providers(name): |
| util.helper_target( |
| framework_resources, |
| name = name + "_subject", |
| manifest = "AndroidManifest.xml", |
| resource_files = ["res/values/attrs.xml"], |
| resource_zips = ["resource_zip.zip"], |
| ) |
| analysis_test( |
| name = name, |
| impl = _test_native_providers_impl, |
| target = name + "_subject", |
| ) |
| |
| def _test_starlark_rule(name): |
| util.helper_target( |
| framework_resources, |
| name = name + "_subject", |
| manifest = "AndroidManifest.xml", |
| resource_files = ["res/values/attrs.xml"], |
| resource_zips = ["resource_zip.zip"], |
| ) |
| analysis_test( |
| name = name, |
| impl = _test_starlark_rule_impl, |
| target = name + "_subject" + "_RESOURCES_DO_NOT_USE", |
| ) |
| |
| def _test_native_providers_impl(env, target): |
| env.expect.that_target(target).default_outputs().contains_predicate( |
| matching.file_basename_equals(target.label.name + ".apk"), |
| ) |
| env.expect.that_target(target).output_group("classjar").contains_predicate(_exist_matcher) |
| env.expect.that_target(target).output_group("srcjar").contains_predicate(_exist_matcher) |
| env.expect.that_target(target).output_group("resource_apk").contains_predicate(_exist_matcher) |
| |
| def _test_starlark_rule_impl(env, target): |
| for mnemonic in [ |
| "FixAndroidManifest", |
| "UnzipResourceZips", |
| "CompileAndroidResources", |
| "ExcludeDefaultResources", |
| "AaptLinkFrameworkRes", |
| "FrameworkResSrcJar", |
| "StarlarkRClassGenerator", |
| "TouchFakeProtoManifest", |
| ]: |
| # Tautology, but the test will fail if the action doesn't exit. |
| env.expect.that_target(target).action_named(mnemonic).mnemonic().equals(mnemonic) |
| |
| # Providers |
| env.expect.that_target(target).has_provider(AndroidApplicationResourceInfo) |
| env.expect.that_target(target).output_group("classjar").contains_predicate(_exist_matcher) |
| env.expect.that_target(target).output_group("srcjar").contains_predicate(_exist_matcher) |
| env.expect.that_target(target).output_group("resource_apk").contains_predicate(_exist_matcher) |
| |
| def framework_resources_test_suite(name): |
| test_suite( |
| name = name, |
| tests = [ |
| _test_native_providers, |
| _test_starlark_rule, |
| ], |
| ) |