blob: 8e74eee4c20601950c7e9d57d804df4d16b7819e [file] [log] [blame] [edit]
# Copyright (C) 2022 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("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load("//build/bazel/rules:prebuilt_file.bzl", "PrebuiltFileInfo")
load("//build/bazel/rules:prebuilt_xml.bzl", "prebuilt_xml")
load("//build/bazel/rules/test_common:args.bzl", "get_arg_value")
SRC = "fooSrc.xml"
DIR = "etc/xml"
DTD_SCHEMA = "bar.dtd"
XSD_SCHEMA = "baz.xsd"
FILENAME = "fooFilename"
def _test_prebuilt_xml_commands_impl(ctx):
env = analysistest.begin(ctx)
actions = analysistest.target_actions(env)
asserts.equals(env, 1, len(actions), "expected 1 action got {}".format(actions))
args = actions[0].argv
asserts.true(env, len(args) >= 8, "expected at least 8 arguments but got {} {}".format(len(args), args))
offset = 0
schema = ctx.attr.schema
if schema != "":
offset = 2
if schema == "--schema":
asserts.equals(env, paths.basename(get_arg_value(args, schema)), XSD_SCHEMA)
elif schema == "--dtdvalid":
asserts.equals(env, paths.basename(get_arg_value(args, schema)), DTD_SCHEMA)
else:
analysistest.fail(
env,
"Expected schema attr to be --schema or --dtdvalid but got {}".format(schema),
)
asserts.equals(env, SRC, paths.basename(args[1 + offset]))
asserts.equals(env, ">", args[2 + offset])
asserts.equals(env, "/dev/null", args[3 + offset])
asserts.equals(env, "&&", args[4 + offset])
asserts.equals(env, "touch", args[5 + offset])
asserts.equals(env, "-a", args[6 + offset])
return analysistest.end(env)
prebuilt_xml_commands_test = analysistest.make(
_test_prebuilt_xml_commands_impl,
attrs = {
"schema": attr.string(),
},
)
def _test_prebuilt_xml_commands():
name = "prebuilt_xml_commands"
test_name = name + "_test"
prebuilt_xml(
name = name,
src = SRC,
filename = FILENAME,
tags = ["manual"],
)
prebuilt_xml_commands_test(
name = test_name,
target_under_test = name,
)
return test_name
def _test_prebuilt_xml_commands_dtd():
name = "prebuilt_xml_commands_dtd"
test_name = name + "_test"
prebuilt_xml(
name = name,
src = SRC,
schema = DTD_SCHEMA,
filename = FILENAME,
tags = ["manual"],
)
prebuilt_xml_commands_test(
name = test_name,
schema = "--dtdvalid",
target_under_test = name,
)
return test_name
def _test_prebuilt_xml_commands_xsd():
name = "prebuilt_xml_commands_xsd"
test_name = name + "_test"
prebuilt_xml(
name = name,
schema = XSD_SCHEMA,
filename = FILENAME,
src = SRC,
tags = ["manual"],
)
prebuilt_xml_commands_test(
name = test_name,
schema = "--schema",
target_under_test = name,
)
return test_name
def _test_prebuilt_xml_PrebuiltFileInfo_impl(ctx):
env = analysistest.begin(ctx)
target_under_test = analysistest.target_under_test(env)
prebuilt_file_info = target_under_test[PrebuiltFileInfo]
asserts.equals(
env,
FILENAME,
prebuilt_file_info.filename,
"expected PrebuiltFileInfo filename to be {} but got {}".format(FILENAME, prebuilt_file_info.filename),
)
asserts.equals(
env,
SRC,
prebuilt_file_info.src.basename,
"expected PrebuiltFileInfo src to be {} but got {}".format(SRC, prebuilt_file_info.src),
)
asserts.equals(
env,
DIR,
prebuilt_file_info.dir,
"expected PrebuiltFileInfo dir to be {} but got {}".format(DIR, prebuilt_file_info.dir),
)
return analysistest.end(env)
prebuilt_xml_PrebuiltFileInfo_test = analysistest.make(_test_prebuilt_xml_PrebuiltFileInfo_impl)
def _test_prebuilt_xml_PrebuiltFileInfo():
name = "prebuilt_xml_PrebuiltFileInfo"
test_name = name + "_test"
prebuilt_xml(
name = name,
src = SRC,
filename = FILENAME,
tags = ["manual"],
)
prebuilt_xml_PrebuiltFileInfo_test(
name = test_name,
target_under_test = name,
)
return test_name
def _test_prebuilt_xml_schema_validation_impl(ctx):
env = analysistest.begin(ctx)
actions = analysistest.target_actions(env)
target = analysistest.target_under_test(env)
validation_outputs = target.output_groups._validation.to_list()
for action in actions:
for validation_output in validation_outputs:
if validation_output in action.inputs.to_list():
analysistest.fail(
env,
"%s is a validation action output, but is an input to action %s" % (
validation_output,
action,
),
)
return analysistest.end(env)
prebuilt_xml_schema_validation_test = analysistest.make(_test_prebuilt_xml_schema_validation_impl)
def _test_prebuilt_xml_dtd_schema_validation():
name = "prebuilt_xml_dtd_schema_validation"
test_name = name + "_test"
prebuilt_xml(
name = name,
src = SRC,
schema = DTD_SCHEMA,
filename = FILENAME,
tags = ["manual"],
)
prebuilt_xml_schema_validation_test(
name = test_name,
target_under_test = name,
)
return test_name
def _test_prebuilt_xml_xsd_schema_validation():
name = "prebuilt_xml_xsd_schema_validation"
test_name = name + "_test"
prebuilt_xml(
name = name,
schema = XSD_SCHEMA,
filename = FILENAME,
src = SRC,
tags = ["manual"],
)
prebuilt_xml_schema_validation_test(
name = test_name,
target_under_test = name,
)
return test_name
def _test_prebuilt_xml_minimal_schema_validation():
name = "prebuilt_xml_minimal_schema_validation"
test_name = name + "_test"
prebuilt_xml(
name = name,
src = SRC,
filename = FILENAME,
tags = ["manual"],
)
prebuilt_xml_schema_validation_test(
name = test_name,
target_under_test = name,
)
return test_name
def prebuilt_xml_test_suite(name):
native.test_suite(
name = name,
tests = [
_test_prebuilt_xml_commands(),
_test_prebuilt_xml_commands_dtd(),
_test_prebuilt_xml_commands_xsd(),
_test_prebuilt_xml_minimal_schema_validation(),
_test_prebuilt_xml_dtd_schema_validation(),
_test_prebuilt_xml_xsd_schema_validation(),
_test_prebuilt_xml_PrebuiltFileInfo(),
],
)