bazel-skylib/tests/common_settings_tests.bzl

168 lines
4.9 KiB
Python
Raw Normal View History

# Copyright 2023 The Bazel Authors. All rights reserved.
#
# 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.
"""Analysis tests for common_settings.bzl."""
load("//lib:unittest.bzl", "analysistest", "asserts")
load("//rules:common_settings.bzl", "int_flag", "int_setting", "string_flag", "string_setting")
def _template_variable_info_contents_test_impl(ctx):
env = analysistest.begin(ctx)
target_under_test = analysistest.target_under_test(env)
if ctx.attr.expected:
asserts.equals(
env,
expected = ctx.attr.expected,
actual = target_under_test[platform_common.TemplateVariableInfo].variables,
)
else:
asserts.false(env, platform_common.TemplateVariableInfo in target_under_test)
return analysistest.end(env)
_template_variable_info_contents_test = analysistest.make(
_template_variable_info_contents_test_impl,
attrs = {
"expected": attr.string_dict(),
},
)
def _test_template_variable_info_contents():
int_flag(
name = "my_int_flag",
build_setting_default = 42,
make_variable = "MY_INT_1",
)
_template_variable_info_contents_test(
name = "my_int_flag_test",
target_under_test = ":my_int_flag",
expected = {
"MY_INT_1": "42",
},
)
int_setting(
name = "my_int_setting",
build_setting_default = 21,
make_variable = "MY_INT_2",
)
_template_variable_info_contents_test(
name = "my_int_setting_test",
target_under_test = ":my_int_setting",
expected = {
"MY_INT_2": "21",
},
)
string_flag(
name = "my_string_flag",
build_setting_default = "foo",
make_variable = "MY_STRING_1",
)
_template_variable_info_contents_test(
name = "my_string_flag_test",
target_under_test = ":my_string_flag",
expected = {
"MY_STRING_1": "foo",
},
)
string_setting(
name = "my_string_setting",
build_setting_default = "bar",
make_variable = "MY_STRING_2",
)
_template_variable_info_contents_test(
name = "my_string_setting_test",
target_under_test = ":my_string_setting",
expected = {
"MY_STRING_2": "bar",
},
)
string_flag(
name = "my_string_flag_without_make_variable",
build_setting_default = "foo",
)
_template_variable_info_contents_test(
name = "my_string_flag_without_make_variable_test",
target_under_test = ":my_string_flag_without_make_variable",
expected = {},
)
def _failure_test_impl(ctx):
env = analysistest.begin(ctx)
asserts.expect_failure(env, ctx.attr.expected_failure)
return analysistest.end(env)
_failure_test = analysistest.make(
_failure_test_impl,
attrs = {
"expected_failure": attr.string(),
},
expect_failure = True,
)
def _test_make_variable_name_failures():
int_flag(
name = "my_failing_int_flag",
build_setting_default = 42,
make_variable = "my_int_1",
tags = ["manual"],
)
_failure_test(
name = "my_failing_int_flag_test",
target_under_test = ":my_failing_int_flag",
expected_failure = "Error setting //tests:my_failing_int_flag: invalid make variable name 'my_int_1'. Make variable names may only contain uppercase letters, digits, and underscores.",
)
string_flag(
name = "my_failing_string_flag",
build_setting_default = "foo",
make_variable = "MY STRING",
tags = ["manual"],
)
_failure_test(
name = "my_failing_string_flag_test",
target_under_test = ":my_failing_string_flag",
expected_failure = "Error setting //tests:my_failing_string_flag: invalid make variable name 'MY STRING'. Make variable names may only contain uppercase letters, digits, and underscores.",
)
def common_settings_test_suite(name = "common_settings_test_suite"):
_test_template_variable_info_contents()
_test_make_variable_name_failures()
native.test_suite(
name = "common_settings_test_suite",
tests = [
"my_int_flag_test",
"my_int_setting_test",
"my_string_flag_test",
"my_string_setting_test",
"my_string_flag_without_make_variable_test",
"my_failing_int_flag_test",
"my_failing_string_flag_test",
],
)