xref: /aosp_15_r20/build/bazel/rules/droiddoc/droiddoc_exported_dir_test.bzl (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
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