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