1# Copyright (C) 2022 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:paths.bzl", "paths") 16load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") 17load("//build/bazel/rules:prebuilt_file.bzl", "PrebuiltFileInfo") 18load("//build/bazel/rules:prebuilt_xml.bzl", "prebuilt_xml") 19load("//build/bazel/rules/test_common:args.bzl", "get_arg_value") 20 21SRC = "fooSrc.xml" 22DIR = "etc/xml" 23DTD_SCHEMA = "bar.dtd" 24XSD_SCHEMA = "baz.xsd" 25FILENAME = "fooFilename" 26 27def _test_prebuilt_xml_commands_impl(ctx): 28 env = analysistest.begin(ctx) 29 actions = analysistest.target_actions(env) 30 asserts.equals(env, 1, len(actions), "expected 1 action got {}".format(actions)) 31 args = actions[0].argv 32 33 asserts.true(env, len(args) >= 8, "expected at least 8 arguments but got {} {}".format(len(args), args)) 34 35 offset = 0 36 schema = ctx.attr.schema 37 38 if schema != "": 39 offset = 2 40 if schema == "--schema": 41 asserts.equals(env, paths.basename(get_arg_value(args, schema)), XSD_SCHEMA) 42 elif schema == "--dtdvalid": 43 asserts.equals(env, paths.basename(get_arg_value(args, schema)), DTD_SCHEMA) 44 else: 45 analysistest.fail( 46 env, 47 "Expected schema attr to be --schema or --dtdvalid but got {}".format(schema), 48 ) 49 50 asserts.equals(env, SRC, paths.basename(args[1 + offset])) 51 asserts.equals(env, ">", args[2 + offset]) 52 asserts.equals(env, "/dev/null", args[3 + offset]) 53 asserts.equals(env, "&&", args[4 + offset]) 54 asserts.equals(env, "touch", args[5 + offset]) 55 asserts.equals(env, "-a", args[6 + offset]) 56 57 return analysistest.end(env) 58 59prebuilt_xml_commands_test = analysistest.make( 60 _test_prebuilt_xml_commands_impl, 61 attrs = { 62 "schema": attr.string(), 63 }, 64) 65 66def _test_prebuilt_xml_commands(): 67 name = "prebuilt_xml_commands" 68 test_name = name + "_test" 69 70 prebuilt_xml( 71 name = name, 72 src = SRC, 73 filename = FILENAME, 74 tags = ["manual"], 75 ) 76 prebuilt_xml_commands_test( 77 name = test_name, 78 target_under_test = name, 79 ) 80 81 return test_name 82 83def _test_prebuilt_xml_commands_dtd(): 84 name = "prebuilt_xml_commands_dtd" 85 test_name = name + "_test" 86 87 prebuilt_xml( 88 name = name, 89 src = SRC, 90 schema = DTD_SCHEMA, 91 filename = FILENAME, 92 tags = ["manual"], 93 ) 94 prebuilt_xml_commands_test( 95 name = test_name, 96 schema = "--dtdvalid", 97 target_under_test = name, 98 ) 99 100 return test_name 101 102def _test_prebuilt_xml_commands_xsd(): 103 name = "prebuilt_xml_commands_xsd" 104 test_name = name + "_test" 105 prebuilt_xml( 106 name = name, 107 schema = XSD_SCHEMA, 108 filename = FILENAME, 109 src = SRC, 110 tags = ["manual"], 111 ) 112 prebuilt_xml_commands_test( 113 name = test_name, 114 schema = "--schema", 115 target_under_test = name, 116 ) 117 118 return test_name 119 120def _test_prebuilt_xml_PrebuiltFileInfo_impl(ctx): 121 env = analysistest.begin(ctx) 122 target_under_test = analysistest.target_under_test(env) 123 prebuilt_file_info = target_under_test[PrebuiltFileInfo] 124 125 asserts.equals( 126 env, 127 FILENAME, 128 prebuilt_file_info.filename, 129 "expected PrebuiltFileInfo filename to be {} but got {}".format(FILENAME, prebuilt_file_info.filename), 130 ) 131 132 asserts.equals( 133 env, 134 SRC, 135 prebuilt_file_info.src.basename, 136 "expected PrebuiltFileInfo src to be {} but got {}".format(SRC, prebuilt_file_info.src), 137 ) 138 139 asserts.equals( 140 env, 141 DIR, 142 prebuilt_file_info.dir, 143 "expected PrebuiltFileInfo dir to be {} but got {}".format(DIR, prebuilt_file_info.dir), 144 ) 145 146 return analysistest.end(env) 147 148prebuilt_xml_PrebuiltFileInfo_test = analysistest.make(_test_prebuilt_xml_PrebuiltFileInfo_impl) 149 150def _test_prebuilt_xml_PrebuiltFileInfo(): 151 name = "prebuilt_xml_PrebuiltFileInfo" 152 test_name = name + "_test" 153 prebuilt_xml( 154 name = name, 155 src = SRC, 156 filename = FILENAME, 157 tags = ["manual"], 158 ) 159 prebuilt_xml_PrebuiltFileInfo_test( 160 name = test_name, 161 target_under_test = name, 162 ) 163 164 return test_name 165 166def _test_prebuilt_xml_schema_validation_impl(ctx): 167 env = analysistest.begin(ctx) 168 169 actions = analysistest.target_actions(env) 170 target = analysistest.target_under_test(env) 171 validation_outputs = target.output_groups._validation.to_list() 172 for action in actions: 173 for validation_output in validation_outputs: 174 if validation_output in action.inputs.to_list(): 175 analysistest.fail( 176 env, 177 "%s is a validation action output, but is an input to action %s" % ( 178 validation_output, 179 action, 180 ), 181 ) 182 183 return analysistest.end(env) 184 185prebuilt_xml_schema_validation_test = analysistest.make(_test_prebuilt_xml_schema_validation_impl) 186 187def _test_prebuilt_xml_dtd_schema_validation(): 188 name = "prebuilt_xml_dtd_schema_validation" 189 test_name = name + "_test" 190 prebuilt_xml( 191 name = name, 192 src = SRC, 193 schema = DTD_SCHEMA, 194 filename = FILENAME, 195 tags = ["manual"], 196 ) 197 prebuilt_xml_schema_validation_test( 198 name = test_name, 199 target_under_test = name, 200 ) 201 202 return test_name 203 204def _test_prebuilt_xml_xsd_schema_validation(): 205 name = "prebuilt_xml_xsd_schema_validation" 206 test_name = name + "_test" 207 prebuilt_xml( 208 name = name, 209 schema = XSD_SCHEMA, 210 filename = FILENAME, 211 src = SRC, 212 tags = ["manual"], 213 ) 214 prebuilt_xml_schema_validation_test( 215 name = test_name, 216 target_under_test = name, 217 ) 218 219 return test_name 220 221def _test_prebuilt_xml_minimal_schema_validation(): 222 name = "prebuilt_xml_minimal_schema_validation" 223 test_name = name + "_test" 224 prebuilt_xml( 225 name = name, 226 src = SRC, 227 filename = FILENAME, 228 tags = ["manual"], 229 ) 230 prebuilt_xml_schema_validation_test( 231 name = test_name, 232 target_under_test = name, 233 ) 234 235 return test_name 236 237def prebuilt_xml_test_suite(name): 238 native.test_suite( 239 name = name, 240 tests = [ 241 _test_prebuilt_xml_commands(), 242 _test_prebuilt_xml_commands_dtd(), 243 _test_prebuilt_xml_commands_xsd(), 244 _test_prebuilt_xml_minimal_schema_validation(), 245 _test_prebuilt_xml_dtd_schema_validation(), 246 _test_prebuilt_xml_xsd_schema_validation(), 247 _test_prebuilt_xml_PrebuiltFileInfo(), 248 ], 249 ) 250