1# Copyright (C) 2023 The Android Open Source Project 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 16load("//build/bazel/rules/test_common:rules.bzl", "expect_failure_test") 17load(":droiddoc_exported_dir.bzl", "DroiddocExportedDirInfo", "droiddoc_exported_dir") 18 19def _droiddoc_exported_dir_test_impl(ctx): 20 env = analysistest.begin(ctx) 21 target = analysistest.target_under_test(env) 22 info = target[DroiddocExportedDirInfo] 23 asserts.equals(env, expected = [], actual = analysistest.target_actions(env), msg = "no actions expected") 24 asserts.equals(env, expected = ctx.attr.expected_dir, actual = info.dir) 25 asserts.equals(env, expected = ctx.attr.expected_srcs, actual = [s.short_path for s in info.srcs]) 26 27 return analysistest.end(env) 28 29droiddoc_exported_dir_test = analysistest.make( 30 _droiddoc_exported_dir_test_impl, 31 attrs = { 32 "expected_dir": attr.string(), 33 "expected_srcs": attr.string_list(), 34 }, 35) 36 37def _test_name(base_name): 38 return base_name + "_test" 39 40def _test_droiddoc_exported_dir_success(name, srcs, dir, expected_srcs, expected_dir): 41 droiddoc_exported_dir( 42 name = name, 43 dir = dir, 44 srcs = srcs, 45 tags = ["manual"], 46 ) 47 droiddoc_exported_dir_test( 48 name = _test_name(name), 49 target_under_test = name, 50 expected_dir = expected_dir, 51 expected_srcs = expected_srcs, 52 ) 53 return _test_name(name) 54 55def _test_droiddoc_exported_dir_failure(name, dir, srcs, expected_msg): 56 droiddoc_exported_dir( 57 name = name, 58 dir = dir, 59 srcs = srcs, 60 tags = ["manual"], 61 ) 62 expect_failure_test( 63 name = _test_name(name), 64 target_under_test = name, 65 failure_message = expected_msg, 66 ) 67 return _test_name(name) 68 69def droiddoc_exported_dir_test_suite(name): 70 native.test_suite( 71 name = name, 72 tests = [ 73 _test_droiddoc_exported_dir_success( 74 name = "without_dir", 75 dir = None, 76 srcs = [":src1.txt", "//build/bazel/rules/droiddoc:src2.txt"], 77 expected_dir = "build/bazel/rules/droiddoc", 78 expected_srcs = ["build/bazel/rules/droiddoc/src1.txt", "build/bazel/rules/droiddoc/src2.txt"], 79 ), 80 _test_droiddoc_exported_dir_success( 81 name = "with_dir", 82 dir = "dir", 83 srcs = [":dir/src.txt", ":dir/dir2/src.txt"], 84 expected_dir = "build/bazel/rules/droiddoc/dir", 85 expected_srcs = ["build/bazel/rules/droiddoc/dir/src.txt", "build/bazel/rules/droiddoc/dir/dir2/src.txt"], 86 ), 87 _test_droiddoc_exported_dir_success( 88 name = "subpackage", 89 dir = None, 90 srcs = ["//build/bazel/rules/droiddoc/bogus:bogus.txt"], 91 expected_dir = "build/bazel/rules/droiddoc", 92 expected_srcs = ["build/bazel/rules/droiddoc/bogus/bogus.txt"], 93 ), 94 _test_droiddoc_exported_dir_failure( 95 name = "wrong_dir", 96 dir = "some_dir", 97 srcs = [":src.txt"], 98 expected_msg = "File [build/bazel/rules/droiddoc/src.txt] is not under [build/bazel/rules/droiddoc/some_dir]", 99 ), 100 _test_droiddoc_exported_dir_failure( 101 name = "wrong_package", 102 dir = None, 103 srcs = ["//build/bazel_common_rules/test_mappings:test_mappings.sh"], 104 expected_msg = "File [build/bazel_common_rules/test_mappings/test_mappings.sh] is not under [build/bazel/rules/droiddoc]", 105 ), 106 _test_droiddoc_exported_dir_failure( 107 name = "wrong_workspace", 108 dir = None, 109 srcs = ["@rules_proto//proto:defs.bzl"], 110 expected_msg = "File [../rules_proto/proto/defs.bzl] is under a different workspace [rules_proto]", 111 ), 112 ], 113 ) 114